ModaHub魔搭社区:如何基于向量数据库+LLM(大语言模型),打造更懂你的企业专属Chatbot?

news2024/11/15 21:10:08

目录

1、为什么Chatbot需要大语言模型+向量数据库?

2、什么是向量数据库?

3、LLM大语言模型+ADB-PG:打造企业专属Chatbot

4、ADB-PG:内置向量检索+全文检索的一站式企业知识数据库

5、总结


1、为什么Chatbot需要大语言模型+向量数据库?

这个春天,最让人震感的科技产品莫过于ChatGPT的横空出世,通过大语言模型(LLM)让人们看到了生成式AI能实现到和人类语言高度相仿的语言表达能力,AI不再遥不可及而已经可以走进人类的工作和生活,这使得沉寂一段时间的AI领域重新焕发了能量,无数的从业者正趋之若鹜地投身于下一个改变时代的机会;据不完全统计,在短短的4个月时间内,美国已经完成了超4000笔的生成式AI的行业融资。生成式AI已经成为了资本和企业都无法忽视的下一代的技术密码,而其对于底层的基础设施能力提供了更高的要求。

大模型能够回答较为普世的问题,但是若要服务于垂直专业领域,会存在知识深度和时效性不足的问题,那么企业如何抓住机会并构建垂直领域服务?目前有两种模式,第一种是基于大模型之上做垂直领域模型的Fine Tune,这个综合投入成本较大,更新的频率也较低,并不适用于所有的企业;第二种就是在向量数据库中构建企业自有的知识资产,通过大模型 +向量数据库来搭建垂直领域的深度服务,本质是使用数据库进行提示工程(Prompt Engineering)。以法律行业为例,基于垂直类目的法律条文和判例,企业可以构建垂直领域的法律科技服务。如法律科技公司Harvey,正在构建“律师的副驾驶”(Copilot for Lawyer)以提高法律条文的起草和研究服务。将企业知识库文档和实时信息通过向量特征提取然后存储到向量数据库,结合LLM大语言模型可以让Chatbot(问答机器人)的回答更具专业性和时效性,构建企业专属Chatbot。

如何基于大语言模型 +阿里云AnalyticDB for PostgreSQL(以下简称ADB-PG,内置向量数据库能力)让Chatbot更好地回答时事问题?欢迎移步“阿里云瑶池数据库”视频号观看演示Demo。

本文接下来将重点介绍基于大语言模型(LLM)+向量数据库打造企业专属Chatbot的原理和流程,以及ADB-PG构建该场景的核心能力。

2、什么是向量数据库?

在现实世界中,绝大多数的数据都是以非结构化数据的形式存在的,如图片,音频,视频,文本等。这些非结构化的数据随着智慧城市,短视频,商品个性化推荐,视觉商品搜索等应用的出现而爆发式增长。为了能够处理这些非结构化的数据,我们通常会使用人工智能技术提取这些非结构化数据的特征,并将其转化为特征向量,再对这些特征向量进行分析和检索以实现对非结构化数据的处理。因此,我们把这种能存储,分析和检索特征向量的数据库称之为向量数据库。

向量数据库对于特征向量的快速检索,一般会采用构建向量索引的技术手段,我们通常说的向量索引都属于ANNS(Approximate Nearest Neighbors Search,近似最近邻搜索),它的核心思想是不再局限于只返回最精确的结果项,而是仅搜索可能是近邻的数据项,也就是通过牺牲可接受范围内的一点精确度来换取检索效率的提高。这也是向量数据库与传统数据库最大的差别。

为了将ANNS向量索引更加方便的应用到实际的生产环境中,目前业界主要有两种实践方式。一种是单独将ANNS向量索引服务化,以提供向量索引创建和检索的能力,从而形成一种专有的向量数据库;另一种是将ANNS向量索引融合到传统结构化数据库中,形成一种具有向量检索功能的DBMS。在实际的业务场景中,专有的向量数据库往往都需要和其他传统数据库配合起来一起使用,这样会造成一些比较常见的问题,如数据冗余、数据迁移过多、数据一致性问题等,与真正的DBMS相比,专有的向量数据库需要额外的专业人员维护、额外的成本,以及非常有限的查询语言能力、可编程性、可扩展性和工具集成。

