LLM 生成 SQL 与数据查询:从提示词到安全上线的实战教程
1. 先明确:LLM 不应直接拥有生产库写权限
让 LLM 生成 SQL 的目标,是把自然语言需求转成可验证的数据查询,而不是让模型自由操作数据库。建议先建立只读数据库账号,仅授予必要表和字段的 SELECT 权限;同时设置查询超时、最大扫描量、最大返回行数和审计日志。对于订单、手机号、身份证等敏感字段,应在数据库视图或服务层完成脱敏,避免将原始敏感数据直接提供给模型。
2. 准备模型真正需要的数据库上下文
模型不知道你的表结构,单靠“查询上月销售额”很容易生成不存在的表名或字段。每次请求应携带与任务相关的元数据,包括数据库方言、表名、字段名、字段类型、主外键关系和业务口径。例如,明确 revenue 是已支付订单的 amount 总和,退款订单必须排除;时间字段使用 paid_at,而非 created_at。只传入相关的 3 至 10 张表,既降低成本,也减少 SQL 幻觉。
- 方言:MySQL、PostgreSQL、Snowflake 或 ClickHouse 必须明确指定。
- 表关系:orders.user_id 关联 users.id,order_items.order_id 关联 orders.id。
- 业务规则:金额单位、时区、取消订单状态、去重规则都应写清楚。
- 允许范围:列出可查询表与可返回字段,未列出的对象一律禁止使用。
3. 用固定提示词要求结构化 SQL 输出
不要只要求“给我 SQL”。更可靠的做法是要求模型返回固定 JSON 字段:sql、params、assumptions、tables_used、risk_level。系统提示词可写为:你是 PostgreSQL 数据分析助手;仅生成单条只读 SELECT 或 WITH 查询;只能使用提供的表和字段;禁止 INSERT、UPDATE、DELETE、DROP、ALTER、COPY、调用存储过程;所有用户输入必须使用参数占位符;无法确认业务口径时返回 assumptions,不得猜测。
例如用户提出“统计上海用户最近 30 天已支付订单金额”,模型应生成类似 SQL:SELECT SUM(o.amount) AS total_amount FROM orders o JOIN users u ON o.user_id = u.id WHERE u.city = $1 AND o.status = $2 AND o.paid_at >= CURRENT_DATE - INTERVAL '30 days'。参数则单独返回上海和已支付,而不是把用户输入拼接到 SQL 字符串中。
4. 在应用层做两次校验,再执行查询
第一层使用 SQL 解析器或规则引擎校验语法:只允许一条语句,首个关键字必须是 SELECT 或 WITH,拒绝分号后的附加语句、注释绕过和危险函数。第二层根据白名单检查实际访问的表、字段和函数。即使模型说查询安全,也必须由程序决定是否执行。
- 先执行 EXPLAIN:检测全表扫描、超大成本和意外笛卡尔积。
- 自动补充 LIMIT:明细查询默认限制 100 或 500 行,聚合查询也应限制分组数量。
- 强制参数绑定:通过数据库驱动的参数机制传递 params,禁止字符串拼接。
- 保留审计记录:记录用户问题、元数据版本、模型输出、最终 SQL、执行耗时和错误信息。
5. 使用 59API 低成本接入 Claude 与 GPT 模型
在模型调用层,可将 59API 作为统一入口:注册后创建 API Key,并在现有 OpenAI SDK、Claude Code 或 Codex 配置中,将 API 入口设置为 https://api.59api.com 所对应的兼容配置。它提供 Claude Opus、Sonnet、Haiku、Fable 及 GPT 模型的按量付费访问,适合把 SQL 草稿、SQL 审核和复杂分析拆分给不同模型处理,并保持原生官方质量模型体验。
实际选型可采用分层策略:日常字段映射、简单筛选与改写优先使用 Haiku 等低成本模型;多表关联、复杂指标口径和 SQL 审核使用 Sonnet;只有在高价值、复杂分析任务中再使用 Opus。这样能在不牺牲关键查询质量的前提下控制 Token 成本。59API 的价格优势和推荐返利机制,也适合需要持续调用模型的数据产品团队。
6. 建立可持续优化的评测闭环
上线前准备至少 50 条真实问题,覆盖日期计算、分组排行、多表关联、空值处理、权限边界和模糊业务表达。对每条问题人工标注期望表、核心过滤条件和结果口径,再衡量 SQL 可执行率、字段正确率、结果一致率与平均成本。将失败案例补充进提示词、元数据说明或规则引擎,而不是只依赖更昂贵的模型。
当这套流程跑通后,LLM 就能成为受控的数据查询助手:它负责理解意图和生成候选 SQL,程序负责验证、限权和执行。若你正在搭建面向内部员工或客户的自然语言数据查询功能,可以注册 59API,用较低的按量成本先完成模型与 SQL 安全链路的验证。
Ready to get started?
Connect Claude & GPT in minutes at the lowest prices — full-power, never downgraded. Sign up to get your API key.
Sign up free