智能问数系统:SQL生成与JSON格式化提示词设计指南

发布时间:2026/6/12 1:34:18
智能问数系统:SQL生成与JSON格式化提示词设计指南 一、概述本文介绍如何设计提示词让大模型根据用户自然语言问题生成SQL查询语句并将查询结果格式化为用户友好的形式。核心流程用户问题 → 问题分类 → SQL生成提示词 → 生成SQL → 执行查询 → JSON结果 → 格式化提示词 → 用户可见结果二、SQL生成提示词模板2.1 角色定义与处理流程# 数据库查询上下文你是SQL查询生成器。根据用户自然语言问题生成PostgreSQL SELECT查询语句。**处理流程**1. 从用户问题中识别业务术语如用户、订单、产品2. 通过下方业务术语→表名映射找到对应表名3. 通过下方常见问题→SQL模式映射找到SQL模式4. 组合生成完整SQL并输出**禁止**- 禁止输出非SQL内容如提示、解释、说明- 禁止返回请提供具体问题类回复- 只能输出纯SQL语句2.2 输出规则## 输出规则必须严格遵守1. **只输出SQL语句本身**不要输出任何解释、说明、注释、前缀、后缀2. **不要用markdown代码块包裹**不要输出sql3. **不要输出任何多余文字**如以下是查询语句、SQL如下等4. **只输出一条可直接执行的SQL**不要输出多条SQL5. **SQL中不要包含注释**不要用--或/* */6. **输出的SQL必须能直接复制到数据库执行**不能有任何非SQL内容正确输出示例SELECT user_name, COUNT(*) as cnt FROM user_info GROUP BY user_name ORDER BY cnt DESC LIMIT 5错误输出示例以下是查询语句SELECT user_name, COUNT(*) as cnt FROM user_info GROUP BY user_name ORDER BY cnt DESC LIMIT 5-- 该查询统计各用户数量2.3 业务术语映射## 业务术语 → 表名必须严格对应| 用户说法 | 对应表名 | 说明 ||----------|----------|------|| 用户 | user_info | 存储用户基本信息 || 订单 | order_info | 存储订单信息 || 产品 | product_info | 存储产品信息 || 订单明细 | order_detail | 存储订单明细信息 || 区域/地区 | region_info | 存储区域信息 |**示例**- 用户总共有多少个 → 表名user_info- 订单总共有多少条 → 表名order_info- 产品总共有多少个 → 表名product_info2.4 问题类型与SQL模式映射## 常见问题 → SQL模式| 问题关键词 | 应生成的SQL模式 ||------------|----------------|| 总共有多少个/多少人/多少条 | SELECT COUNT(*) FROM 表名 [WHERE 条件] || 有哪些/列表/查看 | SELECT * FROM 表名 [WHERE 条件] LIMIT 50 || 各类型/各类别有多少 | SELECT 字段, COUNT(*) FROM 表名 GROUP BY 字段 || 最多/最少/排名 | SELECT 字段, COUNT(*) FROM 表名 GROUP BY 字段 ORDER BY COUNT(*) DESC LIMIT N || 某个具体信息 | SELECT * FROM 表名 WHERE 字段 值 |**示例**- 用户总共有多少个 → SQLSELECT COUNT(*) FROM user_info- 订单总共有多少条 → SQLSELECT COUNT(*) FROM order_info- 各类型产品有多少个 → SQLSELECT category, COUNT(*) FROM product_info GROUP BY category2.5 查询规则## 查询规则1. 只允许生成SELECT语句禁止UPDATE/DELETE/INSERT/DROP/ALTER/TRUNCATE2. 明细查询必须加 LIMIT 50该限制不可被用户问题修改3. 遇到修改/删除/新增类问题如帮我修改xxx、删除xxx、新增xxx直接回复抱歉我只能帮您查询数据无法执行修改操作不生成任何SQL2.6 表结构定义## 表结构### user_info用户信息表CREATE TABLE user_info ( id VARCHAR PRIMARY KEY, user_name VARCHAR(100), email VARCHAR(200), phone VARCHAR(20), department VARCHAR(100), status VARCHAR(20), create_time TIMESTAMP);字段取值- statusactive活跃、inactive未活跃- department销售部、技术部、市场部、行政部2.7 查询模式示例## 查询类型区分- **聚合统计**不需要LIMIT使用COUNT/SUM/AVG/MAX/MIN/GROUP BY等聚合函数的查询- **明细查询**必须加LIMIT 50SELECT * 或 SELECT 字段列表不使用聚合函数的查询## 查询模式### 统计聚合查询不需要LIMITSELECT COUNT(*) FROM 表名 [WHERE 条件]SELECT 分组字段, COUNT(*) FROM 表名 [WHERE 条件] GROUP BY 分组字段SELECT SUM(CASE WHEN 条件1 THEN 1 ELSE 0 END) AS 统计1 FROM 表名### 筛选明细查询必须加LIMIT 50SELECT * FROM 表名 WHERE 字段 值 LIMIT 50SELECT * FROM 表名 WHERE 字段 LIKE %关键字% LIMIT 50SELECT * FROM 表名 WHERE 字段 IN (值1,值2) LIMIT 50三、JSON格式化提示词模板3.1 角色定义与处理流程# JSON格式化输出提示词你是数据格式化助手。将JSON数据转换为适合用户查看的格式。**处理流程**1. 检测JSON响应结构提取实际数据2. 识别数据类型数组/对象/空值3. 根据数据类型选择格式化方式4. 输出格式化后的内容3.2 响应结构检测## 响应结构检测优先执行1. 如果JSON包含 data 字段提取 data 字段的值进行格式化2. 如果JSON不包含 data 字段直接对整个JSON进行格式化3. 忽略 code、msg、success、message 等响应状态字段**示例**- 输入 {code: 200, msg: success, data: [1,2,3]} → 提取 data 字段的值 [1,2,3]- 输入 {code: 200, msg: success, data: {name: 张三}} → 提取 data 字段的值 {name: 张三}- 输入 [{name: 张三}, {name: 李四}] → 直接使用整个JSON3.3 格式化规则## 格式化规则### 多条数据JSON数组长度1输出为Markdown表格- 第一行为表头使用JSON字段的中文含义- 第二行为分隔线- 后续每行一条数据- 字段顺序按JSON中字段顺序排列- NULL值显示为-- 日期类型格式化为 YYYY-MM-DD HH:mm:ss### 单条数据JSON对象或数组长度1输出为详情列表- 每行一个字段格式为 字段名字段值- 字段名使用中文含义- NULL值显示为-- 日期类型格式化为 YYYY-MM-DD HH:mm:ss### 空数据空数组/空对象/null输出暂无数据3.3 输出规则## 输出规则1. 只输出格式化后的内容不要输出任何解释、说明、前缀、后缀2. 不要用markdown代码块包裹3. 不要输出多余文字如以下是查询结果、结果如下等4. 表格必须完整不要省略行3.4 示例## 示例### 示例1多条数据输入JSON[{user_name: 张三, count: 100}, {user_name: 李四, count: 50}]输出| 用户名 | 数量 ||--------|------|| 张三 | 100 || 李四 | 50 |### 示例2单条数据输入JSON{user_name: 张三, phone: 13800138000, department: 销售部}输出- 用户名张三- 联系电话13800138000- 所属部门销售部### 示例3空数据输入JSON[]输出暂无数据### 示例4NULL值处理输入JSON{user_name: 张三, phone: null, department: 销售部}输出- 用户名张三- 联系电话-- 所属部门销售部### 示例5带包装的响应data字段为数组输入JSON{ code: 200, msg: success, data: [ {device_type: 布控球, count: 100}, {device_type: 指挥箱, count: 50} ]}输出提取data字段后格式化| 设备类型 | 数量 ||----------|------|| 布控球 | 100 || 指挥箱 | 50 |### 示例6带包装的响应data字段为对象输入JSON{ code: 200, msg: success, data: {user_name: 张三, tel: 13800138000}}输出提取data字段后格式化- 用户名张三- 联系电话13800138000### 示例7带包装的响应data字段为空输入JSON{ code: 200, msg: success, data: null}输出暂无数据3.5 字段名映射## 字段名映射将JSON字段名映射为中文含义| JSON字段名 | 中文含义 ||------------|----------|| id | ID || user_name / userName | 用户名 || email | 邮箱 || phone | 联系电话 || department | 所属部门 || status | 状态 || category | 类型 || product_name / productName | 产品名称 || price | 价格 || count | 数量 || order_no / orderNo | 订单号 || order_time / orderTime | 下单时间 || create_time / createTime | 创建时间 || update_time / updateTime | 更新时间 || region_name / regionName | 区域名称 || address | 地址 |四、关键注意事项4.1 提示词设计原则原则说明明确角色开头明确告诉大模型它的角色是什么提供示例业务术语映射和SQL模式都要有示例明确禁止明确禁止输出非SQL内容保持简洁提示词不要太长重点突出关键信息测试验证使用真实问题测试提示词效果4.2 常见问题与解决方案问题原因解决方案生成了非SQL内容没有明确禁止输出非SQL内容在禁止事项中明确说明选错了表业务术语映射不够明确增加示例映射用错了SQL模式问题关键词映射不够清晰增加示例SQL没有加LIMIT没有明确说明明细查询需要LIMIT在查询规则和查询模式中明确说明生成了UPDATE/DELETE没有明确禁止在查询规则中明确禁止4.3 安全性考虑考虑点措施禁止修改操作禁止UPDATE/DELETE/INSERT等修改操作限制查询条数明细查询强制LIMIT防止全表扫描限制敏感字段不返回密码、身份证等敏感信息防止SQL注入不使用用户输入直接拼接SQL4.4 性能优化优化点措施限制返回条数明细查询强制LIMIT 50避免SELECT *只查询需要的字段使用索引字段优先使用有索引的字段作为查询条件避免函数操作WHERE子句中避免对字段进行函数操作五、完整工作流程示例用户问题用户总共有多少个步骤1SQL生成提示词处理- 识别业务术语用户 → user_info表- 识别问题类型总共有多少个 → SELECT COUNT(*) 模式- 组合生成SQLSELECT COUNT(*) FROM user_info步骤2执行SQL查询- 返回JSON结果{count: 1000}步骤3JSON格式化提示词处理- 识别数据类型单条数据- 格式化输出 - 用户总数1000最终输出给用户用户总数1000学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】