AI知识库 AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


在笔记本电脑上,实现NL2SQL对话式数据查询与分析
发布日期:2024-04-23 07:26:30 浏览次数: 1768

现在,我们已经实现了在自己的笔记本电脑上,通过Ollama轻松使用Llama2、Gemma等模型。结合本地的个人文档知识库,通过AnythingLLM框架,实现检索增强生成RAG智能问答。


具体可以参见之前的两篇文章:


 1 

什么是对话式数据查询


企业有大量的应用系统,通常使用关系型数据库保存数据,可以通过大模型的自然语言转SQL语句(NL2SQL)能力,通过对话的方式进行查询和分析、展示。


现在,大模型的NL2SQL的能力已经得到迅速提升。但是,准确率尚不能令人满意。因此,如果要在实际场景应用的话,必须使用高质量的SQL问答语料进行微调训练,或借助检索增强生成(RAG)的技术,来提升准确率。


Vanna是一个开源项目,提供了一种基于RAG的NL2SQL应用框架。


在发送提问给大模型时,Vanna先检索相关的知识库,如库表结构、文档、准确的问答语料等,作为上下文(Context),一起发送给大模型,以期生成准确的SQL语句。架构流程如下图。


来源:https://vanna.ai/docs/


这套框架可以在我们的笔记本电脑上安装使用。Vanna官网给出了可选择不同组件的个性化安装说明,包括选择:大模型、关系型数据库、向量数据库和前端应用



 2 

如何安装和使用Vanna


此前,我在笔记本电脑上已经安装了Ollama,并且下载了代码能力较强的DeepSeek-Coder 7B模型。


关系型数据库我选择默认的SQLite,向量数据库选择Chroma,并使用Vanna自带的基于Flask框架开发的前端应用。


可参考Vanna给出的相应的说明:

https://vanna.ai/docs/sqlite-ollama-chromadb/


第一步,安装Vanna及Chroma向量数据库。


pip install 'vanna[chromadb]'


第二步,创建demo.py,编写以下代码。


# 使用SQLite,Ollama和ChromaDB的方案
# 配置Vannafrom vanna.ollama import Ollamafrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore
class MyVanna(ChromaDB_VectorStore, Ollama):def __init__(self, config=None):ChromaDB_VectorStore.__init__(self, config=config)Ollama.__init__(self, config=config)
vn = MyVanna(config={'model': 'deepseek-coder:6.7b'})
# 创建SQlLite数据库连接,使用Vanna提供的样例数据vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')
# 用数据表结构DDL训练,只需训练一次df_ddl = vn.run_sql("SELECT type, sql FROM sqlite_master WHERE sql is not null")
for ddl in df_ddl['sql'].to_list():vn.train(ddl=ddl)# 运行前端Flask Web应用from vanna.flask import VannaFlaskAppapp = VannaFlaskApp(vn)app.run()


第三步,运行demo.py,打开网址:http://localhost:8084,即可与大模型对话测试SQL生成效果。



Vanna在生成SQL语句之后,可以立即执行,从数据库查询到相应的数据,生成DataFrame,调用Plotly组件生成可视化图表。

系统还提供反馈机制,询问生成的SQL语句是否准确,如果用户标记为准确,则加入到训练数据(知识库)中。


 3 

SQL生成准确率如何


采用RAG辅助生成SQL,准确性到底怎么样呢?


Vanna在官网发布的白皮书《How to get high SQL accuracy rates using AI》,给出了以下实验结果。


来源:https://vanna.ai/blog/ai-sql-accuracy.html


以效果最好的大模型GPT4为例:

  • 若仅使用数据表结构(schema),准确率只有10%

  • 若增加3条样例查询,准确率提升到74%

  • 若提供完整的上下文信息,包括库表结构、文档、经验证准确的问答语料等,准确率可达到88%



我在测试中使用的是Vanna自带的样例数据:Chinook.sqlite。在笔记本电脑上,我发送了一些简单的问题,可以生成准确的SQL,并画出图表。说明Vanna可以跑起来,还是比较令人振奋的。


但是,如果替换为此前ChatGLM金融大模型挑战赛的上市公司数据集,再进行测试,我发现系统不能生成准确的SQL语句,甚至基本的字段都没找对。


 4 

有哪些改进方向


我们要想生成准确的SQL语句,必须给大模型提供足够的相关的上下文信息。


因此,构建相关的训练数据(知识库),将成为Vanna能否实用的关键。


我认为可以在以下三个方向,进行改进。

  • 在测试中,知识库只包含数据表结构(DDL),缺少充足的训练数据,尤其是人工检验准确的问答语料。

  • 如果能先判断哪个数据库、数据表、哪些字段获取数据,并提示给大模型,这样生成的准确率将会提升

  • 用户提问通常口语化、多样化、个性化,可以先准确识别用户的意图,进行完善补充规范后,再发送给大模型。


我们通常测试的都是整理过的样例或测试数据集。然而,企业内部的数据库与数据仓库,有成百上千张表,关系非常复杂,数据库表结构、字段命名也通常不太规范。


鉴于企业数据和场景的复杂性,在商业化落地时,如果仅使用Vanna提供的RAG框架,即使提供了较好的知识库,可能还不足以支撑。


这就需要我们针对具体应用场景,构建成千上万条训练语料,对模型进行增量预训练和微调,保证用户有良好的使用体验。


但是,构建知识库、做预训练和微调,总体成本不小。


所以,如果企业的应用场景,没有大量用户使用,频次也不高的话,那么投入产出比很低,建议采用其他方式来满足需求。


53AI,大模型落地应用首选服务商

定位:开箱即用的大模型落地应用平台

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

年轻人!来一起搞AI吗?

如果你看见AI对商业世界的变革,欢迎来和我们一起探索~

岗位:销售经理

查看详情

岗位:项目经理

查看详情

岗位:产品经理

查看详情

岗位:测试工程师

查看详情

联系我们

售前咨询
186 6662 7370
产品演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询