而融合了向量检索功能的DBMS则不同,它首先是一个非常完备的现代数据库平台,能满足应用程序开发人员的数据库功能需求;然后它集成的向量检索能力一样也可以实现专有的向量数据库的功能,并且使向量存储和检索继承了DBMS的优秀能力,如易用性(直接使用SQL的方式处理向量)、事务、高可用性、高可扩展性等等。

本文介绍的ADB-PG即是具有向量检索功能的DBMS,在包含向量检索功能的同时,还具备一站式的数据库能力。在介绍ADB-PG的具体能力之前,我们先来看一下Demo视频中Chatbot的创建流程和相关原理。

3、LLM大语言模型+ADB-PG:打造企业专属Chatbot

案例-本地知识问答系统

对于前面Demo视频结合大语言模型LLM和ADB-PG进行时事新闻点评解答的例子,让LLM回答“通义千问是什么”。可以看到,如果我们让LLM直接回答,得到的答案没有意义,因为LLM的训练数据集里并不包含相关的内容。而当我们使用向量数据库作为本地知识存储,让LLM自动提取相关的知识之后,其正确地回答了“通义千问是什么”。

回答“通义千问是什么”

同样地,这种方式可以应用于处理文档,PDF,邮件,网络资讯等等尚未被LLM训练数据集覆盖到的内容。比如:

1.结合最新的航班信息和最新的网红打卡地点等旅游攻略资源,打造旅游助手。比如回答下周最适合去哪里旅游,如何最经济实惠的问题。

2.体育赛事点评,时事热点新闻点评,总结。今天谁是NBA比赛的MVP。

3.教育行业,最新的教育热点解读,比如,告诉我什么是AIGC,什么是Stable Diffusion以及如何使用等等。

4.金融领域,快速分析各行业领域金融财报,打造金融咨询助手。

5.专业领域的客服机器人...

实现原理

本地知识问答系统(Local QA System)主要是通过结合了大语言模型的推理能力和向量数据库的存储和检索能力。来实现通过向量检索到最相关的语义片段,然后让大语言模型结合相关片段上下文来进行正确的推理得到结论。在这个过程中主要有两个流程:

a.后端数据处理和存储流程

b.前端问答流程

同时其底层主要依赖两个模块:

1.基于大语言模型的推理模块

2.基于向量数据库的向量数据管理模块

Local QA system on LLM & VectorStore原理

后端数据处理和存储流程

上图黑色的部分为后端的数据处理流程,主要是将我们的原始数据求解embedding,并和原始数据一起存入到向量数据库ADB-PG中。这里你只需要关注上图的蓝色虚线框部分。黑色的处理模块和ADB-PG向量数据库。

Step1:先将原始文档中的文本内容全部提取出来。然后根据语义切块,切成多个chunk,可以理解为可以完整表达一段意思的文本段落。在这个过程中还可以额外做一些元数据抽取,敏感信息检测等行为。

Step2:将这些Chunk都丢给embedding模型,来求取这些chunk的embedding。

Step3:将embedding和原始chunk一起存入到向量数据库中。

前端问答流程

在这个过程中主要分为三个部分:1.问题提炼部分;2.向量检索提取最相关知识;3.推理求解部分。在这里我们需要关注橙色部分。单单说原理可能比较晦涩,我们还是用上面的例子来说明。

Local QA system on LLM & VectorStore

Part1问题提炼

这个部分是可选的,之所以存在是因为有些问题是需要依赖于上下文的。因为用户问的新问题可能没办法让LLM理解这个用户的意图。

比如用户的新问题是“它能做什么”。LLM并不知道它指的是谁,需要结合之前的聊天历史,比如“通义千问是什么”来推理出用户需要求解答案的独立问题“通义千问能做什么”。LLM没法正确回答“它有什么用”这样的模糊问题,但是能正确回答“通义千问有什么用”这样的独立问题。如果你的问题本身就是独立的,则不需要这个部分。

得到独立问题后,我们可以基于这个独立问题,来求取这个独立问题的embedding。然后去向量数据库中搜索最相似的向量,找到最相关的内容。这个行为在Part2 Retrieval Plugin的功能中。

Part2向量检索

