3级升级法:不懂SQL也能把自然语言转SQL的提示词设计指南
【免费下载链接】coursesAnthropic's educational courses项目地址: https://gitcode.com/GitHub_Trending/cours/courses
在 Anthropic 提示工程课程(courses 仓库)里,工具调用、少样本提示、提示词评估三组笔记正好拼出一条自然语言转SQL的最小链路。下面用一家咖啡店的会员、饮品、订单三张表当练手对象,把这条链路完整走一遍。
为什么值得先让模型当翻译官
运营问一句"上周卖了多少杯拿铁",开发要排半天期。中间的卡点不在写SQL本身,而在表名、字段名、表怎么互相指认,这些都是外人看不懂的行话。模型恰好是行话翻译官:你把"字典"(表结构)和"语法"(SQL规则)交给它,它就能把大白话翻成查询语句。
喂数据库结构给模型,就像先给地图标注路名和连接点,再让人带路。仓库的工具调用笔记把这套流程画得很清楚:先声明能力,再回答问题,最后把结果包进固定标签里交差。
3行写出能跑的最小提示词
第一步别贪多。目标只有一个:让单表查询跑起来。角色、表结构、问题,三行就够。
你是SQL助手。数据库里有 drinks 表: id(编号)、name(饮品名)、price(价格)、category(分类) 只输出一条 SELECT 语句,不要解释。 用户问题:哪些饮品价格在30元以上?模型的典型回答:<sql>SELECT name, price FROM drinks WHERE price > 30</sql>。
改了什么:故意不放示例、不放安全规则。为什么:先验证链路通不通,加功能会掩盖"链路根本没通"的问题。三行里带中文注释的字段就是字典,模型光靠字段名就能写出正确的查询。仓库工具调用附录里的计算器是同一个道理:参数(两个数和运算符)描述清楚了,模型自然知道怎么"调"它。
给模型加一道安全锁
🔒 聊天答错可以追问,SQL会直接执行。模型编一个不存在的字段,顶多报错;WHERE写歪,返回的就是错数据;更糟的是它顺手生成一条 UPDATE。所以最小链路跑通后,第一件事是上规则。
规则: 1. 只允许 SELECT,遇到 UPDATE/DELETE/DROP 直接拒绝 2. 查询必须带 WHERE 条件,禁止无过滤全表查询 3. 字段名拿不准就先反问用户,不要猜 4. 统一用 <sql>语句</sql> 包裹输出第1条把破坏性操作掐死在源头,第3条用一次反问换准确率。第4条用的是结构化输出里那个把戏:定义一个"工具",模型以为自己在调用工具,实际交出的正是你要的结构;这里换成<sql>标签,下游程序一个正则就能把SQL摘出来。
用示例和表关系图攻复杂查询
规则写到十条,不如给模型看两个标准答案。少样本提示笔记里的结论很直白:给例子比写规则更快见效。挑例子有讲究,两条要覆盖不同场景:一条聚合,一条时间过滤。
示例1: 问:最贵的饮品是什么? 答:<sql>SELECT name, price FROM drinks ORDER BY price DESC LIMIT 1</sql> 示例2: 问:查3月10日所有会员的订单 答:<sql>SELECT * FROM orders WHERE order_date = '2024-03-10'</sql>多表查询先画关系图
咖啡店的三张表靠外键(表里存的"另一张表的ID")互相指认。把这两行写进提示词,模型就知道该加 JOIN(把两张表按ID拼起来查):
- orders.member_id 指向 members.id:订单属于哪个会员
- orders.drink_id 指向 drinks.id:订单买的是哪杯饮品
用户问题:Alice 都点过哪些饮品? 答:<sql> SELECT d.name FROM orders o JOIN members m ON o.member_id = m.id JOIN drinks d ON o.drink_id = d.id WHERE m.name = 'Alice' </sql>对比上一节,改动只有两行"表关系说明",模型就把单表查询升级成了三表联查。关系图就是模型的接线图,线头标清楚,它就不会乱接。
排错实战:SQL写错了怎么定位
⚠️ 四种高频症状,按顺序排查:
- 字段张冠李戴。模型用了表里不存在的列。多半是表结构放在问题后面、或被压成了一句话。把结构挪到提示词最前面,每个字段附一句中文说明。
- JOIN 漏了 ON。两张表拼完没有连接条件,行数直接翻倍。解法是让它先写一行"用哪个字段连哪个字段",再写SQL。仓库分步思考笔记验证过:让模型"想出声",错的答案常能变对。
- 模糊词没落地。"最近""几个大客户"没法翻译。在规则里补一句:遇到模糊的时间或规模表述,先换算成具体条件并用一句话说明。
- 修好一条,坏掉三条。别凭感觉调,攒十个典型业务问题当测试集,跑一遍算通过率。提示词评估目录演示了"测试集→打分→改提示词"的完整循环,其中03笔记还展示了用代码断言"输出里必须出现预期表名"这类可执行的检查项。
落地清单:搬进你的业务前做这5件事
✅ 照着勾完,这套自然语言转SQL提示词就能上线了:
- 把表结构写成纯文本:每行一个字段,括号里写中文含义,放在提示词最前
- 加上4行安全规则,至少禁掉一切写操作
- 附2-3个示例,覆盖聚合、时间过滤等不同场景
- 多表查询前,把外键关系逐行列出来当"接线图"
- 攒10个典型业务问题当测试集,每改一次提示词都跑一遍,用通过率说话
【免费下载链接】coursesAnthropic's educational courses项目地址: https://gitcode.com/GitHub_Trending/cours/courses
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考