文章目录
背景
对业务数据库中的表实现问答。输入是用户的问题,输出是该问题的答案。
这是很典型的Text2SQL的应用场景了,为了实现这一需求,很容想到的是把创建的表和表的描述都放进prompt里,让LLM去根据表的结构生成SQL语句,再利用工具去执行SQL语句,拿到查询结果后,再丢给LLM,让LLM根据给定的内容回答问题。我一开始也是这么想的,但是,当你的业务表非常多的时候,比如有上千个,你应该选择哪个表或者哪些表去给到LLM呢?根据问题去检索可能会用到的表是比较容易想到的一种方式。
于是,我带着我的疑惑,去调研了目前一些比较火的text2sql的框架。惊奇地发现,他们确实也是这样做的。比较典型的就是vanna了
核心策略
从上图可以看出,Vanna实际上分了三个部分做RAG:
- DDL 语句检索:对建表的语句做语义检索,建表时的表描述和字段注释
- 文档检索:包括对一些专有名字的解释,以及拼接表的每个字段组成的字符串等一些其他相关文档
- Query 与 对应的SQL检索:用户的问题与对应的SQL语句
关键步骤
DDL语句向量化: 对于每一个建表语句,进行embeddi