Text2SQL任务的常用Prompt模板整理

发布于:2025-06-18 ⋅ 阅读:(16) ⋅ 点赞:(0)


以下为各类Text2SQL任务的常用Prompt模板整理。


一、基础指令模板(Basic Instruction Template)

适用于简单查询转换,强调明确指令和输出格式约束。

现在你是一个SQL专家,根据表结构和用户需求生成SQL语句。
表结构:
{table_schema}
用户需求:{user_question}
要求:直接输出SQL,以#开头和结尾,不要额外解释。
示例输出:#SELECT * FROM table#

关键要素:角色定义(SQL专家)、结构化输出标识符(# #)、禁止分析过程。

适用场景:

  • 简单单表查询(过滤、排序)
  • 需明确限制输出格式(如仅返回 SQL)
  • 适用于零样本场景(无示例引导)

二、上下文增强模板(Context - Enhancement Template)

不仅提供表名和字段名,还包含字段类型、关系约束、示例数据等,提升复杂查询准确率。

你是一个数据分析师,请基于以下表信息生成高效SQL:
表名:{table_name}
字段说明:
  - {field1}:{字段含义}
  - {field2}:{字段含义}
关联关系:{table1}通过{key}关联{table2}
用户需求:{user_question}
输出要求:仅返回SQL,格式为```sql\nSQL语句\n```

设计重点

  • 字段含义描述降低歧义
  • 显式定义表关联关系
  • 代码块标记增强可读性

三、少样本示例模板(Few-Shot)

通过示例引导模型理解复杂逻辑,适用多条件查询。

你精通SQL转换,参考以下示例将自然语言查询转换为SQL:
示例1:
  输入:统计上海地区年龄>25的男性用户数量
  输出:SELECT COUNT(*) FROM users WHERE location='上海' AND age>25 AND gender='男'
示例2:
  输入:查找2023年销售额最高的产品类别
  输出:SELECT category, SUM(sales) FROM orders WHERE YEAR(order_date)=2023 GROUP BY category ORDER BY SUM(sales) DESC LIMIT 1
当前需求:{user_question}

适用场景:

  • 复杂多表连接或聚合查询
  • 模型对特定语法(如 JOIN、BETWEEN)不熟悉时
  • 需强化语义与 SQL 操作的映射关系

四、思维链模板(Chain-of-Thought)

显式拆解自然语言查询为逻辑推理步骤,引导模型分步推理,适用于嵌套查询或跨表操作

  • 分步指导型区分,分步指导型强制模型遵循预设的步骤生成 SQL,适合结构固定的查询类型。
请按步骤推理后生成SQL:
1. 确定查询目标字段:{target_fields}
2. 识别过滤条件:{conditions}
3. 分析表关联关系:{joins}
4. 编写SQL
用户需求:{user_question}

典型场景:多表JOIN、子查询、窗口函数。


五、高基数数据查询模板(High - Cardinality Data Query Template)

  • 高基数数据是指数据集中某列包含大量唯一值的情况,比如包含数百万个唯一 ID 的产品目录等。

整合向量数据库解决模糊语义匹配问题。

步骤:
1. 用向量检索从{high_cardinality_column}中查找相似项(输入:{user_description})
2. 检索结果:{candidate_values}
3. 生成SQL:SELECT ... WHERE {column} IN ({candidate_values})

技术依赖

  • Embedding模型生成候选值
  • 向量数据库(如Milvus)快速检索

六、大模型优化专用模板(Large - Model Optimization - Specific Template)

结合模型量化、并行推理、提示工程等技术,提升大模型的推理效率与准确性。

1.模型量化指示
你是一个SQL生成助手,使用INT8量化模型工作,表信息如下:
{表结构}
请转换此需求:{user_question}
要求:
1. 输出以##包围的SQL
2. 优先使用简单JOIN替代子查询(减少计算开销)
##
2.并行推理引导
你是一个SQL生成助手,按以下流水线步骤工作:
1. 阶段1:解析表结构 {表结构}
2. 阶段2:分析需求 {user_question} 中的实体
3. 阶段3:生成SQL骨架并优化性能
要求:输出以##包围的SQL,如##SELECT ...##
##
3. 效率优化约束
你是一个SQL生成助手,需满足以下优化要求:
1. 生成的SQL必须使用索引(参考表结构中的主键)
2. 避免全表扫描(如用IN替代LIKE)
3. 输出以##包围的SQL
表信息如下:{表结构}
需求转换:{user_question}
##

调优要点

  • 添加XML标签分隔指令与输出
  • 量化模型提升推理效率(4-bit加载)

七、安全防护模板(Security Protection Template)

防止SQL注入及敏感数据泄露。

生成SQL时遵守:
1. 禁止访问表:{sensitive_tables}
2. 过滤条件字段白名单:{allowed_columns}
3. 若需求涉及未授权数据,返回:"无法执行"
用户输入:{user_question}

企业级需求:权限控制、敏感表隔离。


八、多轮对话上下文模板(Multi - Turn Dialogue Context Template)

在prompt中保留历史对话记录,让模型理解上下文依赖关系,支持递进式查询(如先筛选再聚合)。

  • 与上下文增强模板的区别是,上下文增强主动注入外部信息静态信息补充提升单轮问题的理解深度。多轮对话上下文解决对话时序中的隐含关联,属于 “动态上下文维护”。
  • 将历史对话按时间顺序拼接进prompt,用特殊符号(如===)分隔轮次,引导模型关联历史结果。
[历史对话]  
用户:查询2023年上海的订单量  
模型:SELECT COUNT(*) FROM orders WHERE city='上海' AND year=2023;  

用户:现在计算这些订单的平均金额  
[当前需求]:{user_question}  
[要求]:结合历史查询结果生成SQL,需引用临时表temp_shanghai_orders  
  • 适用场景
    • 连续数据分析(如“先查Q1销售额→再对比Q2增长率”)
    • 需解析隐含信息的场景(如“这些产品”指代上轮查询结果)。

九、函数调用型模板(Function - Calling Template)

引导模型生成指定格式的函数调用(如JSON),适配需要外部工具(向量数据库/计算器)辅助的场景。

  • 定义函数参数规范,要求模型用结构化输出调用工具,再将工具返回结果整合为SQL。
  • 适用场景
    • 高基数数据查询(调用向量检索API)
    • 实时数据获取(如调用天气API补充查询条件)。
[函数调用规范]  
使用以下格式调用工具生成SQL:  
{
  "function": "search_vector_db",
  "parameters": {
    "column": "{high_cardinality_column}",
    "query": "{user_description}",
    "top_k": 10
  }
}  
[用户需求]:{user_question}  
[要求]:必须通过函数调用获取候选值后生成SQL  

十、领域特定知识模板(Domain - Specific Knowledge Template)

注入行业专属规则、术语映射表,解决领域语义歧义(如金融“清算”vs 医疗“清创”)。

  • 在prompt中添加领域词典和计算逻辑,强制模型按特定规则生成SQL。
  • 适用场景
    • 金融(利率计算、合规字段过滤)
    • 医疗(病例编码映射、隐私数据脱敏)。
[金融领域规则]  
1. 净利润 = 总收入 - 总成本 - 税费  
2. 风险等级映射:  
   - 高风险:波动率>25%  
   - 中风险:10%≤波动率≤25%  
[用户需求]:{user_question}  
[要求]:按金融规则生成SQL,需包含风险等级字段  

十一、评估反馈优化模板(Evaluation - Feedback Optimization Template)

引导模型对生成的SQL进行自我验证,通过反问或纠错机制提升准确性。

  • 在prompt中要求模型列出SQL的3个潜在问题(如性能、准确性),并修正。
  • 适用场景
    • 模型输出错误率高的复杂查询(如子查询嵌套)
    • 需优化SQL执行效率的场景(如索引缺失)。
[自我评估要求]  
生成SQL后回答以下问题:  
1. 该SQL是否可能引发全表扫描?  
2. 是否存在字段类型不匹配?  
3. 聚合函数是否缺少GROUP BY?  
[用户需求]:{user_question}  
[输出]:SQL语句 + 自我评估结论  

除了之前提到的模板,以下是其他常见且实用的Prompt模板类型,每个模板均按照“怎么做”“适用场景”“核心Prompt”展开说明:


十二、参数化模板(Parameterization Template)

将可变字段抽象为参数,通过占位符动态赋值。

  • 把需求中频繁变化的部分(如时间、地点、数值)用{参数名}替代,形成可复用的模板框架。
  • 例:将“查询2024年北京的销售额”抽象为“查询{年份}年{地区}的{指标}”,参数为年份 地区 指标

适用场景

  • 需频繁修改条件的重复性任务(如日报、周报生成);
  • 面向用户的交互式工具(如API接口、问卷系统),用户通过输入参数生成结果。
[模板结构]  
查询{时间范围}内{地区}的{业务指标},要求:  
1. 按{维度}分组统计  
2. 排除{异常值条件}  

[参数说明]  
- 时间范围:例“2025年Q2”  
- 地区:例“广东省”  
- 业务指标:例“订单量”“转化率”  

十三、角色扮演模板(Role-Playing Template)

为模型设定具体身份,约束其回答风格和知识体系。

  • 指定模型扮演的角色(如医生、律师、教师),并补充该角色的专业规则或话术要求。
  • 例:“你是一名金融分析师,需用通俗易懂的语言解释复杂金融概念,避免使用术语。”

适用场景

  • 垂直领域咨询(如医疗、法律、教育);
  • 需要特定风格的内容创作(如文案写作、剧本生成);
  • 模拟人机交互场景(如客服、导师)。
[角色设定]  
你是一位高中数学老师,职责:  
1. 用生活化案例解释数学概念(如用“分蛋糕”说明分数除法)  
2. 对学生错误回答要先肯定再纠正  
3. 每道题后附带一句鼓励性话术  

[学生问题]:{user_question}  -- 如“为什么负数乘负数得正数?”

十四、数据格式化模板(Data Formatting Template)

强制要求输入/输出符合特定格式,提升机器可读性。

  • 指定结果必须为JSON、CSV、Markdown表格等格式,并用示例说明结构。
  • 例:“将城市天气信息整理为JSON,包含字段:city, date, temperature, weather_condition”。

适用场景

  • 数据交换场景(如API接口、数据库导入);
  • 需要与其他工具集成的任务(如Excel表格生成、报表自动化);
  • 避免自然语言歧义,确保机器可解析。
[输入数据]:{raw_data}  -- 例“北京 2025-06-16 晴 28℃”
[输出格式要求]:  
1. 转换为CSV格式,字段顺序:城市,日期,天气,温度  
2. 日期格式统一为YYYY-MM-DD  
3. 温度需保留单位  

[示例]:  
上海,2025-06-15,多云,26℃  

十五、知识检索模板(Knowledge Retrieval Template)

将问题与外部知识库关联,要求模型先检索再回答。

  • 提供知识库索引(如文档片段、术语表),或要求模型调用检索工具获取信息。
  • 例:“回答前需查阅《公司合规手册》第3.2章,确保建议符合最新政策。”

适用场景

  • 知识密集型领域(如法律条文查询、科学研究支持);
  • 需基于最新数据的场景(如新闻事件解读、股市分析);
  • 避免模型“编造知识”(幻觉问题)。
[可用知识库]  
1. 《中华人民共和国劳动合同法》第39条:...(内容片段)  
2. 公司内部政策:加班审批流程...(链接)  

[用户问题]:{user_question}  -- 如“公司能否因员工迟到解雇?”
[要求]:  
1. 先检索相关知识库条款  
2. 引用具体条款编号进行回答  
3. 若知识库无对应信息,说明“需进一步查询”  

网站公告

今日签到

点亮在社区的每一天
去签到