Skip to content

49. 如果让你设计一个 NL2SQL Agent,你会重点控制哪些风险? ​

难度 P1 高频 · 岗位 应用 · 频率 ★★★ · 预计阅读 5 min

👔面试官:如果让你设计一个 NL2SQL Agent,你会重点控制哪些风险?

🙋‍♂️我:SQL 注入、语法错误。

👔面试官:对,但要更系统:schema注入(不能把全库schema塞进去)、SQL安全(只读、危险语句过滤)、执行验证(语法检查、沙箱执行)、歧义澄清(时间范围、口径定义)。你能展开吗?

💡 简要回答 ​

四类风险:

风险控制措施
Schema注入按问题裁剪schema,schema linking
SQL安全只读查询、禁止危险语句、执行沙箱、超时控制
执行验证语法检查、执行前校验、小数据量测试
歧义澄清时间范围、口径定义、字段歧义支持澄清

关键:不让模型脑补,关键信息必须澄清或确认。

📝 详细解析 ​

NL2SQL Agent 的四类风险详解 ​

Schema 注入风险:把整个数据库的所有表、所有字段塞给模型,不仅消耗大量 token,还容易让模型混淆字段,生成引用错误表的 SQL。解决方案:Schema Linking——先用语义检索或关键词匹配,只把与问题相关的表/字段裁剪后注入 Prompt(通常从全库几百张表缩减到 3-5 张相关表)。

SQL 安全风险:NL2SQL 最严重的风险是模型生成 DROP/DELETE/UPDATE 语句,或通过多表 JOIN 泄露敏感数据。控制措施:

  • 执行层只允许 SELECT(数据库账号只有 SELECT 权限)
  • 执行前用 SQL Parser 检测危险关键词(DROP/DELETE/INSERT/UPDATE)
  • 设置执行超时和返回行数上限(防止全表扫描)

执行验证:模型生成的 SQL 可能有语法错误,或引用不存在的列。解决:执行前先做 EXPLAIN(获取执行计划,验证语法和列名有效性),若失败将错误反馈给模型重新生成(ReAct 式自我修正)。

歧义澄清:自然语言有大量歧义——「最近」是一周还是一个月?「销售额」是含税还是不含税?「用户」是注册用户还是活跃用户?解决:维护业务术语词典,注入 Prompt 中明确口径定义;对模糊时间范围主动追问澄清。

系统架构 ​

用户问题
  → Schema Linking(裁剪相关 Schema)
  → SQL 生成(LLM)
  → 语法验证(EXPLAIN)
  → 安全过滤(SELECT only, 行数限制)
  → 执行 & 结果
  → 结果解读(LLM 生成自然语言回答)

🎯 面试总结 ​

四类风险控制:schema注入、SQL安全、执行验证、歧义澄清。安全优先。


章节首页 · ← Q48 · Q50 →

最后更新2026-05-01
难度P1
频率medium
阅读5 min
主题agent
觉得有帮助?把这个链接转给正在求职的朋友 · 用 Ctrl + K 全站搜索其它题