2026 LLM 生成 SQL 指南:从自然语言到安全可执行查询
先把“生成 SQL”定义为受控的数据访问
2026 年,LLM 生成 SQL 的价值不在于把一句自然语言机械翻译成查询,而在于帮助开发者更快完成数据探索、报表开发和运维排查。生产环境的目标应是:模型提出查询方案,系统验证其语义与安全性,再由受限身份执行。不要把数据库连接串、全量表结构、个人信息或可写权限直接交给模型。
一个可靠流程通常包括:识别用户问题、检索相关 Schema、生成结构化查询计划、生成 SQL、静态校验、在只读或隔离环境试跑、返回结果与解释。将每一步留存审计记录,才能定位“问题理解错误”“字段映射错误”或“SQL 本身错误”。
给模型足够但不过量的数据库上下文
Text-to-SQL 的准确率主要取决于上下文质量。不要把整个数据仓库的 DDL 塞进提示词,而应按用户问题检索相关表、字段、主外键关系、字段含义、枚举值、时间粒度和常用指标定义。例如,“活跃用户”究竟指登录、下单还是使用核心功能,必须提供明确业务口径。
- 为每张表维护简短说明,包括数据来源、刷新频率和数据所有者。
- 为易混淆字段提供示例值,例如订单状态、地区编码和时区。
- 把经验证的历史问答作为少样本示例,但移除敏感数据。
- 明确目标方言,例如 PostgreSQL、MySQL、BigQuery 或 ClickHouse。
建议要求模型先输出查询计划:使用哪些表、连接条件、过滤条件、聚合逻辑和可能的歧义。应用程序确认计划满足约束后,再请求 SQL。这个两阶段设计比一次性直接执行生成结果更容易审查。
提示词要约束输出格式和业务边界
系统提示词应明确模型只能生成 SELECT 查询,禁止 DDL、DML、存储过程调用、多语句和注释中的指令。还应规定:默认加时间范围;明细查询必须限制行数;金额、比率和时间字段的计算规则必须遵循提供的指标定义;遇到字段不足或问题歧义时,先提出澄清问题,而不是猜测。
要求输出 JSON 形式的查询对象会更适合程序处理,例如包含 SQL、参数列表、涉及表、风险说明和自然语言解释。参数必须与 SQL 分离,由驱动程序使用参数化查询绑定,不能把用户输入直接拼接进 SQL 字符串。
执行前建立多层校验,而不是相信模型自检
模型可以解释 SQL,但不能替代规则引擎。执行前应使用 SQL 解析器生成 AST,拒绝非 SELECT 节点、跨租户条件缺失、未授权表、笛卡尔积和危险函数。对扫描量较大的查询,先运行 EXPLAIN 或查询估算器;超过成本、时长或返回行数阈值时,要求用户缩小范围。
- 权限隔离:使用只读数据库账号,并按租户、角色和列级权限过滤可见 Schema。
- 资源限制:设置查询超时、扫描字节上限、并发上限和结果行数上限。
- 敏感数据保护:默认屏蔽手机号、邮箱、身份证号等字段,对聚合结果设置最小样本量。
- 结果复核:同时返回 SQL、口径说明、数据时间范围和空值处理方式,方便分析师核对。
把评测集和反馈闭环纳入日常开发
上线前,使用真实但脱敏的问题建立评测集,覆盖日期比较、多表连接、窗口函数、指标口径、权限拒绝和歧义澄清。不要只比较 SQL 文本是否一致,应比较结果集、扫描成本、执行时间和业务解释是否正确。线上则记录用户是否修改 SQL、是否重新提问和是否标记结果错误,将高频失败案例转化为新的 Schema 描述、示例或校验规则。
用 59API 控制多模型试验与生产成本
不同数据库方言和业务问题需要不同推理能力。开发团队可通过 59API 的统一接口 https://api.59api.com 对比模型效果,例如用 Claude Sonnet 5.5 处理复杂指标口径与多表推理,用 DeepSeek V4 Flash 处理高频、结构较固定的查询请求。59API 按量付费、价格较低,并提供原生官方质量模型,无需因接入成本而过早固定单一模型。
其接口兼容 OpenAI SDK、Claude Code、Codex 和 Gemini CLI,团队可以在现有服务中设置模型路由、限额和 A/B 评测,而不必为每家模型提供商分别重写调用层。若正在构建内部数据助手或自然语言 BI 功能,可注册 59API,以较低成本先完成受控的查询原型与评测闭环。