大模型在技术上 能 / 怎么 实现比较准确的数据库查询 吗/呢 ?

88 天前
 p1nk

背景

领导给了个任务,在本地配置一个 deepseek 大模型,然后构建公司内部的知识库、连接公司内部的数据库,实现领导和员工对访问需求。 现在上述三个任务都已经实现了,但是在对接数据库查询这块有很大问题。

问题

在将提示词(包含任务要求、数据表信息)和用户给到模型之后,模型给出的 sql 语句,十次有七次是直接无法执行的,基本就是语法有问题(常见错误 order by 、to_char 等等),再有三次就是和表结构有冲突,无法执行。

尝试

我尝试根据它 sql 的错误语法再加提示词,但是问题是越来越多的提示词再加上需要告知的表结构,提示词都快把可输入最长 token 占满了,而且提示词也不是百分百有效(比如我告诉它不要使用任何 order by ,但是还是输出...)

疑惑

我一开始就怀疑这件事是否可行,现在变得严格怀疑这件事是否可行。
表结构很简单的话我尝试过没有任何问题,可以做到百分百不出错,但是一旦企业的表结构极其复杂各种嵌套,在这种情况下还一定要用自然语言生成需要精准执行的 SQL 语句,我严格怀疑能做到么?
希望是我的技术水平不够,能有大佬帮我解解惑

7351 次点击
所在节点    程序员
78 条回复
vem
87 天前
Dify + 这个插件 https://marketplace.dify.ai/plugins/jaguarliuu/rookie_text2data
实测 MySQL 在表不多的情况下,比我预想的要好
iyaozhen
87 天前
可能没那么复杂

在本地配置一个 deepseek 大模型,换成字节火山云上的满血版,可能就好了
yufeng0681
87 天前
@frandy #59 我感觉应该是分析语义,识别用户真实意图,系统以前实现的数据查询场景都可以映射出来,通过语义来控制。 如果是新的查询场景,那就要一步步拆解,先分析出要用到哪几张表,表里的哪几个字段; 输出是要呈现哪几个字段。 然后再告知 AI ,输入和输出 [我想象,应该是 AI Agent 来拆分实现这个]
macadurian
87 天前
能问一下你的服务器配置吗?部署的 deepseek 哪个版本的模型?
Loocor
87 天前
斗胆分享一个我弄的试验库: https://github.com/loocor/db2llm
视频介绍在: https://www.zhihu.com/zvideo/1883089086501352960
kjstart
87 天前
@p1nk 没差, 但你写了 mcp 不就能用大模型分析回复了吗? 你自己查数不是还要自己估嘛, 那不 AI...
XCFOX
87 天前
分析一下我的思路:

1. 将数据库以 GraphQL 的形式暴露 API ,使用 Hasura 或 Graphile
2. 将 GraphQL 通过 MCP 连接到 AI ,使用 https://github.com/blurrah/mcp-graphql
akira
87 天前
最近刚好在做 chat bi 的东西,其实如果你们之前 bi 构建了的话,
不要直接用 生产库的数据 来出, 走 BI 的宽表 ,这个时候出来的效果就好很多啦
horizon
87 天前
不能,你需要 function calling
提供 sql api ,让大模型填充参数
elevioux
87 天前
不知道楼上说的 mcp 和 题主的需求有什么关系,mcp 本质不就是远程的 function call 吗?难道还要限定用户的话题范围? function call 没有覆盖的,一律不知道?

最近公司老板也有相似需求,而且还要鉴别用户权限,限定可查数据。我的做法是根据用户 ID 手动创建固定的临时表,整理好所有可查数据。AI 只需要对接几个临时表就好,不用管数据库一大堆乱七八糟的表。

效果是,生成 SQL 本身没问题,但 AI 还不能完全理解业务,差强人意,还要调教。
chunshuxvgou
87 天前
你本地部署的是哪个模型? 32b? 70b ?
111111111111
87 天前
怎么这么多人无脑 MCP ,MCP 只是个接口协议和数据库没啥关系呀

我这边自己做的 demo 是:
- rag (描述业务关系和数据关系)+
- function calling (执行 sql )
- 提示词工程(要求 LLM 按照既定步骤进行,比如先查表结构再生成 SQL ,认真检查和验证 SQL ,最后再执行 SQ 取数据回答问题)

在表不多而且表关系不那么复杂的情况下,效果看起来还好,至少没有再出现生成的 SQL 执行不了,几乎不太需要代码级别干预,但是 LLM 在生成 SQL 过于聚焦你提出的“问题”,问题之外的事情考虑还是不完善,比如人的重名,数据的统计维度。所以还是需要每次的反馈,不断调整问题或者提示词。

在这个 demo 中,我的感受是:其他人必须要通过我来使用效果才好,直接给他们用效果非常差
因为我会把他们的的问题或者需求理解一遍后,再以 LLM 更容易理解正确的方式进行提问,
这有点像专职司机,车是公司的,但是只有我最懂它,最能用好它,知道怎么对它进行保养维护
areless
87 天前
text2sql 是有专门的比赛 排名的。现在只不过换了一种使用 llm 的方式去解决这个问题。实际上排名靠前的成功率也是不高的。
lawrencelee
87 天前
@areless 话说这个比赛在哪里呀?
kelvinji2009
87 天前
@frandy 👍 相似理解和感受
Hyxiao
87 天前
场景跟你差不多,但是我们数据是保存在 es 中的,最近将 es 升到了 8 ,支持了语义搜索,在 dify 设置外置知识库对接项目提供的接口,就可以做到问的问题都可以关联上 es 相关的内容
areless
87 天前
@lawrencelee 在阿里在阿里,2019 年首届中文 nl2sql
NothingExist
3 天前
@Varsion13 有什么 API 呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1124121

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX