温水煮代码 温水煮代码
微信 / 电话 18122441316邮箱 1178679449@qq.com
← 返回

作品 & 能力

数据库问答 Agent:用自然语言查数据库

基于大模型的 Text-to-SQL Agent——用一句人话提问,它自动理解库表结构、生成 SQL、执行、把结果讲回给你。看上去是个聊天框,真正的难点全在怎么让 AI 稳定写出正确的查询

它解决什么问题

公司里绝大多数「帮我拉个数」的需求,本质是一句 SQL。但会写 SQL 的人不一定有空,有空的人不一定知道表在哪。业务同事想看一眼昨天的订单量,要走一遍提需求、排期、写脚本、发结果的流程。

数据库问答 Agent 想做的事很简单:把「提需求」直接变成「提问」。你问「上个月每个渠道的成交金额是多少」,它自己去找表、写 SQL、跑出来、把结果整理成一句话或一张表。

三步走通的一条链路

  1. 理解库表结构——先把数据库的 schema 喂给模型:有哪些表、哪些字段、字段是什么意思、表和表怎么关联。表少的时候可以全给,表多了必须先检索出相关的几张,否则上下文装不下、模型也会被无关信息带偏。
  2. 生成并执行 SQL——让模型产出可执行的查询语句,跑在真实数据库上。这一步要卡死权限(只读)、卡死范围(禁止全表扫、禁止写操作),并且对报错做重试:把数据库返回的错误信息再喂回给模型让它自己改。
  3. 返回结果——拿到行数据后,再让模型用自然语言解释一遍,或者直接以表格 / 图表呈现。

真正难的地方

表多了怎么办几百上千张表塞不进上下文。得先用 RAG 检索把候选表缩到几张,检索的质量直接决定后面写得对不对。
字段名不说人话业务叫「成交额」,字段叫 amt_f。schema 之外还得喂业务口径的注释,否则模型只能猜。
写错了怎么收场SQL 报错要能自动重试,但重试要有上限;查出空结果比报错更危险——它看起来是「就是没有数据」。
不能让它乱动数据连接必须是只读账号。这不是靠提示词约束的,是靠权限。提示词会被绕过,权限不会。

完整设计思路与提示词

我把这套设计写成了一篇文章,包括每一步的具体做法和最后那份可以直接拿去用的提示词:

阅读原理文章 →

如果你想在自己公司的数据上搭一套类似的东西——不管是接内部数据库做取数助手,还是给产品加一个「问一句就出报表」的入口——这类需求我可以承接,从技术选型、检索方案到落地部署一起做。

想做一个自己的数据问答 Agent?

说说你的数据规模和使用场景,我给你一个可落地的方案。