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

88 天前
 p1nk

背景

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

问题

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

尝试

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

疑惑

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

7350 次点击
所在节点    程序员
78 条回复
Clannad0708
87 天前
mcp function call 都行,顺便问下
大佬这个咋实现的 (构建公司内部的知识库、连接公司内部的数据库,实现领导和员工对访问需求)
这个是怎么做的
YOUXIAZ
87 天前
skyemin
87 天前
@YOUXIAZ 没理解 Cursor 调 MCP Server 是怎么能直接查数据库,用的什么技术
aeron
87 天前
@cylaw ReAct ,模型自己生成 sql ,自己去尝试执行,自己判定执行结果。最简单的参考 langchain 的官方示例就能写一个
z1gui
87 天前
我没太懂如何结合 ds+mcp 的,是通过 dify_或者 fastgpt 这类 agent 工具么,看楼上的教程,通过 cursor 或者 cherry studio 配置 mcp 服务的。另外,mcp 服务查询常规的 mysql ,oracle 数据库肯定是没问题,如果是不常规的一些国产数据库,mcp 服务是不是要自己写,那如何创建一个 mcp 服务啊
dabingbing
87 天前
1.反正不能随便问,设计几个可能用的到的业务,数据做成宽表,视图貌似就可以
2.mcp 没毛用
lawrencelee
87 天前
常规的 text2sql 在宽表上表现比较好,但一旦涉及星型和雪花这种模型就容易吃瘪。我们采取的方式是根据业务精调模型,效果还挺好,就是精调模型有前期成本。
easing
87 天前
说 MCP 的是以为 OP 不知道怎么让大模型执行 sql 查询么。。。
OP 的问题是大模型生成的 sql 语句准确率不足的问题,这个和 MCP 有半毛钱关系
zzxCNCZ
87 天前
正好我也做过这方面的相关业务,楼上说的 mcp 给开发用用还行,实际公司业务一般都是分块,设计多表关联,都比较复杂,mcp 应对简单的还行,复杂的业务,比方说表关联是在应用层做的,在数据表设计中没有体现,直接使用 mcp 就会吃瘪。我们最终实现比价精准的方案是通过 1.表数据清晰 2.清洗表结构整理,字段说明 3.业务分块代入到 ai 上下文中 最终就能实现描述特定业务,找到业务表,生成 sql ,再查询
niubiman
87 天前
我今天下午也在测试这个, 我用通义灵码然后把数据库结构文件添加到上下文进行对话, 可以针对表结构进行比较准确的生成, 并且语法也符合目标库的语法
Orlion
87 天前
恰好我最近在做类似的事情,思路是:给大模型一个简单的表结构,输出“正确的”SQL ,然后再做一个 sql parser ,适配输出符合真实业务表结构的 sql
luqicoder67
87 天前
好奇 op 背景中的 3 个任务怎么完成的,学习一下
highkay
87 天前
1. mcp 只是一套标准的协议,也就是 api 设计和实现规范,和你业务完全没关系,目前 db 相关的几个 mcp 基本处于玩具的状态,满足不了实际的业务需求。
2. 一般用户需要的其实是 BI ,所以可以看看 headless bi 的产品,比如腾讯的 https://github.com/tencentmusic/supersonic
mightybruce
87 天前
大模型和 MCP 并不能直接解决这些问题, 这个任务叫做 NL2SQL, 看你的任务有多复杂,这 NL2SQL 比大模型出现都早好几年, 你多研究研究吧, 多数人说的都是错的。
https://github.com/hkustdial/nl2sql_handbook
https://help.aliyun.com/zh/polardb/polardb-for-mysql/user-guide/llm-based-nl2sql
mightybruce
87 天前
如果你们想一部到位,不如花钱去买 chatbi 的 AI 产品,网易数帆和百度千帆都有这种的。

国内业界做的比较好的是蚂蚁搞的 text2sql 相关的项目
下面这个 DB-GPT 支持对 text2sql 的微调。

