From 9bb95ca4be8d542ee19fcbcbf130c18b2f8b5005 Mon Sep 17 00:00:00 2001 From: jerryjzhang Date: Wed, 10 Jul 2024 21:08:02 +0800 Subject: [PATCH] (feature)(chat)Add switch to enable LLM-based memory review, as it leads to more token costs. #1385 --- .../com/tencent/supersonic/chat/server/agent/Agent.java | 5 +++++ .../supersonic/chat/server/memory/MemoryReviewTask.java | 6 +++--- .../chat/server/persistence/dataobject/AgentDO.java | 1 + .../headless/server/processor/ParseInfoProcessor.java | 5 ++++- .../src/main/resources/config.update/sql-update.sql | 5 ++++- launchers/standalone/src/main/resources/db/schema-h2.sql | 1 + launchers/standalone/src/test/resources/db/schema-h2.sql | 1 + 7 files changed, 19 insertions(+), 5 deletions(-) diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/agent/Agent.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/agent/Agent.java index bba3a2007..1715b04d1 100644 --- a/chat/server/src/main/java/com/tencent/supersonic/chat/server/agent/Agent.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/agent/Agent.java @@ -24,6 +24,7 @@ public class Agent extends RecordInfo { private Integer id; private Integer enableSearch; + private Integer enableMemoryReview; private String name; private String description; @@ -60,6 +61,10 @@ public class Agent extends RecordInfo { return enableSearch != null && enableSearch == 1; } + public boolean enableMemoryReview() { + return enableMemoryReview != null && enableMemoryReview == 1; + } + public static boolean containsAllModel(Set detectViewIds) { return !CollectionUtils.isEmpty(detectViewIds) && detectViewIds.contains(-1L); } diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/memory/MemoryReviewTask.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/memory/MemoryReviewTask.java index b6205885d..301debbdd 100644 --- a/chat/server/src/main/java/com/tencent/supersonic/chat/server/memory/MemoryReviewTask.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/memory/MemoryReviewTask.java @@ -32,7 +32,7 @@ public class MemoryReviewTask { + "please take a review and give your opinion.\n" + "#Rules: " + "1.ALWAYS follow the output format: `opinion=(POSITIVE|NEGATIVE),comment=(your comment)`." - + "2.DO NOT check the usage of `数据日期` field and `datediff()` function.\n" + + "2.ALWAYS recognize `数据日期` as the date field.\n" + "#Question: %s\n" + "#Schema: %s\n" + "#SQL: %s\n" @@ -51,7 +51,7 @@ public class MemoryReviewTask { memoryService.getMemoriesForLlmReview().stream() .forEach(m -> { Agent chatAgent = agentService.getAgent(m.getAgentId()); - if (Objects.nonNull(chatAgent)) { + if (Objects.nonNull(chatAgent) && chatAgent.enableMemoryReview()) { String promptStr = String.format(INSTRUCTION, m.getQuestion(), m.getDbSchema(), m.getS2sql()); Prompt prompt = PromptTemplate.from(promptStr).apply(Collections.EMPTY_MAP); @@ -72,7 +72,7 @@ public class MemoryReviewTask { log.debug("ChatLanguageModel not found for agent:{}", chatAgent.getId()); } } else { - log.debug("Agent not found for memory:{}", m.getAgentId()); + log.debug("Agent id {} not found or memory review disabled", m.getAgentId()); } }); } diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/AgentDO.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/AgentDO.java index 8be3968e3..b57d55952 100644 --- a/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/AgentDO.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/AgentDO.java @@ -65,6 +65,7 @@ public class AgentDO { * */ private Integer enableSearch; + private Integer enableMemoryReview; private String modelConfig; private String multiTurnConfig; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/processor/ParseInfoProcessor.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/processor/ParseInfoProcessor.java index 1fe8bce64..7d3be93bf 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/processor/ParseInfoProcessor.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/processor/ParseInfoProcessor.java @@ -56,8 +56,8 @@ public class ParseInfoProcessor implements ResultProcessor { if (StringUtils.isBlank(correctS2SQL)) { return; } - List expressions = SqlSelectHelper.getFilterExpression(correctS2SQL); + //set dataInfo try { if (!org.apache.commons.collections.CollectionUtils.isEmpty(expressions)) { @@ -70,6 +70,9 @@ public class ParseInfoProcessor implements ResultProcessor { log.error("set dateInfo error :", e); } + if (correctS2SQL.equals(sqlInfo.getParsedS2SQL())) { + return; + } //set filter Long dataSetId = parseInfo.getDataSetId(); try { diff --git a/launchers/standalone/src/main/resources/config.update/sql-update.sql b/launchers/standalone/src/main/resources/config.update/sql-update.sql index e06d38611..6ca264fa6 100644 --- a/launchers/standalone/src/main/resources/config.update/sql-update.sql +++ b/launchers/standalone/src/main/resources/config.update/sql-update.sql @@ -354,4 +354,7 @@ alter table s2_agent add column `prompt_config` varchar(6000) COLLATE utf8_unico --20240707 alter table s2_agent add model_config varchar(6000) null; -alter table s2_agent add `prompt_config` varchar(5000) COLLATE utf8_unicode_ci DEFAULT NULL; \ No newline at end of file +alter table s2_agent add `prompt_config` varchar(5000) COLLATE utf8_unicode_ci DEFAULT NULL; + +--20240710 +alter table s2_agent add enable_memory_review tinyint DEFAULT 0; \ No newline at end of file diff --git a/launchers/standalone/src/main/resources/db/schema-h2.sql b/launchers/standalone/src/main/resources/db/schema-h2.sql index 8dda9fb36..704006f00 100644 --- a/launchers/standalone/src/main/resources/db/schema-h2.sql +++ b/launchers/standalone/src/main/resources/db/schema-h2.sql @@ -383,6 +383,7 @@ CREATE TABLE IF NOT EXISTS s2_agent updated_by varchar(100) null, updated_at TIMESTAMP null, enable_search int null, + enable_memory_review int null, PRIMARY KEY (`id`) ); COMMENT ON TABLE s2_agent IS 'agent information table'; diff --git a/launchers/standalone/src/test/resources/db/schema-h2.sql b/launchers/standalone/src/test/resources/db/schema-h2.sql index 6d5823f35..9049624c6 100644 --- a/launchers/standalone/src/test/resources/db/schema-h2.sql +++ b/launchers/standalone/src/test/resources/db/schema-h2.sql @@ -383,6 +383,7 @@ CREATE TABLE IF NOT EXISTS s2_agent updated_by varchar(100) null, updated_at TIMESTAMP null, enable_search int null, + enable_memory_review int null, PRIMARY KEY (`id`) ); COMMENT ON TABLE s2_agent IS 'agent information table';