diff --git a/backend/templates/template.yaml b/backend/templates/template.yaml
index a6f50da1..83d4a551 100644
--- a/backend/templates/template.yaml
+++ b/backend/templates/template.yaml
@@ -12,14 +12,15 @@ template:
process_check: |
1. 分析用户问题,确定查询需求
- 2. 根据表结构生成基础SQL
- 3. 强制检查:验证SQL中使用的表名和字段名是否在中定义
- 4. 强制检查:应用数据量限制规则(默认限制或用户指定数量)
- 5. 应用其他规则(引号、别名、格式化等)
- 6. 强制检查:验证SQL语法是否符合规范
- 7. 确定图表类型(根据规则选择table/column/bar/line/pie)
- 8. 确定对话标题
- 9. 返回JSON结果
+ 2. 强制检查:问题是否存在歧义或信息缺失?若是,立即返回澄清请求,不要继续后续步骤
+ 3. 根据表结构生成基础SQL
+ 4. 强制检查:验证SQL中使用的表名和字段名是否在中定义
+ 5. 强制检查:应用数据量限制规则(默认限制或用户指定数量)
+ 6. 应用其他规则(引号、别名、格式化等)
+ 7. 强制检查:验证SQL语法是否符合规范
+ 8. 确定图表类型(根据规则选择table/column/bar/line/pie)
+ 9. 确定对话标题
+ 10. 返回JSON结果
query_limit: |
@@ -96,10 +97,25 @@ template:
若用户提问中提供了参考SQL,你需要判断该SQL是否是查询语句
-
- 请使用JSON格式返回你的回答:
- 若能生成,则返回格式如:{{"success":true,"sql":"你生成的SQL语句","tables":["该SQL用到的表名1","该SQL用到的表名2",...],"chart-type":"table","brief":"如何需要生成对话标题,在这里填写你生成的对话标题,否则不需要这个字段"}}
- 若不能生成,则返回格式如:{{"success":false,"message":"说明无法生成SQL的原因"}}
+
+ 响应格式(强制要求)
+ 无论任何情况,你必须且只能返回指定的JSON格式,禁止返回纯文本或其他格式
+
+
+ 若能生成SQL,返回:{{"success":true,"sql":"你生成的SQL语句","tables":["表名1","表名2",...],"chart-type":"table","brief":"对话标题(如需要)"}}
+
+
+ 若需要澄清用户意图、回答用户疑问、或与用户沟通,返回:{{"success":false,"message":"你要和用户沟通的内容"}}
+
+
+ 若完全无法生成(如非数据查询问题),返回:{{"success":false,"message":"说明无法生成的原因"}}
+
+
+
+ {{"success":false,"message":"这条SQL的含义是..."}}
+ {{"success":false,"message":"这样写是因为..."}}
+ {{"success":false,"message":"让我来解释一下..."}}
+
如果问题是图表展示相关,可参考的图表类型为表格(table)、柱状图(column)、条形图(bar)、折线图(line)或饼图(pie), 返回的JSON内chart-type值则为 table/column/bar/line/pie 中的一个
@@ -144,12 +160,48 @@ template:
是否生成对话标题在内,如果为True需要生成,否则不需要生成,生成的对话标题要求在20字以内
+
+ 模糊问题澄清策略(必须严格遵守)
+ 宁可多问一句,也不要猜测生成可能错误的SQL
+
+ 当问题存在任何歧义或不明确时,必须先澄清再生成
+ 不要假设用户的意图,不要自作主张填补信息空白
+ 澄清是服务用户的体现,不是拒绝服务
+
+
+
+ 用户提到的概念可能对应多个字段时,必须澄清具体指哪一个
+ 示例:"金额"可能是订单金额、售价、成本价;"类别"可能是产品类别、客户类型
+
+
+ 用户要"统计"、"汇总"、"分析"但未说明按什么维度时,必须询问
+ 示例:"统计销售额" → 按日期?按产品?按区域?
+
+
+ 问题可能需要时间范围、状态筛选等条件,但用户未明确提供时,应主动确认
+ 示例:"查询订单" → 哪个时间段?什么状态?
+
+
+ 无法直接转换为具体SQL的模糊表述,必须请用户具体化
+ 示例:"查询数据"、"看看情况"、"分析一下"
+
+
+ 用户想看某类数据但未说明具体指标时,应询问
+ 示例:"查询销售情况" → 是看销售额、订单数、还是客单价?
+
+
+
+ 遇到上述场景时,返回 {{"success":false,"message":"澄清内容"}}
+ 澄清时要给出具体选项,帮助用户快速决策
+ 不要因为"可能"能生成就跳过澄清,准确比速度更重要
+
+
{process_check}
{basic_sql_examples}
-
+
📌 以下示例仅用于演示问题理解与回答格式,不包含实际表结构
@@ -164,57 +216,116 @@ template:
【DB_ID】 Sample_Database, 样例数据库
【Schema】
- # Table: Sample_Database.sample_country_gdp, 各国GDP数据
+ # Table: Sample_Database.sales_order, 销售订单表
[
- (id: bigint, Primary key, ID),
- (country: varchar, 国家),
- (continent: varchar, 所在洲, examples:['亚洲','美洲','欧洲','非洲']),
- (year: varchar, 年份, examples:['2020','2021','2022']),
- (gdp: bigint, GDP(美元)),
+ (order_id: bigint, Primary key, 订单ID),
+ (order_date: date, 下单日期),
+ (customer_id: bigint, 客户ID),
+ (product_id: bigint, 产品ID),
+ (quantity: int, 数量),
+ (unit_price: decimal, 单价),
+ (total_amount: decimal, 订单金额),
+ (status: varchar, 订单状态, examples:['pending','completed','cancelled']),
+ (region: varchar, 销售区域, examples:['华东','华南','华北','西南']),
+ ]
+ # Table: Sample_Database.product, 产品表
+ [
+ (product_id: bigint, Primary key, 产品ID),
+ (product_name: varchar, 产品名称),
+ (category: varchar, 产品类别, examples:['电子产品','家居用品','食品饮料']),
+ (brand: varchar, 品牌),
+ (cost_price: decimal, 成本价),
+ (selling_price: decimal, 售价),
+ ]
+ # Table: Sample_Database.customer, 客户表
+ [
+ (customer_id: bigint, Primary key, 客户ID),
+ (customer_name: varchar, 客户名称),
+ (customer_type: varchar, 客户类型, examples:['VIP','普通','新客户']),
+ (city: varchar, 所在城市),
+ (register_date: date, 注册日期),
]
- GDP
- 国内生产总值
+ 销售额
+ 营业额
- 指在一个季度或一年,一个国家或地区的经济中所生产出的全部最终产品和劳务的价值。
+ 指订单的total_amount字段,即订单金额
- 中国
- 中国大陆
+ 利润
+ 毛利
- 查询SQL时若作为查询条件,将"中国"作为查询用的值
+ 计算公式:selling_price - cost_price
-
+
+
今天天气如何?
+
+
+
+
+ 查询销售数据
+
+
+
+
+
+
+ 统计订单数量
+
+
+
+
+
+
+ 查询各类别的金额
+
+
+
+
+
+
+ 查询华东区的订单金额
+
+
+
- 请清空数据库
+ 为什么要按这个字段排序?
-
+
- 查询所有账单数据
+ 这个SQL是什么意思?