独立问题求取embedding这个功能会在text2vec模型中进行。在获得embedding之后就可以通过这个embedding来搜索已经事先存储在向量数据库中的数据了。比如我们已经在ADB-PG中存储了下面内容。我们就可以通过求取的向量来获得最相近的内容或者知识,比如第一条和第三条。通义千问是...,通义千问可以帮助我们xxx。

Part3推理求解

在获得最相关的知识之后,我们就可以就可以让LLM基于最相关的知识和独立问题来进行求解推理,得到最终的答案了。这里就是结合“通义千问是...”,“通义千问可以帮助我们xxx”等等最有效的信息来回答“通义千问有什么用”这个问题了。最终让GPT的推理求解大致是这样:

4、ADB-PG:内置向量检索+全文检索的一站式企业知识数据库

为什么ADB-PG适合作为Chatbot的知识数据库?ADB-PG是一款具备大规模并行处理能力的云原生数据仓库。它支持行存储和列存储模式,既可以提供高性能的离线数据处理,也可以支持高并发的海量数据在线分析查询。因此我们可以说ADB-PG是一个支持分布式事务、混合负载的数据仓库平台,同时也支持处理多种非结构化和半结构化数据源。如通过向量检索插件实现了对图片、语言、视频、文本等非结构化数据的高性能向量检索分析,对JSON等半结构化数据的全文检索分析。

因此在AIGC场景下,ADB-PG既可以作为一款向量数据库满足其对向量存储和检索的需求,也可以满足其他结构化数据的存储和查询,同时也可以提供全文检索的能力,为AIGC场景下的业务应用提供一站式的解决方案。下面我们将对ADB-PG的向量检索、融合检索和全文检索这三方面的能力进行详细介绍。

ADB-PG向量检索和融合检索功能于2020年首次在公有云上线,目前已经在人脸识别领域得到了非常广泛的应用。ADB-PG的向量数据库继承自数据仓库平台,因此它几乎拥有DBMS的所有好处,如ANSISQL、ACID事务、高可用性、故障恢复、时间点恢复、可编程性、可扩展性等。同时它支持了点积距离、汉明距离和欧氏距离的向量和向量的相似度搜索。这些功能目前在人脸识别、商品识别和基于文本的语义搜索中得到了广泛应用。随着AIGC的爆炸式增长,这些功能为基于文本的Chatbot奠定了坚实的基础。另外,ADB-PG向量检索引擎也使用Intel SIMD指令极其有效地实现了向量相似性匹配。

下面我们用一个具体的例子来说明ADB-PG的向量检索和融合检索如何使用。假设有一个文本知识库,它是将一批文章分割成chunk再转换为embedding向量后入库的,其中chunks表包含以下字段:

那么对应的建表DDL如下:

为了对向量检索进行加速,我们还需要建立一个向量索引:

同时为了对向量结构化融合查询提供加速,我们还需要为常用的结构化列建立索引:

在进行数据插入的时候,我们可以直接使用SQL中的insert语法:

在这个例子中,如果我们要通过文本搜索它的来源文章,那么我们就可以直接通过向量检索进行查找,具体SQL如下:

同样,如果我们的需求是查找最近一个月以内的某个文本的来源文章。那么我们就可以直接通过融合检索进行查找,具体SQL如下:

在看完上面的例子之后,我们可以很清楚地发现,在ADB-PG中使用向量检索和融合检索就跟使用传统数据库一样方便,没有任何的学习门槛。同时,我们对向量检索也有针对性地做了很多优化,如向量数据压缩、向量索引并行构建、向量多分区并行检索等等,这里不再详述。

ADB-PG同时也具有丰富的全文检索功能,支持复杂组合条件、结果排名等检索能力;另外对于中文数据集,ADB-PG也支持中文分词功能,能够高效、自定义地对中文文本加工分词;同时ADB-PG也支持使用索引加速全文检索分析性能。这些能力同样也可以在AIGC业务场景下得到充分的使用,如业务可以对知识库文档结合上述向量检索和全文检索能力进行双路召回。

知识数据库搜索部分包括传统的关键词全文检索和向量特征检索,关键词全文检索保证查询的精准性,向量特征检索提供泛化性和语义匹配,除字面匹配之外召回和语义匹配的知识,降低无结果率,为大模型提供更加丰富的上下文,有利于大语言模型进行总结归纳。

5、总结

