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 安全链路的验证。
शुरू करने के लिए तैयार?
कुछ ही मिनटों में Claude और GPT जोड़ें, सबसे कम कीमत पर। साइन अप करें और API key पाएं।
मुफ़्त साइन अप