59API

← सभी गाइड पर लौटें

LLM 生成 SQL 与数据查询:从提示词到安全上线的实战教程

गाइड · ZH · 2026-10-01

1. 先明确:LLM 不应直接拥有生产库写权限

让 LLM 生成 SQL 的目标,是把自然语言需求转成可验证的数据查询,而不是让模型自由操作数据库。建议先建立只读数据库账号,仅授予必要表和字段的 SELECT 权限;同时设置查询超时、最大扫描量、最大返回行数和审计日志。对于订单、手机号、身份证等敏感字段,应在数据库视图或服务层完成脱敏,避免将原始敏感数据直接提供给模型。

2. 准备模型真正需要的数据库上下文

模型不知道你的表结构,单靠“查询上月销售额”很容易生成不存在的表名或字段。每次请求应携带与任务相关的元数据,包括数据库方言、表名、字段名、字段类型、主外键关系和业务口径。例如,明确 revenue 是已支付订单的 amount 总和,退款订单必须排除;时间字段使用 paid_at,而非 created_at。只传入相关的 3 至 10 张表,既降低成本,也减少 SQL 幻觉。

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,拒绝分号后的附加语句、注释绕过和危险函数。第二层根据白名单检查实际访问的表、字段和函数。即使模型说查询安全,也必须由程序决定是否执行。

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 पाएं।

मुफ़्त साइन अप