diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/executor/SqlExecutor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/executor/SqlExecutor.java index 803017e68..1a69171d8 100644 --- a/chat/server/src/main/java/com/tencent/supersonic/chat/server/executor/SqlExecutor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/executor/SqlExecutor.java @@ -6,7 +6,9 @@ import com.tencent.supersonic.chat.server.pojo.ExecuteContext; import com.tencent.supersonic.chat.server.service.MemoryService; import com.tencent.supersonic.chat.server.util.ResultFormatter; import com.tencent.supersonic.common.pojo.QueryColumn; +import com.tencent.supersonic.common.pojo.SqlExemplar; import com.tencent.supersonic.common.util.ContextUtils; +import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq; import com.tencent.supersonic.headless.api.pojo.response.QueryResult; @@ -39,13 +41,18 @@ public class SqlExecutor implements ChatQueryExecutor { if (queryResult.getQueryState().equals(QueryState.SUCCESS) && queryResult.getQueryMode().equals(LLMSqlQuery.QUERY_MODE)) { + SqlExemplar exemplar = JsonUtil.toObject(JsonUtil.toString( + executeContext.getParseInfo().getProperties() + .get(SqlExemplar.PROPERTY_KEY)), SqlExemplar.class); + MemoryService memoryService = ContextUtils.getBean(MemoryService.class); memoryService.createMemory(ChatMemoryDO.builder() .agentId(executeContext.getAgent().getId()) .status(MemoryStatus.PENDING) - .question(executeContext.getQueryText()) - .s2sql(executeContext.getParseInfo().getSqlInfo().getParsedS2SQL()) - .dbSchema(buildSchemaStr(executeContext.getParseInfo())) + .question(exemplar.getQuestion()) + .sideInfo(exemplar.getSideInfo()) + .dbSchema(exemplar.getDbSchema()) + .s2sql(exemplar.getSql()) .createdBy(executeContext.getUser().getName()) .updatedBy(executeContext.getUser().getName()) .createdAt(new Date()) @@ -98,36 +105,4 @@ public class SqlExecutor implements ChatQueryExecutor { return queryResult; } - public String buildSchemaStr(SemanticParseInfo parseInfo) { - String tableStr = parseInfo.getDataSet().getName(); - StringBuilder metricStr = new StringBuilder(); - StringBuilder dimensionStr = new StringBuilder(); - - parseInfo.getMetrics().stream().forEach( - metric -> { - metricStr.append(metric.getName()); - if (StringUtils.isNotEmpty(metric.getDescription())) { - metricStr.append(" COMMENT '" + metric.getDescription() + "'"); - } - if (StringUtils.isNotEmpty(metric.getDefaultAgg())) { - metricStr.append(" AGGREGATE '" + metric.getDefaultAgg().toUpperCase() + "'"); - } - metricStr.append(","); - } - ); - - parseInfo.getDimensions().stream().forEach( - dimension -> { - dimensionStr.append(dimension.getName()); - if (StringUtils.isNotEmpty(dimension.getDescription())) { - dimensionStr.append(" COMMENT '" + dimension.getDescription() + "'"); - } - dimensionStr.append(","); - } - ); - - String template = "Table: %s, Metrics: [%s], Dimensions: [%s]"; - return String.format(template, tableStr, metricStr, dimensionStr); - } - } 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 feba255a1..cbedf8991 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 @@ -35,6 +35,7 @@ public class MemoryReviewTask { + "2.ALWAYS recognize `数据日期` as the date field.\n" + "#Question: %s\n" + "#Schema: %s\n" + + "#SideInfo: %s\n" + "#SQL: %s\n" + "#Response: "; @@ -52,7 +53,8 @@ public class MemoryReviewTask { .forEach(m -> { Agent chatAgent = agentService.getAgent(m.getAgentId()); if (Objects.nonNull(chatAgent) && chatAgent.enableMemoryReview()) { - String promptStr = String.format(INSTRUCTION, m.getQuestion(), m.getDbSchema(), m.getS2sql()); + String promptStr = String.format(INSTRUCTION, m.getQuestion(), m.getDbSchema(), + m.getSideInfo(), m.getS2sql()); Prompt prompt = PromptTemplate.from(promptStr).apply(Collections.EMPTY_MAP); keyPipelineLog.info("MemoryReviewTask reqPrompt:{}", promptStr); diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatMemoryDO.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatMemoryDO.java index fea7ee38f..1241a6928 100644 --- a/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatMemoryDO.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatMemoryDO.java @@ -20,11 +20,14 @@ public class ChatMemoryDO { @TableId(type = IdType.AUTO) private Long id; + @TableField("agent_id") + private Integer agentId; + @TableField("question") private String question; - @TableField("agent_id") - private Integer agentId; + @TableField("side_info") + private String sideInfo; @TableField("db_schema") private String dbSchema; diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/MemoryServiceImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/MemoryServiceImpl.java index 0574c315c..e5972fc96 100644 --- a/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/MemoryServiceImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/MemoryServiceImpl.java @@ -102,6 +102,7 @@ public class MemoryServiceImpl implements MemoryService { exemplarService.storeExemplar(embeddingConfig.getMemoryCollectionName(memory.getAgentId()), SqlExemplar.builder() .question(memory.getQuestion()) + .sideInfo(memory.getSideInfo()) .dbSchema(memory.getDbSchema()) .sql(memory.getS2sql()) .build()); @@ -113,6 +114,7 @@ public class MemoryServiceImpl implements MemoryService { exemplarService.removeExemplar(embeddingConfig.getMemoryCollectionName(memory.getAgentId()), SqlExemplar.builder() .question(memory.getQuestion()) + .sideInfo(memory.getSideInfo()) .dbSchema(memory.getDbSchema()) .sql(memory.getS2sql()) .build()); diff --git a/common/src/main/java/com/tencent/supersonic/common/pojo/SqlExemplar.java b/common/src/main/java/com/tencent/supersonic/common/pojo/SqlExemplar.java index 4b75cb8aa..f6bf2f162 100644 --- a/common/src/main/java/com/tencent/supersonic/common/pojo/SqlExemplar.java +++ b/common/src/main/java/com/tencent/supersonic/common/pojo/SqlExemplar.java @@ -11,8 +11,12 @@ import lombok.NoArgsConstructor; @AllArgsConstructor public class SqlExemplar { + public static final String PROPERTY_KEY = "sql_exemplar"; + private String question; + private String sideInfo; + private String dbSchema; private String sql; diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/LLMRequestService.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/LLMRequestService.java index bec25f4ee..dfb97564d 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/LLMRequestService.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/LLMRequestService.java @@ -120,10 +120,10 @@ public class LLMRequestService { public LLMResp runText2SQL(LLMReq llmReq) { SqlGenStrategy sqlGenStrategy = SqlGenStrategyFactory.get(llmReq.getSqlGenType()); - String modelName = llmReq.getSchema().getDataSetName(); + String dataSet = llmReq.getSchema().getDataSetName(); LLMResp result = sqlGenStrategy.generate(llmReq); result.setQuery(llmReq.getQueryText()); - result.setModelName(modelName); + result.setDataSet(dataSet); return result; } diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/LLMResponseService.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/LLMResponseService.java index 53eb2a910..7cf6b17d5 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/LLMResponseService.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/LLMResponseService.java @@ -2,6 +2,7 @@ package com.tencent.supersonic.headless.chat.parser.llm; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.jsqlparser.SqlValidHelper; +import com.tencent.supersonic.common.pojo.SqlExemplar; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.chat.query.QueryManager; import com.tencent.supersonic.headless.chat.query.llm.LLMSemanticQuery; @@ -35,6 +36,13 @@ public class LLMResponseService { Map properties = new HashMap<>(); properties.put(Constants.CONTEXT, parseResult); properties.put("type", "internal"); + SqlExemplar exemplar = SqlExemplar.builder() + .question(queryCtx.getQueryText()) + .sideInfo(parseResult.getLlmResp().getSideInfo()) + .dbSchema(parseResult.getLlmResp().getSchema()) + .sql(parseResult.getLlmResp().getSqlOutput()) + .build(); + properties.put(SqlExemplar.PROPERTY_KEY, exemplar); parseInfo.setProperties(properties); parseInfo.setScore(queryCtx.getQueryText().length() * (1 + weight)); parseInfo.setQueryMode(semanticQuery.getQueryMode()); diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/OnePassSCSqlGenStrategy.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/OnePassSCSqlGenStrategy.java index be732bcbb..e8063350c 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/OnePassSCSqlGenStrategy.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/OnePassSCSqlGenStrategy.java @@ -34,13 +34,15 @@ public class OnePassSCSqlGenStrategy extends SqlGenStrategy { + "1.ALWAYS use `数据日期` as the date field." + "2.ALWAYS specify date filter using `>`,`<`,`>=`,`<=` operator." + "3.ALWAYS calculate the absolute date range by yourself." - + "4.DO NOT include date filter in the where clause if not explicitly expressed in the question." + + "4.DO NOT include date filter in the where clause if not explicitly expressed in the `Question`." + "5.ONLY respond with the converted SQL statement.\n" + "#Exemplars:\n{{exemplar}}" - + "#Question:{{question}} #Schema:{{schema}} #SQL:"; + + "#Question:{{question}} #Schema:{{schema}} #SideInfo:{{information}} #SQL:"; @Override public LLMResp generate(LLMReq llmReq) { + LLMResp llmResp = new LLMResp(); + llmResp.setQuery(llmReq.getQueryText()); //1.recall exemplars keyPipelineLog.info("OnePassSCSqlGenStrategy llmReq:\n{}", llmReq); List> exemplarsList = promptHelper.getFewShotExemplars(llmReq); @@ -48,49 +50,51 @@ public class OnePassSCSqlGenStrategy extends SqlGenStrategy { //2.generate sql generation prompt for each self-consistency inference Map> prompt2Exemplar = new HashMap<>(); for (List exemplars : exemplarsList) { - Prompt prompt = generatePrompt(llmReq, exemplars); + llmReq.setDynamicExemplars(exemplars); + Prompt prompt = generatePrompt(llmReq, llmResp); prompt2Exemplar.put(prompt, exemplars); } //3.perform multiple self-consistency inferences parallelly - Map prompt2Output = new ConcurrentHashMap<>(); + Map output2Prompt = new ConcurrentHashMap<>(); prompt2Exemplar.keySet().parallelStream().forEach(prompt -> { keyPipelineLog.info("OnePassSCSqlGenStrategy reqPrompt:\n{}", prompt.toUserMessage()); ChatLanguageModel chatLanguageModel = getChatLanguageModel(llmReq.getModelConfig()); Response response = chatLanguageModel.generate(prompt.toUserMessage()); String result = response.content().text(); - prompt2Output.put(prompt, result); + output2Prompt.put(result, prompt); keyPipelineLog.info("OnePassSCSqlGenStrategy modelResp:\n{}", result); } ); //4.format response. Pair> sqlMapPair = ResponseHelper.selfConsistencyVote( - Lists.newArrayList(prompt2Output.values())); - LLMResp llmResp = new LLMResp(); - llmResp.setQuery(promptHelper.buildAugmentedQuestion(llmReq)); - llmResp.setDbSchema(promptHelper.buildSchemaStr(llmReq)); + Lists.newArrayList(output2Prompt.keySet())); llmResp.setSqlOutput(sqlMapPair.getLeft()); - //TODO: should use the same few-shot exemplars as the one chose by self-consistency vote - llmResp.setSqlRespMap(ResponseHelper.buildSqlRespMap(exemplarsList.get(0), sqlMapPair.getRight())); + List usedExemplars = prompt2Exemplar.get(output2Prompt.get(sqlMapPair.getLeft())); + llmResp.setSqlRespMap(ResponseHelper.buildSqlRespMap(usedExemplars, sqlMapPair.getRight())); return llmResp; } - private Prompt generatePrompt(LLMReq llmReq, List fewshotExampleList) { - StringBuilder exemplarsStr = new StringBuilder(); - for (SqlExemplar exemplar : fewshotExampleList) { - String exemplarStr = String.format("#Question:%s #Schema:%s #SQL:%s\n", - exemplar.getQuestion(), exemplar.getDbSchema(), exemplar.getSql()); - exemplarsStr.append(exemplarStr); + private Prompt generatePrompt(LLMReq llmReq, LLMResp llmResp) { + StringBuilder exemplars = new StringBuilder(); + for (SqlExemplar exemplar : llmReq.getDynamicExemplars()) { + String exemplarStr = String.format("#Question:%s #Schema:%s #SideInfo:%s #SQL:%s\n", + exemplar.getQuestion(), exemplar.getDbSchema(), + exemplar.getSideInfo(), exemplar.getSql()); + exemplars.append(exemplarStr); } - String dataSemanticsStr = promptHelper.buildSchemaStr(llmReq); - String questionAugmented = promptHelper.buildAugmentedQuestion(llmReq); + String dataSemantics = promptHelper.buildSchemaStr(llmReq); + String sideInformation = promptHelper.buildSideInformation(llmReq); + llmResp.setSchema(dataSemantics); + llmResp.setSideInfo(sideInformation); Map variable = new HashMap<>(); - variable.put("exemplar", exemplarsStr); - variable.put("question", questionAugmented); - variable.put("schema", dataSemanticsStr); + variable.put("exemplar", exemplars); + variable.put("question", llmReq.getQueryText()); + variable.put("schema", dataSemantics); + variable.put("information", sideInformation); // use custom prompt template if provided. PromptConfig promptConfig = llmReq.getPromptConfig(); diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/PromptHelper.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/PromptHelper.java index 76171069c..b06d3ecb8 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/PromptHelper.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/PromptHelper.java @@ -73,6 +73,23 @@ public class PromptHelper { linkingListStr, currentDataStr, termStr, priorExts); } + public String buildSideInformation(LLMReq llmReq) { + List linkedValues = llmReq.getLinking(); + String currentDate = llmReq.getCurrentDate(); + String priorExts = llmReq.getPriorExts(); + + List priorLinkingList = new ArrayList<>(); + for (LLMReq.ElementValue value : linkedValues) { + String fieldName = value.getFieldName(); + String fieldValue = value.getFieldValue(); + priorLinkingList.add("‘" + fieldValue + "‘是一个‘" + fieldName + "‘"); + } + String currentDataStr = "当前的日期是" + currentDate; + String linkingListStr = String.join(",", priorLinkingList); + String termStr = buildTermStr(llmReq); + return String.format("%s;%s;%s;%s", linkingListStr, currentDataStr, termStr, priorExts); + } + public String buildSchemaStr(LLMReq llmReq) { String tableStr = llmReq.getSchema().getDataSetName(); StringBuilder metricStr = new StringBuilder(); diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/query/llm/s2sql/LLMResp.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/query/llm/s2sql/LLMResp.java index 7f8ad4289..54b11ccd6 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/query/llm/s2sql/LLMResp.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/query/llm/s2sql/LLMResp.java @@ -10,9 +10,11 @@ public class LLMResp { private String query; - private String modelName; + private String sideInfo; - private String dbSchema; + private String dataSet; + + private String schema; private String sqlOutput; 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 e417c2ad1..fa2400bf8 100644 --- a/launchers/standalone/src/main/resources/config.update/sql-update.sql +++ b/launchers/standalone/src/main/resources/config.update/sql-update.sql @@ -356,4 +356,7 @@ alter table s2_agent add column `prompt_config` text COLLATE utf8_unicode_ci DEF alter table s2_agent add `model_config` text null; --20240710 -alter table s2_agent add `enable_memory_review` tinyint DEFAULT 0; \ No newline at end of file +alter table s2_agent add `enable_memory_review` tinyint DEFAULT 0; + +--20240718 +alter table s2_chat_memory add `side_info` TEXT DEFAULT NULL COMMENT '辅助信息'; \ 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 704006f00..94b414b0a 100644 --- a/launchers/standalone/src/main/resources/db/schema-h2.sql +++ b/launchers/standalone/src/main/resources/db/schema-h2.sql @@ -89,6 +89,7 @@ CREATE TABLE IF NOT EXISTS `s2_chat_memory` ( `agent_id` INT , `db_schema` TEXT , `s2_sql` TEXT , + `side_info` TEXT , `status` char(10) , `llm_review` char(10) , `llm_comment` TEXT, diff --git a/launchers/standalone/src/main/resources/db/schema-mysql.sql b/launchers/standalone/src/main/resources/db/schema-mysql.sql index 5f1dfcf9f..3cf6da9a9 100644 --- a/launchers/standalone/src/main/resources/db/schema-mysql.sql +++ b/launchers/standalone/src/main/resources/db/schema-mysql.sql @@ -142,6 +142,7 @@ CREATE TABLE IF NOT EXISTS `s2_chat_config` ( CREATE TABLE IF NOT EXISTS `s2_chat_memory` ( `id` INT NOT NULL AUTO_INCREMENT, `question` varchar(655) COMMENT '用户问题' , + `side_info` TEXT COMMENT '辅助信息' , `agent_id` INT COMMENT '助理ID' , `db_schema` TEXT COMMENT 'Schema映射' , `s2_sql` TEXT COMMENT '大模型解析SQL' , diff --git a/launchers/standalone/src/main/resources/s2-exemplar.json b/launchers/standalone/src/main/resources/s2-exemplar.json index 117b1b1e6..4c9bc7e97 100644 --- a/launchers/standalone/src/main/resources/s2-exemplar.json +++ b/launchers/standalone/src/main/resources/s2-exemplar.json @@ -1,92 +1,62 @@ [ { - "question": "比较jackjchen和robinlee在超音数的访问次数 (补充信息:’'jackjchen'‘是一个’用户名‘,’ 'robinlee'‘是一个’用户名‘。当前的日期是2020-12-01) ", + "question": "比较jackjchen和robinlee在超音数的访问次数", + "sideInfo": "'jackjchen'是一个'用户名','robinlee'是一个'用户名'。当前的日期是2020-12-01", "dbSchema": "Table: 超音数产品, Columns = [\"部门\", \"模块\", \"用户名\", \"访问次数\", \"访问人数\", \"访问时长\", \"数据日期\"]", "sql": "SELECT 用户名, 访问次数 FROM 超音数产品 WHERE 用户名 IN ('jackjchen', 'robinlee')" }, { - "question": "超音数近12个月访问人数 按部门 (补充信息:。当前的日期是2022-11-06) ", + "question": "超音数近12个月访问人数 按部门", + "sideInfo": "当前的日期是2022-11-06", "dbSchema": "Table: 超音数产品, Columns = [\"部门\", \"模块\", \"用户名\", \"访问次数\", \"访问人数\", \"访问时长\", \"数据日期\"]", "sql": "SELECT 部门, 数据日期, 访问人数 FROM 超音数产品 WHERE 数据日期 >= '2021-11-06' AND 数据日期 <= '2022-11-06'" }, { - "question": "超音数美术部、技术研发部的访问时长 (补充信息:’'美术部'‘是一个’部门‘,’ '技术研发部'‘是一个’部门‘。当前的日期是2023-04-21) ", + "question": "超音数美术部、技术研发部的访问时长", + "sideInfo": "’'美术部'‘是一个’部门‘,’ '技术研发部'‘是一个’部门‘。当前的日期是2023-04-21", "dbSchema": "Table: 超音数产品, Columns = [\"部门\", \"模块\", \"用户名\", \"访问次数\", \"访问人数\", \"访问时长\", \"数据日期\"]", "sql": "SELECT 部门, 访问时长 FROM 超音数产品 WHERE 部门 IN ('美术部', '技术研发部')" }, { - "question": "近3天海田飞系MPPM结算播放份额 (补充信息:’'海田飞系'‘是一个’严选版权归属系‘。当前的日期是2023-08-21) ", + "question": "近3天海田飞系MPPM结算播放份额", + "sideInfo": "'海田飞系'是一个'严选版权归属系'。当前的日期是2023-08-21", "dbSchema": "Table: 严选, Columns = [\"严选版权归属系\", \"付费模式\", \"结算播放份额\", \"付费用户结算播放份额\", \"数据日期\"]", "sql": "SELECT 严选版权归属系, 结算播放份额 FROM 严选 WHERE 严选版权归属系 = '海田飞系' AND 数据日期 >= '2023-08-19' AND 数据日期 <= '2023-08-21' " }, { - "question": "对比近7天翻唱版和纯音乐的歌曲播放量 (补充信息:’'纯音乐'‘是一个’语种‘,’ '翻唱版'‘是一个’歌曲版本‘。当前的日期是2023-05-22) ", + "question": "对比近7天翻唱版和纯音乐的歌曲播放量", + "sideInfo": "'纯音乐'是一个'语种','翻唱版'是一个'歌曲版本'。当前的日期是2023-05-22", "dbSchema": "Table: 歌曲库, Columns = [\"是否潮流人歌曲\", \"C音歌曲ID\", \"C音歌曲MID\", \"歌曲名\", \"歌曲版本\", \"语种\", \"歌曲类型\", \"翻唱类型\", \"MPPM歌曲ID\", \"是否严选窄口径歌曲\", \"是否严选宽口径歌曲\", \"结算播放量\", \"运营播放量\", \"付费用户结算播放量\", \"历史累计结算播放量\", \"运营搜播量\", \"结算搜播量\", \"运营完播量\", \"运营推播量\", \"近7日复播率\", \"日均搜播量\", \"数据日期\"]", "sql": "SELECT 歌曲版本, 语种, 结算播放量 FROM 歌曲库 WHERE 歌曲版本 = '翻唱版' AND 语种 = '纯音乐' AND 数据日期 >= '2023-05-16' AND 数据日期 <= '2023-05-22' " }, { - "question": "对比一下陈拙悬、孟梅琦、赖媚韵的粉丝数 (补充信息:’'1527896'‘是一个’MPPM歌手ID‘,’ '1565463'‘是一个’MPPM歌手ID‘,’ '2141459'‘是一个’MPPM歌手ID‘。当前的日期是2023-05-31) ", + "question": "对比一下陈拙悬、孟梅琦、赖媚韵的粉丝数", + "sideInfo": "'1527896'是一个'MPPM歌手ID','1565463'是一个'MPPM歌手ID','2141459'是一个'MPPM歌手ID'。当前的日期是2023-05-31", "dbSchema": "Table: 艺人库, Columns = [\"上下架状态\", \"歌手名\", \"歌手等级\", \"歌手类型\", \"歌手来源\", \"MPPM潮流人等级\", \"活跃区域\", \"年龄\", \"歌手才能\", \"歌手风格\", \"粉丝数\", \"潮音粉丝数\", \"超声波粉丝数\", \"推博粉丝数\", \"超声波歌曲数\", \"在架歌曲数\", \"超声波分享数\", \"独占歌曲数\", \"超声波在架歌曲评论数\", \"有播放量歌曲数\", \"数据日期\"]", "sql": "SELECT 歌手名, 粉丝数 FROM 艺人库 WHERE 歌手名 IN ('陈拙悬', '孟梅琦', '赖媚韵')" }, { - "question": "播放量大于1万的歌曲有多少 (补充信息:。当前的日期是2023-07-31) ", + "question": "播放量大于1万的歌曲有多少", + "sideInfo": "当前的日期是2023-07-31", "dbSchema": "Table: 歌曲库, Columns = [\"歌曲名\", \"歌曲版本\", \"歌曲类型\", \"MPPM歌曲ID\", \"是否严选窄口径歌曲\", \"是否严选宽口径歌曲\", \"是否潮流人歌曲\", \"超声波歌曲ID\", \"C音歌曲ID\", \"C音歌曲MID\", \"结算播放量\", \"运营播放量\", \"分享量\", \"收藏量\", \"运营搜播量\", \"结算搜播量\", \"拉新用户数\", \"拉活用户数\", \"分享率\", \"结算播放份额\", \"数据日期\"]", "sql": "SELECT 歌曲名 FROM 歌曲库 WHERE 结算播放量 > 10000" }, { - "question": "超音数访问时长小于1小时,且来自美术部的用户是哪些 (补充信息:’'美术部'‘是一个’部门‘。当前的日期是2023-07-31) ", + "question": "超音数访问时长小于1小时,且来自美术部的用户是哪些", + "sideInfo": "'美术部'‘是一个’部门‘。当前的日期是2023-07-31", "dbSchema": "Table: 超音数产品, Columns = [\"用户名\", \"部门\", \"模块\", \"访问时长\", \"访问次数\", \"访问人数\", \"数据日期\"]", "sql": "SELECT 用户名 FROM 超音数产品 WHERE 部门 = '美术部' AND 访问时长 < 1" }, { - "question": "超音数pv最高的用户有哪些 (补充信息:。当前的日期是2023-08-31) ", + "question": "超音数pv最高的用户有哪些", + "sideInfo": "当前的日期是2023-08-31", "dbSchema": "Table: 超音数产品, Columns = [\"用户名\", \"部门\", \"模块\", \"访问时长\", \"访问次数\", \"访问人数\", \"数据日期\"]", "sql": "SELECT 用户名 FROM 超音数产品 ORDER BY 访问次数 DESC LIMIT 1" }, { - "question": "近90天袁亚伟播放量平均值是多少 (补充信息:’'152789226'‘是一个’MPPM歌手ID‘。当前的日期是2023-08-31) ", - "dbSchema": "Table: 艺人库, Columns = [\"播放量层级\", \"播放量单调性\", \"播放量方差\", \"播放量突增类型\", \"播放量集中度\", \"歌手名\", \"歌手等级\", \"歌手类型\", \"歌手来源\", \"MPPM潮流人等级\", \"结算播放量\", \"运营播放量\", \"历史累计结算播放量\", \"有播放量歌曲数\", \"历史累计运营播放量\", \"付费用户结算播放量\", \"结算播放量占比\", \"运营播放份额\", \"免费用户结算播放占比\", \"完播量\", \"数据日期\"]", - "sql": "SELECT AVG(结算播放量) FROM 艺人库 WHERE 歌手名 = '袁亚伟' AND 数据日期 >= '2023-06-02' AND 数据日期 <= '2023-08-31' " - }, - { - "question": "周倩倩近7天结算播放量总和是多少 (补充信息:’'199509'‘是一个’MPPM歌手ID‘。当前的日期是2023-08-31) ", - "dbSchema": "Table: 艺人库, Columns = [\"播放量层级\", \"播放量单调性\", \"播放量方差\", \"播放量突增类型\", \"播放量集中度\", \"歌手名\", \"歌手等级\", \"歌手类型\", \"歌手来源\", \"MPPM潮流人等级\", \"结算播放量\", \"运营播放量\", \"历史累计结算播放量\", \"有播放量歌曲数\", \"历史累计运营播放量\", \"付费用户结算播放量\", \"结算播放量占比\", \"运营播放份额\", \"免费用户结算播放占比\", \"完播量\", \"数据日期\"]", - "sql": "SELECT SUM(结算播放量) FROM 艺人库 WHERE 歌手名 = '周倩倩' AND 数据日期 >= '2023-08-15' AND 数据日期 <= '2023-08-31' " - }, - { - "question": "超音数访问次数大于1k的部门是哪些 (补充信息:。当前的日期是2023-09-14) ", + "question": "超音数访问次数大于1k的部门是哪些", + "sideInfo": "当前的日期是2023-09-14", "dbSchema": "Table: 超音数产品, Columns = [\"部门\", \"模块\", \"用户名\", \"访问次数\", \"访问人数\", \"访问时长\", \"数据日期\"]", "sql": "SELECT 部门 FROM 超音数产品 WHERE 访问次数 > 1000" - }, - { - "question": "陈亿训唱的所有的播放量大于20k的孤勇者有哪些 (补充信息:’'199509'‘是一个’MPPM歌手ID‘,’ '1527123'‘是一个’MPPM歌曲ID‘。当前的日期是2023-09-18) ", - "dbSchema": "Table: 歌曲库, Columns = [\"歌曲名\", \"MPPM歌手ID\", \"歌曲版本\", \"歌曲类型\", \"MPPM歌曲ID\", \"是否严选窄口径歌曲\", \"是否严选宽口径歌曲\", \"是否潮流人歌曲\", \"超声波歌曲ID\", \"C音歌曲ID\", \"C音歌曲MID\", \"结算播放量\", \"运营播放量\", \"分享量\", \"收藏量\", \"运营搜播量\", \"结算搜播量\", \"拉新用户数\", \"拉活用户数\", \"分享率\", \"结算播放份额\", \"数据日期\"]", - "sql": "SELECT 歌曲名 FROM 歌曲库 WHERE 结算播放量 > 20000 AND 歌手名 = '陈亿训' AND 歌曲名 = '孤勇者'" - }, - { - "question": "周洁轮去年发布的歌曲有哪些 (补充信息:’'23109'‘是一个’MPPM歌手ID‘。当前的日期是2023-09-18) ", - "dbSchema": "Table: 歌曲库, Columns = [\"歌曲名\", \"歌曲版本\", \"歌手名\", \"歌曲类型\", \"发布时间\", \"MPPM歌曲ID\", \"是否严选窄口径歌曲\", \"是否严选宽口径歌曲\", \"是否潮流人歌曲\", \"超声波歌曲ID\", \"C音歌曲ID\", \"C音歌曲MID\", \"结算播放量\", \"运营播放量\", \"分享量\", \"收藏量\", \"运营搜播量\", \"结算搜播量\", \"拉新用户数\", \"拉活用户数\", \"分享率\", \"结算播放份额\", \"数据日期\"]", - "sql": "SELECT 歌曲名 FROM 歌曲库 WHERE 发布时间 >= '2023-01-01' AND 发布时间 <= '2023-12-31' AND 歌手名 = '周洁轮'" - }, - { - "question": "我想要近半年签约的播放量前十的歌手有哪些 (补充信息:。当前的日期是2023-09-11) ", - "dbSchema": "Table: 艺人库, Columns = [\"播放量层级\", \"播放量单调性\", \"播放量方差\", \"播放量突增类型\", \"播放量集中度\", \"歌手名\", \"歌手等级\", \"歌手类型\", \"歌手来源\", \"签约日期\", \"MPPM潮流人等级\", \"结算播放量\", \"运营播放量\", \"历史累计结算播放量\", \"有播放量歌曲数\", \"历史累计运营播放量\", \"付费用户结算播放量\", \"结算播放量占比\", \"运营播放份额\", \"免费用户结算播放占比\", \"完播量\", \"数据日期\"]", - "sql": "SELECT 歌手名 FROM 艺人库 WHERE 数据日期 >= '2023-03-15' AND 数据日期 <= '2023-09-11' ORDER BY 结算播放量 DESC LIMIT 10" - }, - { - "question": "最近一年发行的歌曲中,有哪些在近7天播放超过一千万的 (补充信息:。当前的日期是2023-08-12) ", - "dbSchema": "Table: 歌曲库, Columns = [\"发行日期\", \"歌曲语言\", \"歌曲来源\", \"歌曲流派\", \"歌曲名\", \"歌曲版本\", \"歌曲类型\", \"发行时间\", \"数据日期\"]", - "sql": "SELECT 歌曲名 FROM 歌曲库 WHERE 发行日期 >= '2022-08-13' AND 发行日期 <= '2023-08-12' AND 数据日期 >= '2023-08-06' AND 数据日期 <= '2023-08-12' AND 结算播放量 > 10000000" - }, - { - "question": "今年以来发行的歌曲中,有哪些在近7天播放超过一千万的 (补充信息:。当前的日期是2023-08-12) ", - "dbSchema": "Table: 歌曲库, Columns = [\"发行日期\", \"歌曲语言\", \"歌曲来源\", \"歌曲流派\", \"歌曲名\", \"歌曲版本\", \"歌曲类型\", \"发行时间\", \"数据日期\"]", - "sql": "SELECT 歌曲名 FROM 歌曲库 WHERE 发行日期 >= '2023-01-01' AND 发行日期 <= '2023-08-12' AND 数据日期 >= '2023-08-06' AND 数据日期 <= '2023-08-12' AND 结算播放量 > 10000000" - }, - { - "question": "2023年以来发行的歌曲中,有哪些在近7天播放超过一千万的 (补充信息:’'514129144'‘是一个’MPPM歌曲ID‘。当前的日期是2023-08-12) ", - "dbSchema": "Table: 歌曲库, Columns = [\"发行日期\", \"歌曲语言\", \"歌曲来源\", \"歌曲流派\", \"歌曲名\", \"歌曲版本\", \"歌曲类型\", \"发行时间\", \"数据日期\"]", - "sql": "SELECT 歌曲名 FROM 歌曲库 WHERE 发行日期 >= '2023-01-01' AND 发行日期 <= '2023-08-12' AND 数据日期 >= '2023-08-06' AND 数据日期 <= '2023-08-12' AND 结算播放量 > 10000000" } ] \ No newline at end of file diff --git a/launchers/standalone/src/test/resources/db/schema-h2.sql b/launchers/standalone/src/test/resources/db/schema-h2.sql index 9049624c6..c1e38555d 100644 --- a/launchers/standalone/src/test/resources/db/schema-h2.sql +++ b/launchers/standalone/src/test/resources/db/schema-h2.sql @@ -88,6 +88,7 @@ CREATE TABLE IF NOT EXISTS `s2_chat_memory` ( `question` varchar(655) , `agent_id` INT , `db_schema` TEXT , + `side_info` TEXT , `s2_sql` TEXT , `status` char(10) , `llm_review` char(10) , diff --git a/launchers/standalone/src/test/resources/s2-exemplar.json b/launchers/standalone/src/test/resources/s2-exemplar.json index 117b1b1e6..4c9bc7e97 100644 --- a/launchers/standalone/src/test/resources/s2-exemplar.json +++ b/launchers/standalone/src/test/resources/s2-exemplar.json @@ -1,92 +1,62 @@ [ { - "question": "比较jackjchen和robinlee在超音数的访问次数 (补充信息:’'jackjchen'‘是一个’用户名‘,’ 'robinlee'‘是一个’用户名‘。当前的日期是2020-12-01) ", + "question": "比较jackjchen和robinlee在超音数的访问次数", + "sideInfo": "'jackjchen'是一个'用户名','robinlee'是一个'用户名'。当前的日期是2020-12-01", "dbSchema": "Table: 超音数产品, Columns = [\"部门\", \"模块\", \"用户名\", \"访问次数\", \"访问人数\", \"访问时长\", \"数据日期\"]", "sql": "SELECT 用户名, 访问次数 FROM 超音数产品 WHERE 用户名 IN ('jackjchen', 'robinlee')" }, { - "question": "超音数近12个月访问人数 按部门 (补充信息:。当前的日期是2022-11-06) ", + "question": "超音数近12个月访问人数 按部门", + "sideInfo": "当前的日期是2022-11-06", "dbSchema": "Table: 超音数产品, Columns = [\"部门\", \"模块\", \"用户名\", \"访问次数\", \"访问人数\", \"访问时长\", \"数据日期\"]", "sql": "SELECT 部门, 数据日期, 访问人数 FROM 超音数产品 WHERE 数据日期 >= '2021-11-06' AND 数据日期 <= '2022-11-06'" }, { - "question": "超音数美术部、技术研发部的访问时长 (补充信息:’'美术部'‘是一个’部门‘,’ '技术研发部'‘是一个’部门‘。当前的日期是2023-04-21) ", + "question": "超音数美术部、技术研发部的访问时长", + "sideInfo": "’'美术部'‘是一个’部门‘,’ '技术研发部'‘是一个’部门‘。当前的日期是2023-04-21", "dbSchema": "Table: 超音数产品, Columns = [\"部门\", \"模块\", \"用户名\", \"访问次数\", \"访问人数\", \"访问时长\", \"数据日期\"]", "sql": "SELECT 部门, 访问时长 FROM 超音数产品 WHERE 部门 IN ('美术部', '技术研发部')" }, { - "question": "近3天海田飞系MPPM结算播放份额 (补充信息:’'海田飞系'‘是一个’严选版权归属系‘。当前的日期是2023-08-21) ", + "question": "近3天海田飞系MPPM结算播放份额", + "sideInfo": "'海田飞系'是一个'严选版权归属系'。当前的日期是2023-08-21", "dbSchema": "Table: 严选, Columns = [\"严选版权归属系\", \"付费模式\", \"结算播放份额\", \"付费用户结算播放份额\", \"数据日期\"]", "sql": "SELECT 严选版权归属系, 结算播放份额 FROM 严选 WHERE 严选版权归属系 = '海田飞系' AND 数据日期 >= '2023-08-19' AND 数据日期 <= '2023-08-21' " }, { - "question": "对比近7天翻唱版和纯音乐的歌曲播放量 (补充信息:’'纯音乐'‘是一个’语种‘,’ '翻唱版'‘是一个’歌曲版本‘。当前的日期是2023-05-22) ", + "question": "对比近7天翻唱版和纯音乐的歌曲播放量", + "sideInfo": "'纯音乐'是一个'语种','翻唱版'是一个'歌曲版本'。当前的日期是2023-05-22", "dbSchema": "Table: 歌曲库, Columns = [\"是否潮流人歌曲\", \"C音歌曲ID\", \"C音歌曲MID\", \"歌曲名\", \"歌曲版本\", \"语种\", \"歌曲类型\", \"翻唱类型\", \"MPPM歌曲ID\", \"是否严选窄口径歌曲\", \"是否严选宽口径歌曲\", \"结算播放量\", \"运营播放量\", \"付费用户结算播放量\", \"历史累计结算播放量\", \"运营搜播量\", \"结算搜播量\", \"运营完播量\", \"运营推播量\", \"近7日复播率\", \"日均搜播量\", \"数据日期\"]", "sql": "SELECT 歌曲版本, 语种, 结算播放量 FROM 歌曲库 WHERE 歌曲版本 = '翻唱版' AND 语种 = '纯音乐' AND 数据日期 >= '2023-05-16' AND 数据日期 <= '2023-05-22' " }, { - "question": "对比一下陈拙悬、孟梅琦、赖媚韵的粉丝数 (补充信息:’'1527896'‘是一个’MPPM歌手ID‘,’ '1565463'‘是一个’MPPM歌手ID‘,’ '2141459'‘是一个’MPPM歌手ID‘。当前的日期是2023-05-31) ", + "question": "对比一下陈拙悬、孟梅琦、赖媚韵的粉丝数", + "sideInfo": "'1527896'是一个'MPPM歌手ID','1565463'是一个'MPPM歌手ID','2141459'是一个'MPPM歌手ID'。当前的日期是2023-05-31", "dbSchema": "Table: 艺人库, Columns = [\"上下架状态\", \"歌手名\", \"歌手等级\", \"歌手类型\", \"歌手来源\", \"MPPM潮流人等级\", \"活跃区域\", \"年龄\", \"歌手才能\", \"歌手风格\", \"粉丝数\", \"潮音粉丝数\", \"超声波粉丝数\", \"推博粉丝数\", \"超声波歌曲数\", \"在架歌曲数\", \"超声波分享数\", \"独占歌曲数\", \"超声波在架歌曲评论数\", \"有播放量歌曲数\", \"数据日期\"]", "sql": "SELECT 歌手名, 粉丝数 FROM 艺人库 WHERE 歌手名 IN ('陈拙悬', '孟梅琦', '赖媚韵')" }, { - "question": "播放量大于1万的歌曲有多少 (补充信息:。当前的日期是2023-07-31) ", + "question": "播放量大于1万的歌曲有多少", + "sideInfo": "当前的日期是2023-07-31", "dbSchema": "Table: 歌曲库, Columns = [\"歌曲名\", \"歌曲版本\", \"歌曲类型\", \"MPPM歌曲ID\", \"是否严选窄口径歌曲\", \"是否严选宽口径歌曲\", \"是否潮流人歌曲\", \"超声波歌曲ID\", \"C音歌曲ID\", \"C音歌曲MID\", \"结算播放量\", \"运营播放量\", \"分享量\", \"收藏量\", \"运营搜播量\", \"结算搜播量\", \"拉新用户数\", \"拉活用户数\", \"分享率\", \"结算播放份额\", \"数据日期\"]", "sql": "SELECT 歌曲名 FROM 歌曲库 WHERE 结算播放量 > 10000" }, { - "question": "超音数访问时长小于1小时,且来自美术部的用户是哪些 (补充信息:’'美术部'‘是一个’部门‘。当前的日期是2023-07-31) ", + "question": "超音数访问时长小于1小时,且来自美术部的用户是哪些", + "sideInfo": "'美术部'‘是一个’部门‘。当前的日期是2023-07-31", "dbSchema": "Table: 超音数产品, Columns = [\"用户名\", \"部门\", \"模块\", \"访问时长\", \"访问次数\", \"访问人数\", \"数据日期\"]", "sql": "SELECT 用户名 FROM 超音数产品 WHERE 部门 = '美术部' AND 访问时长 < 1" }, { - "question": "超音数pv最高的用户有哪些 (补充信息:。当前的日期是2023-08-31) ", + "question": "超音数pv最高的用户有哪些", + "sideInfo": "当前的日期是2023-08-31", "dbSchema": "Table: 超音数产品, Columns = [\"用户名\", \"部门\", \"模块\", \"访问时长\", \"访问次数\", \"访问人数\", \"数据日期\"]", "sql": "SELECT 用户名 FROM 超音数产品 ORDER BY 访问次数 DESC LIMIT 1" }, { - "question": "近90天袁亚伟播放量平均值是多少 (补充信息:’'152789226'‘是一个’MPPM歌手ID‘。当前的日期是2023-08-31) ", - "dbSchema": "Table: 艺人库, Columns = [\"播放量层级\", \"播放量单调性\", \"播放量方差\", \"播放量突增类型\", \"播放量集中度\", \"歌手名\", \"歌手等级\", \"歌手类型\", \"歌手来源\", \"MPPM潮流人等级\", \"结算播放量\", \"运营播放量\", \"历史累计结算播放量\", \"有播放量歌曲数\", \"历史累计运营播放量\", \"付费用户结算播放量\", \"结算播放量占比\", \"运营播放份额\", \"免费用户结算播放占比\", \"完播量\", \"数据日期\"]", - "sql": "SELECT AVG(结算播放量) FROM 艺人库 WHERE 歌手名 = '袁亚伟' AND 数据日期 >= '2023-06-02' AND 数据日期 <= '2023-08-31' " - }, - { - "question": "周倩倩近7天结算播放量总和是多少 (补充信息:’'199509'‘是一个’MPPM歌手ID‘。当前的日期是2023-08-31) ", - "dbSchema": "Table: 艺人库, Columns = [\"播放量层级\", \"播放量单调性\", \"播放量方差\", \"播放量突增类型\", \"播放量集中度\", \"歌手名\", \"歌手等级\", \"歌手类型\", \"歌手来源\", \"MPPM潮流人等级\", \"结算播放量\", \"运营播放量\", \"历史累计结算播放量\", \"有播放量歌曲数\", \"历史累计运营播放量\", \"付费用户结算播放量\", \"结算播放量占比\", \"运营播放份额\", \"免费用户结算播放占比\", \"完播量\", \"数据日期\"]", - "sql": "SELECT SUM(结算播放量) FROM 艺人库 WHERE 歌手名 = '周倩倩' AND 数据日期 >= '2023-08-15' AND 数据日期 <= '2023-08-31' " - }, - { - "question": "超音数访问次数大于1k的部门是哪些 (补充信息:。当前的日期是2023-09-14) ", + "question": "超音数访问次数大于1k的部门是哪些", + "sideInfo": "当前的日期是2023-09-14", "dbSchema": "Table: 超音数产品, Columns = [\"部门\", \"模块\", \"用户名\", \"访问次数\", \"访问人数\", \"访问时长\", \"数据日期\"]", "sql": "SELECT 部门 FROM 超音数产品 WHERE 访问次数 > 1000" - }, - { - "question": "陈亿训唱的所有的播放量大于20k的孤勇者有哪些 (补充信息:’'199509'‘是一个’MPPM歌手ID‘,’ '1527123'‘是一个’MPPM歌曲ID‘。当前的日期是2023-09-18) ", - "dbSchema": "Table: 歌曲库, Columns = [\"歌曲名\", \"MPPM歌手ID\", \"歌曲版本\", \"歌曲类型\", \"MPPM歌曲ID\", \"是否严选窄口径歌曲\", \"是否严选宽口径歌曲\", \"是否潮流人歌曲\", \"超声波歌曲ID\", \"C音歌曲ID\", \"C音歌曲MID\", \"结算播放量\", \"运营播放量\", \"分享量\", \"收藏量\", \"运营搜播量\", \"结算搜播量\", \"拉新用户数\", \"拉活用户数\", \"分享率\", \"结算播放份额\", \"数据日期\"]", - "sql": "SELECT 歌曲名 FROM 歌曲库 WHERE 结算播放量 > 20000 AND 歌手名 = '陈亿训' AND 歌曲名 = '孤勇者'" - }, - { - "question": "周洁轮去年发布的歌曲有哪些 (补充信息:’'23109'‘是一个’MPPM歌手ID‘。当前的日期是2023-09-18) ", - "dbSchema": "Table: 歌曲库, Columns = [\"歌曲名\", \"歌曲版本\", \"歌手名\", \"歌曲类型\", \"发布时间\", \"MPPM歌曲ID\", \"是否严选窄口径歌曲\", \"是否严选宽口径歌曲\", \"是否潮流人歌曲\", \"超声波歌曲ID\", \"C音歌曲ID\", \"C音歌曲MID\", \"结算播放量\", \"运营播放量\", \"分享量\", \"收藏量\", \"运营搜播量\", \"结算搜播量\", \"拉新用户数\", \"拉活用户数\", \"分享率\", \"结算播放份额\", \"数据日期\"]", - "sql": "SELECT 歌曲名 FROM 歌曲库 WHERE 发布时间 >= '2023-01-01' AND 发布时间 <= '2023-12-31' AND 歌手名 = '周洁轮'" - }, - { - "question": "我想要近半年签约的播放量前十的歌手有哪些 (补充信息:。当前的日期是2023-09-11) ", - "dbSchema": "Table: 艺人库, Columns = [\"播放量层级\", \"播放量单调性\", \"播放量方差\", \"播放量突增类型\", \"播放量集中度\", \"歌手名\", \"歌手等级\", \"歌手类型\", \"歌手来源\", \"签约日期\", \"MPPM潮流人等级\", \"结算播放量\", \"运营播放量\", \"历史累计结算播放量\", \"有播放量歌曲数\", \"历史累计运营播放量\", \"付费用户结算播放量\", \"结算播放量占比\", \"运营播放份额\", \"免费用户结算播放占比\", \"完播量\", \"数据日期\"]", - "sql": "SELECT 歌手名 FROM 艺人库 WHERE 数据日期 >= '2023-03-15' AND 数据日期 <= '2023-09-11' ORDER BY 结算播放量 DESC LIMIT 10" - }, - { - "question": "最近一年发行的歌曲中,有哪些在近7天播放超过一千万的 (补充信息:。当前的日期是2023-08-12) ", - "dbSchema": "Table: 歌曲库, Columns = [\"发行日期\", \"歌曲语言\", \"歌曲来源\", \"歌曲流派\", \"歌曲名\", \"歌曲版本\", \"歌曲类型\", \"发行时间\", \"数据日期\"]", - "sql": "SELECT 歌曲名 FROM 歌曲库 WHERE 发行日期 >= '2022-08-13' AND 发行日期 <= '2023-08-12' AND 数据日期 >= '2023-08-06' AND 数据日期 <= '2023-08-12' AND 结算播放量 > 10000000" - }, - { - "question": "今年以来发行的歌曲中,有哪些在近7天播放超过一千万的 (补充信息:。当前的日期是2023-08-12) ", - "dbSchema": "Table: 歌曲库, Columns = [\"发行日期\", \"歌曲语言\", \"歌曲来源\", \"歌曲流派\", \"歌曲名\", \"歌曲版本\", \"歌曲类型\", \"发行时间\", \"数据日期\"]", - "sql": "SELECT 歌曲名 FROM 歌曲库 WHERE 发行日期 >= '2023-01-01' AND 发行日期 <= '2023-08-12' AND 数据日期 >= '2023-08-06' AND 数据日期 <= '2023-08-12' AND 结算播放量 > 10000000" - }, - { - "question": "2023年以来发行的歌曲中,有哪些在近7天播放超过一千万的 (补充信息:’'514129144'‘是一个’MPPM歌曲ID‘。当前的日期是2023-08-12) ", - "dbSchema": "Table: 歌曲库, Columns = [\"发行日期\", \"歌曲语言\", \"歌曲来源\", \"歌曲流派\", \"歌曲名\", \"歌曲版本\", \"歌曲类型\", \"发行时间\", \"数据日期\"]", - "sql": "SELECT 歌曲名 FROM 歌曲库 WHERE 发行日期 >= '2023-01-01' AND 发行日期 <= '2023-08-12' AND 数据日期 >= '2023-08-06' AND 数据日期 <= '2023-08-12' AND 结算播放量 > 10000000" } ] \ No newline at end of file