Chat2DB 学习笔记
之前研究了 spring-ai-alibaba-nl2sql 项目,最近发现 Chat2DB 也有 AI 部分,看下有什么异同
问题分类
首先是问题分类,Chat2DB 没有使用大模型对用户问题进行分类,而是直接附在了请求对象中,看来是希望用户在发送请求时,选择一个问题类型,方便进行后续处理
Chat2DB将问题划分为了五种类型:
- 生成sql:将自然语言转换为sql
- 解释sql:解释sql的作用
- 优化sql:给出优化sql的建议
- 转换sql:将一种数据库的sql转换为另一种数据库的sql
- 普通对话:普通的对话聊天,可能与sql无关
这里可以看出两个项目的定位区别,Nl2sql——自然语言生成sql,更多的是关注如何生成sql,以及生成sql后的执行和验证;而 Chat2DB 同时还提供了解释、优化和转换的功能。
流程
获取问题类型的描述:系统内置了每种问题类型的执行要求,根据问题类型获取即可
获取数据库类型:请求中附带了数据源id,根据数据源id查询其数据库类型
获取表结构:若设置了表名,查询其ddl;若未设置表名,则使用用户问题进行召回。
生成提示词:结合类型描述、额外输入(备注之类的字段)、数据库类型、表结构信息、用户问题初步生成提示词
提示词补充:若为转换sql,补充目标sql类型
构造消息列表:历史消息+当前提示词
调用大模型:将消息列表发送到大模型获取结果
提示词
### Please follow the below table properties and SQL input{类型描述}. {额外信息}#### {数据库类型} SQL tables, with their properties:## {表结构信息}##### SQL input: {用户问题}(如果是sql转换)#### Target SQL type: {目标数据库类型}
总结
Chat2DB 中对 AI 的应用是比较标准的 RAG 流程,即根据用户问题查询额外信息后,与用户问题一起发送给大模型进行解答
没有针对召回进行复杂优化,也没有反思验证等环节,实际使用效果可能差一些
亮点是除了生成sql,还支持sql的解释、优化、转换等功能
ps:底层没有用类似 langchain 的框架,纯 okhtpp3 自行构造请求调用大模型
