最近在研究text2sql,卡在第一步表ddl如何喂给大模型。之前做国标时用dify+rag基本可用。
但是ddl如果做rag的话,我不知道怎么去喂,一个表结构一个txt,要分词么,召回的时候都是碎掉的sql。
有没有什么可行的方案
chat2db呗
这个跟navicat一样是数据库工具不是么。
我在给公司做报表产品,text2sql是服务层
可以用它开源的模型 自己部署
是的,他只是dify选择模型的那个环节,是工作流中的一个节点。
因为上下文极小,所以需要为它处理数据,你看我1楼的称述:
卡在第一步表ddl如何喂给大模型
,我的表纯ddl导出有200KB了,如果解决这个问题,我使用gpt-4o都是可以的,未必需要特调的开源模型
看了眼他的示例
他把ddl写在了prompt里
嗯。提示词太大了,读不全。
得尝试分步走,我正在寻求方案,如何分布走
这是一个表的大小还是所有的表呢
所有的表ddl加起来这么大哦,一个表ddl也就3k,4k
我之前试过按照这个许多表的示例去做过,但是做了一半业务停止了就没做了,感觉你可以按照这个思路看下
langchain
要不先用AI给所有的表做个索引,例如:表名,描述,表之间的关系。做一个summary。
流程1. 先通过summary找出表;流程2. 喂入对应的表结构,得到sql
谢谢你提供的方向,我看一下哦
你的这个思路可行。
- 表名表关系摘要作为prompt
- gpt自然语言提取表名
- 表结构prompt,gpt生成sql。
good!
但也有个问题就是,如果摘要没有完整的描述表关系的话,提取表名漏一个中间表后续流程就坏掉了。
类似于sys_user这种表,跟大量的表都有关系
是的,得考虑,callback机制和retry
是不是 得喂一份数据库表的设计的文档,表关系,表名,字段,注释
之后查询的prompt里面应该是,你是个SQL专家,将用户的文本从已有的知识库里的信息,完整SQL代码,将用户的输入ebd去向量库里top N ,拿到表信息加到到prompt里,之后llm,我不也不确定是不是这样,之前做的rag大概是这样搞的
之前看过一个开源的项目,佬可以参考一下。
GitHub: GitHub - supabase-community/database-build: In-browser Postgres sandbox with AI assistance (formerly postgres.new)
Demo: https://database.build/
你这个是网页上的数据库客户端么?
是的是的,大概就是佬你这个思路。
就是说里面的很多过程都需要自己写代码实现或者找找开源的搭建一下
新版本的 DBeaver ,pl/sql 这些已经集成AI对话,应该能自动传输表结构这些
dbviewer本身是个商业软件,我不能把它放到我的工作流里面