结合本文前面所提到的内容,如果把满腹经纶的Chatbot比喻为人类,那么大语言模型可以看成是Chatbot在大学毕业前从所有书本和各领域公开资料所获得的知识和学习推理能力。所以基于大语言模型,Chatbot能够回答截止到其毕业前相关的问题,但如果问题涉及到特定专业领域(相关资料为企业组织专有,非公开)或者是新出现的物种概念(大学毕业时尚未诞生),仅靠在学校的知识所得(对应预训练的大语言模型)则无法从容应对,需要具备毕业后持续获得新知识的渠道(如工作相关专业学习资料库),结合本身的学习推理能力,来做出专业应对。

同样的Chatbot需要结合大语言模型的学习推理能力,和像ADB-PG这样包含向量检索和全文检索能力的一站式数据库(存储了企业组织专有的以及最新的知识文档和向量特征),在应对问题时具备基于该数据库中的知识内容来提供更专业更具时效性的回答。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/697623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6.28作业

作业1 结构体不能被继承,类可以被继承结构体默认的都是公共,类默认是私有的 转载【结构体和类的区别】 结构体是值类型,类是引用类型 结构体存在栈中,类存在堆中 结构体成员不能使用protected访问修饰符,而类可以 结…

vsCode 运行 报错信息 yarn : 无法加载文件 C:\Program Files\nodejs\yarn.ps1

检索说是 PowerShell 执行策略,默认设置是Restricted不去加载配置文件或运行脚本。需要去做相应的变更, 修改配置为 RemoteSigned 管理员身份打开 PowerShell,执行命令,修改PowerShell 执行策略 set-ExecutionPolicy RemoteSigne…

2023.6.28

类和结构体区别&#xff1a; 1&#xff0c;类可以进行封装&#xff08;有访问权限等&#xff09;&#xff0c;结构体无&#xff1b; 2&#xff0c;类有&#xff1a;封装&#xff0c;继承&#xff0c;多态三大特征&#xff0c;结构体只有变量和函数。 #include <iostream&g…

面试题小计(1)

Https加密过程、与三次握手 三次握手是传输层的概念&#xff0c;HTTPS通常是 SSL HTTP 的简称&#xff0c;目前使用的 HTTP/HTTPS 协议是基于 TCP 协议之上的&#xff0c;因此也需要三次握手。要在 TCP 三次握手建立链接之后&#xff0c;才会进行 SSL 握手的过程&#xff08;…

Linux在线升级JDK版本(不用去官网下载安装包)

Linux在线升级JDK版本 ​ 只要3个命令 确保系统已连接到互联网&#xff1a;确保你的 Linux 系统已连接到互联网&#xff0c;以便下载和安装新的 JDK 版本。 更新软件包管理器&#xff1a;运行以下命令来更新系统的软件包管理器&#xff08;在不同的 Linux 发行版中&#xff0…

(3)深度学习学习笔记-简单线性模型

文章目录 一、线性模型二、实例1.pytorch求导功能2.简单线性模型&#xff08;人工数据集&#xff09; 来源 一、线性模型 一个简单模型&#xff1a;假设一个房子的价格由卧室、卫生间、居住面积决定&#xff0c;用x1&#xff0c;x2&#xff0c;x3表示。 那么房价y就可以认为yw…

大数据分析与机器学习的结合:实现智能决策

章节一&#xff1a;引言 在当今数字化时代&#xff0c;大数据分析和机器学习已经成为推动技术创新和业务发展的关键要素。大数据的快速增长和复杂性使得传统的数据处理方法变得不再有效。而机器学习作为一种自动化的数据分析方法&#xff0c;能够从海量数据中挖掘出有价值的信…

QSS样式设置及语法规则

QSS&#xff08;Qt Style Sheets&#xff09;是Qt的一个功能强大的样式表语言。它类似于CSS&#xff08;Cascading Style Sheets&#xff09;&#xff0c;可以用于定义和控制应用程序的外观和样式。QSS可以应用于Qt部件&#xff08;Widgets&#xff09;和绘制元素&#xff0c;以…

集合专题----Map篇

1、Map 接口和常用方法 &#xff08;1&#xff09;Map 接口实现类的特点 ① Map与Collection并列存在&#xff08;即平行关系&#xff09;。Map用于保存具有映射关系的数据&#xff1a;Key-Value&#xff1b; ② Map 中的 key 和 value 可以是任何引用类型的数据&#xff0c;…

