分享好友 最新动态首页 最新动态分类 切换频道
开源可本地部署的AI方案:同数据库进行无障碍中文问答
2024-12-27 23:06

这篇文章可能有些啰嗦,将会从5行代码起家,一步步讲到500行。也会以官方在线demo入手,直到改造成完全可本地化部署的项目。要实现的功能就是

关键词:ChatGLM3-6b、Vanna、ChromaDB、MySQL。

我们知道,自古以来,数据库就是用来存储数据的。但是想要查数据,得找个懂数据库语言的程序员进行操作。数据库语言也叫“SQL语句”。比如,要查询“有没有一个叫张三的学生”,那么SQL语句就是:“SELECT * FROM students WHERE name = ‘张三’;”。而且,你得知道数据存在哪个库里的哪张表中。很显然,这种数据库语言,并不是每个人都能掌握的。

但是(转折来啦,大语言模型的出现,让这件事变简单了。大语言模型即懂你也懂SQL,因此它可以作为一个媒介。

毫无悬念,这段SQL是可用的。

即便如此,这些结果我们人类看着也挺费劲。于是,可以再次借助大语言模型,将表格数据转化为我们看得懂的语言。

于是乎,这个对话过程就走通了。整体流程大概是下面这个样子

上面只是理论知识,那在项目实践上,该如何写代码呢

在具体落地时,会面临怎么管理大语言模型的问题。比如,怎么告诉它我提问题了你该这么这么回答。怎么衔接大模型生成的SQL语句,又怎么去连接数据库查询结果。拿到结果后,又怎么让大模型给出通俗的结论。上面图中的智能系统,那些个①号坑位、②号坑位都需要有流程来管理并通信。

这一切的一切,你可以来写。但是,有比你更聪明的人已经写完了,而且还开源了。合适你就用,不合适咱就改。

vanna的官网是:vanna.ai,开源地址是:github.com/vanna-ai/vanna。

一般情况下,官网的示例会体现出两大特点:使用简单、功能强大。其目的就是告诉你它能干啥,以此吸引你使用。至于你想真正用上它,那是先爱上它再付出一番努力的后续。

注意:api_key需要从vanna.ai官网申请,免费点击一下就行。

运行这5行代码,会启动一个服务,生成一个网站,默认是 localhost:8084。访问这个地址,就可以与数据库对话了

效果不错。

询问“最受欢迎的3位艺术家的销量”,它生成了查询语句,列出了查询结果,还画出了柱形图。最后来了一个总结:根据销量数据,最受欢迎的3位艺术家分别是Iron
Maiden(销量:140)、U2(销量:107)和Metallica(销量:91)。

等会儿……哪儿跟哪儿,怎么它就艺术家了,那些销量哪来的?数据库又在哪里

这是个官方的例子,只求最简单,宣传5行代码搞定。它害怕让你自己部署一套服务器,因此默认了一个sqlite数据库。这个数据库可下载,地址就是代码 vn.connect_to_sqlite 连接的那个 vanna.ai/Chinook.sqlite 。

我下载这个sqlite数据库,执行它生成的语句,确实如此。

那它这个demo就不是故弄玄虚,其实是真的查询数据库了。只不过数据库是它提供的。

不是说它对接了大模型吗?代码里怎么没有看到

在这个例子中,它把大模型也封装好了。它默认采用的GPT 3.5模型。

“我肯定要用自己的数据库!”,这是客户老孙在大山深处喊出来的。

上面我们说了,vanna是管理流程的,更换数据库对它来说,只不过是将坑位换一个参展商。

它支持很多种数据库,我们拿最常用的MySQL搞一搞。

我有这么一个数据库,这里面存储的是我写的文章,就相当于我的私人文库。

这个数据库很简单,就仨表,一个存文章信息,一个存文章评论信息,一个存文章的类型信息。

那我们就用自己的数据库替换一下。工具要为我所用才是真的有用。

关键点就是连接数据库的那一段代码

vn.connect_to_mysql(host=‘localhost’, dbname=‘article_db’,
user=‘root’, password=‘123’, port=3306)

这句代码做了指定数据库信息,它的地址,端口,叫啥名,用户名密码是多少。

连接上了,你说话就好使了吗?肯定不是!。当然它也足够智能,可以自己去读取库里的信息。

下面这句话就可以让它自己读取,然后自己理解并训练。

 

但是,你家数据库设计的规范吗?你的字段名称起的标准吗?各类外键设置的是否正确?即便很规范,名字不是“mz”是“name”。但是特殊行业也会有自己的特色,比如“人情世故”就很难翻译成英文,还是叫“renqin_shigu”更便于理解。

这时候我们就需要告诉大模型我们的人情世故,要让它入乡随俗。

我们可以将ddl(数据描述语言)传给大模型,让它了解各个字段的含义。

 

有了上面的训练,当我们问有哪些文章类型时,大模型就会知道从article_types表中去查询type_name字段。

除此之外,我们还可以约定一些个性化的需求。

 

一般来说,大众的认知,数值0表示否定,1表示肯定。但是我们可以通过documentation来重新改变通用模型的认知。告诉LLM在我这儿和外界是相反的,以此来符合自己的场景。

如果上面还不行。那么还有绝招。

 

即便你用文言文的方式询问数据库,只要你告诉大模型你的风格是这样的,那么它也会成全你。反正最终就是生成SQL呗。用外语问都行,更何况是文言文了。但是前提是你需要打个样。因为,在此之前没人这么干过。

好了,换完了数据库,下面开始问答。

这就是你的私人数据助手,到这里其实已经挺有意思了。

请注意,上面的vanna已经本地化安装,MySQL也是私有库,但是大模型用的还是人家的GPT 3.5。从某种意义上来说,如果GPT服务挂了,那么你的系统就崩了。这种感觉肯定不好。我们都希望自己能完全控制,不愿受制于人。最好只有自己被崩了,才允许自己的系统崩掉。

最后凌空一脚,我们把大模型也本地化得了

官方推荐的是vanna内嵌的openAI。这样最方便实现,也有利于它卖货。不过它也支持其他大厂的LLM,比如谷歌的Gemini,再比如所有符合OpenAI标准API的LLM,以及其他LLM。

我们先搞一个在线版本的,再搞一个本地版本的。

如果接入一个标准的OpenAI协议的LLM,该怎么搞呢?很简单

 

区别看出来了吗?原来是VannaDefault,这里面人家都封装好了,内置LLM。

 

但是现在你不想用它的,那需要你新建一个类指定一下用哪个。具体指定谁家的大模型,得看你手里的资源。通过MyVanna实例化出vn之后,后面连接数据库啥的都一样一样的。这就是用框架管理的好处。

除了符合这种OpenAI标准的大模型之外,其他LLM可以吗?当然可以。比如智普出的GLM4,也可以作为Vanna流程中的LLM使用。

 
 

大模型的选型会对效果产生怎样的影响呢

我们看同样的问题 “最近10篇文章的阅读量趋势” 在不同大模型中的表现。

在GLM4中是这样的

在GPT 3.5中是这样的

他们生成的SQL查询语句都是一样的,因此查询结果也是一样的。但是,他们后续对结果的分析,以及绘图和总结是不同的。

有细心的朋友发现了,怎么你一直没提代码里面的那个ChromaDB_VectorStore,chroma是个什么东西

它是一个词向量数据库。Chroma词向量数据库是一个用于自然语言处理和机器学习的工具,它主要用于词嵌入,可以将单词转换为向量表示,能捕获单词之间的语义和语法关系,使得计算机能够更好地理解和处理自然语言。

总而言之,大语言模型离不开词向量的支持。vanna框架考虑到不让用户再去搭建复杂的词向量数据库,因此提供了线上默认版本。但是,咱们非要本地化部署,那么只能再安装一套词向量的数据库在本地。chroma只是其中一个选择。这也导致,我们训练完成之后,根目录下会产生一些数据文件。这里面存储的就是词向量相关的信息。

你要是不想将词向量数据放在根目录(有人嫌乱,可以指定chroma的存储路径,在构建自定义Vanna类时传入config的path路径即可。

 

咱不是要本地化大模型吗?你怎么还不讲

在线版本的LLM我们已经可以替换了,本地的还会远吗

我们选用清华大学的ChatGLM3做本地化部署。干完了这一票,整个数据库问答系统就完全本地化了。

假设你已经搭建好了一套ChatGLM3环境。因为搭建环境部署程序这类教程太多了,我就不多说了。下载项目 github.com/THUDM/ChatGLM3 ,然后最好去HuggingFace下载权重模型和bge-m3。这样会更快,下载完了保存到本地。

找到ChatGLM3下的openai_api_demo文件下的api_server.py文件。这个文件是API服务,启动了它就相当于具备了一个任意基于ChatGPT应用的后端。

这不是我说的,是人家官方文档说的。

调用python api_server.py就可以启动它。启动了它,就相当于你本地127.0.0.1有了一个OpenAI大模型。

于是,Vanna替换为本地LLM就像下面这么简单。

 

建立了vn之后,随后的连接数据库、训练数据、启动服务,代码都是一样的。这里只是一个坑位的变化。

至此,这套可以对话数据库的智能系统就建立好了。你以为这样就结束了吗

你觉得有自己的智能数据助手,万事大吉了吗?可以不用加班了?呵呵,被短暂的愉悦冲昏了头脑吧

你没有界面啊,你甘心用Vanna提供的这套对话页面吗

虽然它提供了很多配置

 

但是这些依然会很难符合你的需求。听我说,我们可以调用它的接口,自己来实现界面。

通过查询VannaFlaskApp的接口,我们可以获得业务流程的处理步骤。

第1步,调用 api/v0/generate_sql。

此步收到用户的提问文本,调用大模型接口生成sql语句。这个接口中,经过训练的大模型会将自然语言转为sql语句。转换成功后还会返回一个业务id。这个id一直绑定后续流程直至任务结束。

第2步,调用 api/v0/run_sql。

第3步,如果需要展示图表,那么调用
api/v0/generate_plotly_figure 生成绘制数据,绘制并保存为图片。

第4步,根据以上数据,将结果交给大模型进行总结。,最终获得一条可阅读的结论。调用的接口是 api/v0/generate_summary 。

接口全都有了。从问题到数据,再到趋势图表,最后有总结答案。就看你想展示什么,自己调用就可以了。

对于带图表的情况,也可以正常展示。

虽然界面看着很low,但是这确是一大进步(从里到外全是自主产权)。很多有钱的大厂,找个UI包装包装,就开始招商了。

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么
  • 大模型是怎样获得「智能」的
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【】
最新文章
云手机游戏挂机安全性哪家高?游戏挂机云手机安全分析
在当今的游戏世界中,成为了许多玩家追求便捷和高效的方式。无论是想要在睡觉时让角色持续升级,还是在忙碌时不错过游戏中的资源获取,游戏挂机都有着巨大的吸引力。然而,这其中也隐藏着诸多风险。一方面,游戏挂机可能违反游戏的使用条款
【大悟县中心】大悟县宣化店镇跨竹竿河人行景观桥工程项目大悟县宣化店镇跨竹竿河人行景观桥工程项目(HBDW-202412GL-012001001)招标公告
大悟县宣化店镇跨竹竿河人行景观桥工程项目大悟县宣化店镇跨竹竿河人行景观桥工程项目(HBDW-202412GL-012001001)招标公告招标编号:HBDW-202412GL-0120010011.招标条件本招标项目大悟县宣化店镇跨竹竿河人行景观桥工程项目已由大悟县发展和
好用的WordPress聊天机器人插件推荐
集成聊天机器人是提升客户服务的有效方式,它可以帮助更高效地与客户互动并提供卓越的用户体验。WordPress聊天机器人插件是一个软件扩展或附加组件,可让将聊天机器人或人工智能对话智能集成到WordPress网站中。在WordPress网站上使用WordP
长连接转短链接
长连接(长链接)转短链接的方法多种多样,以下是一些常见且实用的方法:1. 使用第三方短链接服务目前市场上有很多第三方短链接服务,如Bitly、TinyURL、爱短链等。这些服务通常提供简单易用的界面,用户只需将长链接粘贴到指定的输入框中
线上推广的渠道和方法(线上推广技巧解析)
引言:随着数字化时代的到来,线上推广已经成为当今商业发展的重要一环。各种推广方法层出不穷,如何在竞争激烈的市场中脱颖而出,具有许多挑战性。本文将从4个方面出发,详细阐述线上推广技巧,为推广者提供有益的指导。一、社交媒体推广1
怎么添加百度指数,百度指数的基本功能有哪些
创新互联建站导读:关于百度指数的问题,本文重点介绍了怎么添加百度指数,以及百度指数的基本功能有哪些。总之添加关键词的百度指数是很简单的,大家可以参考下本文介绍的流程,即便是SEO新手也能轻松搞定。至于百度指数的功能方面,虽然
樱花热水器维修服务热线号码全天客服电话《2024汇总》 人工智能大模型产业创新发展大会在京举办 展示前沿成果
400电话:400-965-8692(点击咨询)樱花热水器各号码《今日汇总》樱花热水器各热线号码2024已更新(2024已更新)樱花热水器维修电话:(1)400-965-8692(点击咨询)(2)400-965-8692(点击咨询)樱花热水器24小时热线(1)400-965-8692(点击
斯必利药业(厦门)有限公司招聘生产车间普工,品管经理,现场品管
本网提醒: 为保障广大求职者和用人单位的合法权益,维护人才交流环境的有序健康发展,厦门市人才服务中心、厦门人力资源市场(厦门人才市场)和厦门人才网郑重提醒: 用人单位在本网站发布的信息,均须符合合法、准确、及时、完整的原则,
最佳辩手投票评选活动如何创建?投票小程序教你制作!
最佳辩手投票评选是一种在辩论活动结束后,通过一定的投票方式来确定表现最优秀辩手的评选活动。(一)评选范围和对象范围:通常是在一场辩论赛或者系列辩论赛中产生。这些辩论赛可以是学校组织的校园辩论赛,包括班级之间、年级之间或者院
英国留学专业:中英关系改善助力,国内学子最爱十大英国留学专业
前不久,英国首相与我国领导人进行了一次极为重要的电话通话。双方在通话中深入探讨了多项涉及国际合作、经济发展以及人文教育等方面的议题。此次通话,一方面为中英关系的持续深入发展奠定了坚实基础,另一方面也给留学生带来了崭新的希望
相关文章
推荐文章
发表评论
0评