简介
本文从面试官视角解析了Text2SQL工程化的关键点。强调Text2SQL应作为Agent系统的只读工具节点,而非简单对话能力。文章详细介绍了工程级Text2SQL的实现要点:动态Schema裁剪减少噪声、歧义显式消解机制、SQL安全校验、结果验证、语义缓存以及日志与Badcase闭环。通过这些工程化实践,可将Text2SQL从demo升级为稳定、可控、可扩展的系统组件,真正发挥其在Agent中的价值。
这两年面试候选人时,只要对方简历里写了 Text2SQL,面试官几乎都会追问一句:
你这个 Text2SQL,是一个 demo,还是一个能放进 Agent 系统里跑的工程?
这个问题,能直接把人分成两类。
一类停留在“能把自然语言翻译成 SQL”;另一类,已经开始思考系统如何稳定、可控、可扩展地运行。
而 Text2SQL 真正的价值,从来不是“生成一条 SQL”,而是:
作为 Agent 的一个核心工具节点,被调度、被约束、被验证、被复盘。
今天这篇,我就从面试官视角,把这个问题完整拆开讲清楚。
一、为什么 Text2SQL 必须放进 Agent / Function Call 体系?
很多同学做 Text2SQL,流程基本是这样:
用户问题 → 拼 Prompt → LLM 生成 SQL → 数据库执行 → 把结果再喂给 LLM这个流程在 demo 阶段是成立的,但在真实系统里,有三个致命问题:
- 无法判断什么时候该查数据库
- 无法处理歧义、补充条件
- 无法对 SQL 风险和结果正确性负责
而 Agent + Function Call 的核心作用,就是把“查数据库”这件事:
从一次 LLM 输出,升级成一次“被调度、被管理的行为”。
一句话总结:
Text2SQL 不是对话能力,而是 Agent 的一个只读工具。
二、在 Agent 里,Text2SQL 的真实身份是什么?
在工程上,我通常会把 Text2SQL 定义成一个只负责查询、不负责决策的工具。
它的职责非常明确:
- 输入:结构化后的用户查询意图
- 输出:可执行、可验证、受限的 SQL 查询结果
典型的 Function 定义长这样:
{ "name": "text2sql","description": "将自然语言查询转换为只读 SQL 并执行","parameters": { "type": "object", "properties": { "question": { "type": "string", "description": "用户的查询问题" } }, "required": ["question"] }}注意一个细节:
Agent 决定“要不要调用 Text2SQL”,Text2SQL 不决定“要不要被调用”。
这是边界。
三、Agent + Text2SQL 的标准调用流程
一个工程级的调用流程,一定不是“用户一句话直接查库”。
而是下面这个结构:
- Agent 接收用户问题
- 判断是否涉及“结构化数据查询”
- 如果存在歧义,先追问
- 条件齐全后,再调用 Text2SQL
- 校验 SQL
- 校验结果
- 生成最终自然语言回答
你可以把它理解成:
Text2SQL 是 Agent 工作流中的第 N 步,而不是第 1 步。
四、为什么 Schema 不能一次性塞给 LLM?
这是面试里非常高频的一道追问。
如果数据库只有 4 张表,问题不大; 但一旦变成 50 张、200 张表,全量 Schema 会带来两个直接后果:
- Token 暴涨
- 语义噪声严重,准确率下降
工程上真正的做法,是动态 Schema 裁剪。
核心思想只有一句话:
只把“可能相关的表”告诉模型。
实现思路也不复杂:
- 给每张表生成 embedding
- 用户问题生成 embedding
- 相似度检索 top-k 表
- 只把这几张表的结构拼进 Prompt
def _get_relevant_schema(self, question: str, top_k: int = 2) -> str: question_embedding = self.embedding.embed(question) relevant_tables = self._find_similar_tables(question_embedding, top_k) return self._format_schema(relevant_tables)这一层,是 Text2SQL 工程化的分水岭。
五、歧义不是模型问题,是系统问题
面试官如果继续追问,一定会问:
用户说“最近”“大涨”“低估值”,你怎么处理?
这里如果回答“让模型自己理解”,基本就结束了。
工程里,歧义必须显式消解。
做法只有两种:
- 可定义的歧义,直接规则化
- 不可定义的歧义,必须追问用户
例如:
BUSINESS_TERMS = { "最近": "最近30个自然日", "大涨": "涨跌幅 > 5%", "低估值": "PE < 15"}而像“最新”“业绩”“涨幅”这种,就必须进入澄清流程:
AMBIGUOUS_TERMS = { "最新": ["最新交易日", "最新报告期"], "业绩": ["营收", "净利润", "ROE"]}Agent 的职责,是在调用 Text2SQL之前把问题变清楚。
六、为什么 SQL 安全校验是 P0?
我见过太多 Text2SQL demo,直接执行模型生成的 SQL。
这是非常危险的。
在工程里,SQL 安全校验是绝对的底线:
- 禁止 DELETE / DROP
- 强制 SELECT
- 强制 LIMIT
- 限制子查询深度
FORBIDDEN_KEYWORDS = { 'DELETE', 'DROP', 'UPDATE', 'INSERT', 'ALTER'}并且即便模型生成了 LIMIT,也要二次校验:
if limit_value > MAX_LIMIT: sql = replace_limit(sql, MAX_LIMIT)这一步,不是为了“提高准确率”,而是为了:
防止一条 SQL 把整个服务拖死。
七、Text2SQL 的结果也需要“验证”
很多人忽略的一点是:
SQL 语法正确 ≠ 语义正确
比如:
- 结果为空
- 数值明显异常
- 市盈率 1000+
- ROE 超过 50%
这些都不是模型的错,而是系统没有做结果校验。
工程里通常会做三层验证:
- 返回行数是否合理
- 数值范围是否合理
- 让 LLM 自检一次结果是否符合问题
if result["row_count"] == 0: warnings.append("查询结果为空")最终这些 warning 会被带回给 Agent,用于:
- 重新生成 SQL
- 或提示用户调整条件
八、为什么要做语义缓存?
这是一个非常工程的问题。
如果用户反复问:
- “市值最大的银行股”
- “银行里市值最大的是谁”
没有缓存,就会重复:
- embedding
- LLM 调用
- SQL 执行
语义缓存的本质,是:
把“问题 → SQL → 结果”当成一个可复用单元。
if similarity > threshold: return cached_result这一步对成本、延迟、稳定性都是实打实的收益。
九、Text2SQL 为什么一定要有日志和 Badcase 闭环?
最后一个,也是面试官最喜欢问的:
你这个系统,怎么持续优化?
如果没有日志,这个问题没法答。
工程里我们会记录:
- 原始问题
- 预处理问题
- 生成 SQL
- 是否执行成功
- 返回行数
- 用户反馈
class Text2SQLLog: question processed_question generated_sql execution_success result_count然后定期跑脚本分析:
- 哪类问题失败最多
- 是 schema 错,还是语义错
- 哪些可以进入 few-shot 示例库
这才是一个能长期跑的系统。
十、面试官最想听到的总结回答
如果让我帮你浓缩成一段面试用标准回答,我会这样说:
在工程中,我把 Text2SQL 作为 Agent 的一个只读工具来设计。
Agent 负责意图判断、歧义澄清和流程调度,Text2SQL 只在条件齐全时被调用。
在实现上,我通过动态 Schema 裁剪降低 token 和歧义,通过业务术语词典和澄清机制提升理解准确率,并在执行前加入 SQL 安全校验和 LIMIT 约束,防止风险查询。
执行后,我会对结果做合理性验证,并结合日志和用户反馈持续优化 few-shot 示例,从而形成稳定可迭代的闭环系统。
面试官听到这里,基本就知道:
你不是在玩 demo,而是在做工程。
十一、如何学习AI大模型?
如果你对AI大模型入门感兴趣,那么你需要的话可以点击这里大模型重磅福利:入门进阶全套104G学习资源包免费分享!
这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
这是一份大模型从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!
第一阶段:从大模型系统设计入手,讲解大模型的主要方法;
第二阶段:在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段:大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段:大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段:大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段:以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段:以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
100套AI大模型商业化落地方案
大模型全套视频教程
200本大模型PDF书籍
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
LLM面试题合集
大模型产品经理资源合集
大模型项目实战合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