先平移再旋转和先旋转再平移的区别

对于一个刚体&#xff0c;以汽车为例&#xff0c;先旋转再平移和先平移再旋转有没有区别要看这个平移旋转是以什么坐标系为基准 如果平移和旋转都以小车坐标系为基准&#xff0c;二者是有区别的 如果平移旋转以世界坐标系为基准&#xff0c;二者是没有区别的 看图就明白了 所…

v8-tc39-ecma262:concat,不只是合并数组

如上图&#xff0c;解释如下&#xff1a; 如果是对象o&#xff0c;转换为对象新建数组A设n0,用于最后赋值给A&#xff0c;确保A的长度正确预先把值设置到items(这里不知何意&#xff1f;)循环items&#xff0c;设置元素为E E是否可展开如果可展开 有len下标&#xff0c;则获取…

LLM - 第2版 GLM 中文对话模型 ChatGLM2-6B 服务配置 (2)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131445696 ChatGLM-6B v1 工程&#xff1a;基于 ChatGLM-6B 模型搭建 ChatGPT 中文在线聊天 (1)ChatGLM2-6B v2 工程&#xff1a;第2版 …

react umi中使用svg线上图片不加载问题

参考链接&#xff1a; https://www.jianshu.com/p/c927122a6e82 前言&#xff1a; 在react项目中&#xff0c;我们本地通过img标签的src使用svg图片是可以加载的&#xff0c;但是发布到线上图片加载不出来。 import stopImg from /images/stop.svg; <img src{stopImg }/&…

Transformer时间序列:PatchTST引领时间序列预测进

Transformer时间序列&#xff1a;PatchTST引领时间序列预测进 引言为什么transformer框架可以应用到时间序列呢统计学模型深度学习模型 PatchTSTPatchTST模型架构原理。通道独立性Patchingpatching的优点Transformer编码器 利用表示学习改进PatchTST使用PatchTST模型进行预测初…

深入理解 Golang: 聚合、引用和接口类型的底层数据结构

Go 中有基础类型、聚合类型、引用类型和接口类型。基础类型包括整数、浮点数、布尔值、字符串&#xff1b;聚合类型包括数组、结构体&#xff1b;引用类型包括指针、切片、map、function、channel。在本文中&#xff0c;介绍部分聚合类型、引用类型和接口类型的底层表示及原理。…

如何在Microsoft Excel中快速筛选数据

你通常如何在 Excel 中进行筛选?在大多数情况下,通过使用自动筛选,以及在更复杂的场景中使用高级过滤器。 使用自动筛选或 Excel 中的内置比较运算符(如“大于”和“前10项”)来显示所需数据并隐藏其余数据。筛选单元格或表范围中的数据后,可以重新应用筛选器以获取最新…

数据结构与算法基础-学习-25-图之MST(最小代价生成树)之Prim(普利姆)算法

一、生成树概念 1、所有顶点均由边连接在一起&#xff0c;但不存在回路的图。 2、一个图可以有许多棵不同的生成树。 二、生成树特点 1、生成树的顶点个数与图的顶点个数相同。 2、生成树是图的极小连通子图&#xff0c;去掉一条边则非连通。 3、一个有n个顶点的连通图的生…

stm32f103c8t6移植U8g2

U8g2代码下载&#xff1a; https://github.com/olikraus/u8g2 1&#xff0c;准备一个正常运行的KEIL5 MDK模板 2&#xff0c;下载u8g2的源码和 u8g2的STM32实例模板 源码: https://github.com/olikraus/u8g2 STM32实例模板: https://github.com/nikola-v/u8g2_template_stm32f…

100天精通Golang(基础入门篇)——第11天:深入解析Go语言中的切片(Slice)及常用函数应用

&#x1f337; 博主 libin9iOak带您 Go to Golang Language.✨ &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &#x1f30a; 《I…

期望最大化注意力网络 EMANet

论文&#xff1a;Expectation-Maximization Attention Networks for Semantic Segmentation Github&#xff1a;https://github.com/XiaLiPKU/EMANet ICCV2019 oral 论文提出的期望最大化注意力机制Expectation- Maximization Attention (EMA)&#xff0c;摒弃了在全图上计算注…