关于 text-to-sql
text-to-sql 是供 Agent 使用的提示驱动技能,依据自然语言请求和数据库结构生成 SQL。它强调参数化查询、结构校验,并提供评估方法。
主要功能
- 01根据自然语言生成 SQL
- 02结合数据库结构与关系
- 03生成优化后的参数化查询
- 04校验语法并测试样例数据
- 05支持 Promptfoo 评估
适用场景
- 01按注册时间筛选用户
- 02按产品汇总营收
- 03查询重复记录
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oimiragieo/ agent-studio --skill text-to-sql安装后在 Claude Code 中输入/text-to-sql确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
commands/text-to-sql.mdhooks/post-execute.cjspre-execute.cjsreferences/research-requirements.mdrules/text-to-sql.mdschemas/input.schema.jsonoutput.schema.jsonscripts/main.cjstemplates/implementation-template.md详细介绍
模式:认知/提示词驱动 — 没有独立的实用脚本;通过 Agent 上下文使用。
Text-to-SQL 技能
身份
Text-to-SQL — 根据数据库架构上下文和查询模式,将自然语言查询转换为 SQL。
能力
- 查询生成:将自然语言转换为 SQL
- 架构感知:使用数据库架构生成准确的查询
- 查询优化:生成经过优化的 SQL 查询
- 参数化查询:创建安全的参数化查询
用法
基本 SQL 生成
适用场景:
- 根据自然语言查询数据库
- 数据分析请求
- 报告查询
- 临时数据库查询
调用方式:
"Generate SQL to find all users who signed up in the last month"
"Create a query to calculate total revenue by product"
"Write SQL to find duplicate records"
功能说明:
- 分析自然语言查询
- 参考数据库架构
- 生成 SQL 查询
- 验证查询语法
- 返回参数化查询
高级功能
架构集成:
- 加载数据库架构
- 理解表之间的关系
- 使用列类型和约束
- 处理联接和聚合
查询优化:
- 生成高效查询
- 使用适当的索引
- 优化联接
- 尽量减少数据传输
安全性:
- 参数化查询(防止 SQL 注入)
- 验证查询语法
- 使用示例数据进行测试
- 错误处理
最佳实践
- 架构上下文:提供完整的数据库架构
- 查询验证:执行前验证 SQL
- 参数化:始终使用参数化查询
- 测试:使用示例数据测试查询
- 优化:检查查询性能
集成
与 Database Architect 集成
Text-to-SQL 使用 database-architect 提供的架构:
- 表定义
- 关系
- 约束
- 索引
与 Developer 集成
Text-to-SQL 为开发者生成查询:
- 查询模板
- 参数化查询
- 查询优化
- 错误处理
示例
示例 1:简单查询
User: "Find all users who signed up in the last month"
Text-to-SQL:
1. Analyzes query
2. References users table schema
3. Generates SQL:
SELECT * FROM users
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
4. Returns parameterized query
示例 2:复杂查询
User: "Calculate total revenue by product for Q4"
Text-to-SQL:
1. Analyzes query
2. References orders and products tables
3. Generates SQL:
SELECT p.name, SUM(o.total) as revenue
FROM orders o
JOIN products p ON o.product_id = p.id
WHERE o.created_at >= '2024-10-01'
AND o.created_at < '2025-01-01'
GROUP BY p.id, p.name
4. Returns optimized query
评估
评估框架
根据 Claude Cookbooks 的模式,Text-to-SQL 评估包括:
语法验证:
- SQL 语法正确性
- 架构合规性
- 查询结构验证
功能测试:
- 在测试数据库上执行查询
- 结果正确性
- 性能验证
Promptfoo 集成:
- 多种提示词变体(基础、少样本、思维链、RAG)
- 温度扫描
- 模型对比(Haiku 与 Sonnet)
评估配置:
为评估设置创建 promptfoo 配置文件(例如,text_to_sql_config.yaml)。
运行评估
# Run text-to-SQL evaluation (create config first)
npx promptfoo@latest eval -c text_to_sql_config.yaml
评估指标
- 语法准确率:SQL 语法有效的查询所占百分比
- 功能正确性:返回正确结果的查询所占百分比
- 架构合规性:使用正确架构的查询所占百分比
- 性能:查询执行时间和优化情况
Cookbooks 中的最佳实践
1. 提供架构上下文
始终包含完整的数据库架构:
- 包含列类型的表定义
- 关系和外键
- 约束和索引
- 示例数据模式
2. 使用少样本示例
提供类似查询的示例:
- 简单查询
- 包含联接的复杂查询
- 聚合查询
- 子查询模式
3. 对复杂查询使用思维链
对于复杂查询,使用思维链推理:
- 将查询分解为多个步骤
- 确定所需的表
- 规划联接和聚合
- 逐步生成 SQL
4. 使用 RAG 理解架构
使用 RAG 检索相关架构信息:
- 查找与查询相关的表
- 理解关系
- 获取列详情
- 检索查询模式
相关技能
- classifier:对数据库查询进行分类
- database-architect:用于架构设计
- developer:生成查询代码
相关文档
- 分类模式 - 分类指南
- 评估指南 - 全面评估
- Claude Cookbooks - Text-to-SQL
铁律
- 始终在生成 SQL 前,根据提供的架构验证所有表名和列名
- 绝不对查询值使用字符串插值——必须无例外地使用参数化查询
- 始终为 SELECT 查询添加
LIMIT子句(默认值为 100),除非用户明确要求覆盖此限制 - 绝不在未获得用户明确确认的情况下执行 DROP、DELETE、TRUNCATE 或 UPDATE 语句
- 始终用通俗易懂的语言解释生成的查询逻辑,让用户了解将要执行的内容
反模式
| 反模式 | 失败原因 | 正确做法 |
|---|---|---|
| 对值使用字符串插值 | 存在 SQL 注入漏洞 | 使用带有 ? 或 $N 占位符的参数化查询 |
| SELECT 查询未添加 LIMIT 子句 | 返回所有行,存在内存不足和超时风险 | 默认使用 LIMIT 100,需要用户明确要求才能覆盖 |
| 未经确认执行破坏性 SQL | 会造成不可逆的数据丢失 | 执行 DROP/DELETE/TRUNCATE 前必须获得用户确认 |
| 未验证架构 | 引用了不存在的表或列 | 根据提供的架构验证所有标识符 |
| SELECT * 未指定列名 | 结果不可预测且浪费性能 | 始终明确指定列名 |
记忆协议(强制)
开始前:
阅读 .claude/context/memory/learnings.md
完成后:
- 新模式 ->
.claude/context/memory/learnings.md - 发现问题 ->
.claude/context/memory/issues.md - 做出决策 ->
.claude/context/memory/decisions.md
评论
支持 Markdown