https://github.com/eosphoros-ai/DB-GPT
p1nk
87 天前
@Fca #31 数据库的数据怎么向量化呢?我搜到的都是非结构化内容向量化成 faiss ,没有搜到把 sql 、oracle 这种数据库向量化的内容,大佬方便说下吗?


@ChoiYoonJung #32 感谢,那我明天试试,循环几次同时带上错误信息


@pweng286 #36 简单的可以,复杂的就不行了。哪怕用很简单的方式就能调戏模型。给他一段代码其中包含 ` # 这种东西,然后让他正则匹配其中某一部分。模型给的结果就会乱掉


@fcbwalk #37
本地的是个小的,目前单位在采购设备布 671B 。至于数据安全,领导最担心的就是数据安全,不然也不会花老鼻子钱买设备了😂
关于提到 “MCP-server 是更好的方案”,我的理解不知道对不对。我研究了几个 demo ,目前客户端怎么开发还没整明白,但是他大概的逻辑我看明白了,可是我感觉还是走的 function 那套呀,不过是大家都是同一种协议可以公开互相用。但面对公司独特的业务场景,server 端还是得自己写,同时也没办法公开出去,不是又和 function calling 一样了吗
mightybruce
87 天前
RAG 是可以解决一部分问题,不过 V2EX 上的人回答都不对, 可以看看 finglm 智谱金融行业大模型挑战赛, V2EX 上没几个做这个相关的,这都是前沿技术,要都懂了怎么可能。
https://github.com/MetaGLM/FinGLM2/tree/main/baseline/soldier_baseline
https://github.com/Jinglever/FinGLM2-semi-final
eric227
87 天前
关键词:Text2DSL
frandy
87 天前
巧了,仅一个月就在弄这样的产品,首先罗列下相关的开源项目
https://github.com/tencentmusic/supersonic 腾讯音乐出的 chatbi,结合 llm 和 bi 能力,看完源码,你会发现,是先通过传统的 bi 进行语义匹配,然后仍给 llm 做处理,减少模型的幻觉产生
https://github.com/eosphoros-ai/DB-GPT 核心是它的提示词,核心是它的提示词,核心是它的提示词,可以得到图表
https://github.com/CodePhiliaX/Chat2DB 开源版就是挂羊头卖狗肉,广告做的好
好了,说了那么多,就是 Text2Sql 的本质就是大模型自身的能力,
我们能做的是
1 、在喂给大模型之前,做一些语义处理,然后大模型生成 sql 之后,对 sql 进行校正,这一块,又可以让大模型来校正,反复迭代
2 、表结构不要有歧义性,关联的 id 等需要明确表明是哪个表的哪个字段,这样处理之后,32b 参数量的模型,至少能准确生成 2-3 张表关联的 sql 语句
3 、引入 rag,可以把 ddl 的信息做成 rag ,然后先进行相似度匹配,然后得到对应的相关表结构信息,最后生成 sql.
4 、切分场景,不要一把梭把所有表结构信息都仍给大模型,大模型也扛不住,尽量切分场景,场景的识别也可以依靠大模型,专业术语叫意图识别
5 、指令型的大模型比推理型的速度要高,但是出的结果不一定准确,可以结合使用。
至于 mcp,emm,别太神话。追根到对应的某个 mcp 服务器的相关源码,其实还是上面那些
以上就是我近一个月开发此类产品的最大体会。
ps:这种类型的需求,领导是最喜欢的,但是,mmp 的这种需求,你必须得知道你的数据库里有哪些信息的数据,所以就等于领导要有提问的艺术,而这,是领导缺乏的。so,做此类需求,只能尽人事,听天命,懂甩锅,会报命。
xvan
87 天前
不管是大模型或者是专门的 nl2sql 的模型,都会有生成语句无法查询出结果甚至复杂到无限输出的问题,尤其是复杂的查询。如果是给领导演示,尽可能的梳理业务将可能查询的数据生成的新的简单的表,而不是现场进行各种多表查询。

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

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

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

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

© 2021 V2EX