RAG知识库通过检索相关信息辅助大模型完成任务,解决prompt上下文限制问题。构建私有知识库需明确场景、测试典型问题,并进行知识整理、数据清理、内容切分、向量化等步骤。提升检索准确率可通过改造知识库结构、优化检索词、选择合适的Embedding和Rerank模型实现。文章还介绍了表格处理、搜索引擎结合使用等场景的解决方案,以及向量数据库与常规数据库的协同应用。RAG相比微调更易调试,是提升大模型应用效果的重要技术。

一、构建及使用私有知识库:

私有知识库创建前,要弄清楚几件事情:

1.列举要覆盖的场景,哪些类型的用户问题,是我们打算用RAG解决的。如果不太清楚,那么就让你的产品早些上线,然后积累用户问题

2.测试每个典型问题,在prompt里塞什么样的参考资料、样例是可以有好的回答的

3.此时才是考虑,我应该如何从大量文件资料中,通过大量的处理工作,得到我需要的知识切片。处理工作很重要,有时候知识库不是切片问题,而是怎么清洗/处理数据的问题。

4.FAQ格式的问答对,往往是效果更好的选择。

5.能用问答对去覆盖的用户问题,尽量用问答对,不能收集到问答对的,再准备普通文件切片。

构建知识库主要分两大步骤:‘构建可检索的知识库’和‘模型调用知识库完成用户任务’。

1.构建可检索的知识库流程:

1)知识整理:以文件格式存储,pdf、word、ppt、excel为主。

2)数据清理及格式化:将不同格式的数据内容提取为存文本。

3)内容切分:将文本内容按段落、主题或逻辑单元切分成较小的知识片段(Chunk)。

4)向量化:将每个知识片段转化为向量表示(如OpenAI的Embedding接口)。

5)关联元数据:给每个向量关联相关元数据(如文档名称、创建时间、作者、来源等)。

6)载入向量数据库,并建立索引:向量数据库如FAISS、Pinecone、Weaviate。

7)部署集成:将向量数据库集成到AI产品流程中,生成模型搭建使用。

2.模型调用知识库完成用户任务流程:

1)System Prompt中写明哪些情况应该调用知识库。

2)模型解析用户意图,判断是否需要调用知识库。

3)将User Prompt转成向量,去向量数据库里比较相似度。

4)选择相似度高的1条或多条知识库片段,并取出知识片段原文。

5)将检索出的知识片段与原prompt合并在一起组成新的prompt给模型。

6)模型生成最终回复。

针对RAG原理,我们举一个例子‘企业办事助手’:

1.以coze平台为例,选择工作空间》资源库》新增资源按钮,选择创建知识库,弹出创建知识库窗口,选择上传信息方式,知识库名称,描述(需要认真填写,其他人引用知识库会根据描述判断知识库有什么内容),点击创建并导入弹出导入页面。

2.在导入页面选择要导入的文件,支持一次导入多个,点击‘打开’按钮即可导入,进行文件信息切片(默认自动切片),向量化,完成知识库创建。

在创建的智能体中就可以使用这个私有库。私有知识库在coze 平台中同样被视为一种工具,与插件和工作流一样,都属于模型的外部工具范畴。

二、如何提升检索准确率:

1.改造知识库:

若将知识库中的检索列设置为用户问题形式,而非大段知识内容,则检索成功率将呈指数级提升。这是因为用户的问题会通过 embedding 模型转化为向量,而当向量数据库中存储的同样是用户问题时,检索匹配的精准度会大幅提高。

如图所示,整理文档时,每个片段应包含大模型生成的可能问题+知识切片,此时只需将索引列设置为“question”列即可。

在构建知识库 RAG 时,各类文件(包括 Word、PDF、PPT、网页等)应先整理成 Excel 格式。Excel 是创建知识库的理想文件格式,有助于我们更好地组织信息。对于图片文件,可以使用多模态模型(如通义千问)进行文字描述,然后将生成的文字描述与原图一并整理到 Excel 中。

2.改造检索词:

在RAG 检索过程中,检索词也就是用户问题,它同样也叫 Query。除了知识库切片问题会影响 RAG 检索效果外,用户提问不规范或描述不清楚也可能导致检索效果不佳。因为在构建数据库时,虽然我们预想了用户可能提出的问题,但现实中用户往往不会按照我们设想的问题来提问,而且多轮对话会使情况变得更加复杂。此外,用户多样化的表达方式也会增加不少困难。

综上所述,当我们的知识库已经处理完成但检索效果仍不理想时,就需要考虑是否是检索词的问题。我们可以通过改造和优化检索词,使其更加完善,从而提升检索的成功率。

举个嘀嘀打车计费助手的例子:

业务背景:在打车服务结束时,系统将进行扣费操作,扣费前会要求乘客确认。若用户对费用提出质疑,我们需要向其解释费用的构成。

1)由于每个城市的计费方式不同,我们创建了一个知识库,详细列出了各地的计费方式。用户可使用该库查询各城市的计费信息。

2)在 coze 上创建 agent,精心编写 prompt,引入“打车计费知识库”与“百度地图”插件,按用户输入地址规划路线。当用户输入“江北国际机场到沙坪坝”时,知识库未召回相关切片(如图)。所以大模型给出的结果是大模型幻觉(一本正经胡说八道),那么为什么在知识库中没有召回到相关切片呢?

3)在调试窗口中可以看到,我们传递给知识库的检索词是‘江北国际机场到沙坪呗’,但按当前知识库中知识切片,检索词都是城市相关收费明细,所以需要先判断用户输入的地址是那个城市的,然后再去计算两个地点距离,但当前没有做城市定位,所以搜索不到检索词。

4)在此种情况下,我们面临的两种选择是:对知识库进行改造,即添加用户可能提出的问题及其对应的知识切片内容;或者对检索词进行优化。然而,当前业务环境下,我们无法对知识库进行改造。毕竟,每个城市都存在着大量的地点,要穷尽所有可能的出发地与目的地组合,并预设用户可能提出的所有问题,这在实际操作中是几乎不可能完成的任务。

鉴于此,我们只能通过对检索词进行改造来解决问题。具体的方法是将用户的需求进行拆分,然后分别完成各个子需求。在这种情况下,采用工作流的方式来进行处理是比较合适的。如图所示,我们对system prompt 进行了调整,并引入了工作流。这样一来,当输入相同的问题时,大模型便能够给出正确的结果。这种处理方式的关键点在于,通过对检索词的优化和工作流的引入,使得大模型能够更准确地理解和处理用户的问题,从而避免了知识库中相关信息无法检索到问题。

5)工作流的主要功能是执行与 System Prompt 中所定义的检索词分析及拆分步骤相匹配的操作,并最终将生成的回复发送给用户。至于工作流的具体搭建方法,将在后续文章中进行详细介绍,此处不再展开。

3.选择合适的Embedding模型和Rerank模型:

Embedding模型和Rerank模型如果不靠谱,那么就会导致后边向量检索不出结果。

Embedding模型:

1)Embedding模型是怎么训练出来的,和大语言模型有什么区别

一般而言,Embedding 模型基于 Transformer 架构,其理解语义信息的原理与 GPT 有相似之处,但 Embedding 模型的训练目标相对简单,因此其能力较 GPT 有所不及。Embedding 模型的训练目的在于:使语义相似的文本序列对应的向量尽可能相似,而语义不同的文本序列,其向量相似度则相对较低。为实现这一效果,通常需要为 Embedding 模型提供海量的训练数据,一般要有数亿条,每一条都是一个3元组数据。通过不断地向 Embedding 模型输入这些数据进行训练,最终使其具备上述能力。

三元组数据都是什么?

Anchor(锚点):就是目标,我们希望得到的向量尽可能朝着这个目标趋近。比如:秦始皇统一六国后,推行了中央集权的政治体制。

Positive(正例):和目标相似目标的例子,经过embedding模型的到的向量应该和Anchor的向量相似度很高,比如:秦朝实行了法家思想,中央政府的权力得到了加强。

Negative(负例):和目标不同目标的例子,经过embedding模型的到的向量应该和Anchor的向量相似度很低,比如:宋朝的科举制度对中国古代的教育体系产生了深远影响。

Embedding 模型的任务相对简单。训练开始前,所谓的数学向量只是二维坐标上的坐标数值。训练初期,模型并不知道如何将文本段落定位到二维坐标上的合适位置。但随着训练的不断进行,模型逐渐“开窍”,能够将不同句子放置到合理的位置,并使语义相似的句子彼此靠近。

相比之下,GPT 模型的功能更为直接:无论输入的是何种向量,只要给定一段文字输入,它便生成相应的文字输出;给它一个问题,它则提供相应的回答。

2)知识切片数量的临界点:

为何 Embedding 模型会导致知识库切片检索不精准?为何知识库切片过多,检索效果反而变差?问题的根源在于知识库切片数量过多。我们普遍认为,切片越多,业务场景的覆盖范围就越广,能够解决的问题也会随之增加。起初,当知识库中的切片数量较少时,不断增加切片确实会让 agent 在回答用户问题时表现得越来越好。然而,这一切都有一个临界点。一旦知识库的切片数量超过这个临界点,agent 的回答准确度就会停止提升,甚至出现下降的趋势。知识切片过多,可能会引入大量噪声,例如切片之间相互干扰,导致检索效果变差。

不同业务的临界点也各不相同。如果业务范围较窄,比如招聘业务,其临界点就会相对较低;相反,业务范围较宽的业务,临界点则会相对较高。

3)Embedding 模型的二次微调:

在使用他人开源且成熟的 Embedding 模型时,有时需对其进行二次训练。为何会这样?比如在垂直领域业务中,整个数学向量数据空间范围很广,但实际只集中在某个特定位置,其余空间则闲置浪费。二次训练的目标是让业务收益最大化,以金融领域为例,比如使投资方向和评估报告的向量相似度较高。这里,除了开发外,重点是整理三元组数据,需要准备数万到数十万条进行二次训练。

与DeepSeek、GPT等对话式模型相比,embedding模型的微调具有更高的安全性。对后者进行微调时,可能会破坏其通用对话能力,且风险难以控制。而embedding模型的微调无需关注其他领域问题,只需专注于区分自身领域内的段落,因此风险可控。

4)不同的Embedding模型对RAG是有一些影响的:

  • 多语言:embedding模型只支持一个语言,所以选择embedding模型时是要关心一下她是单语言还是多语言。
  • 向量长度控制:有些模型的向量长度是可以几百维几千维是可以缩放的,对检索效率也是有帮助的
  • 定制embedding模型:如果你的领域,市面上的enbedding模型就是看不懂你的专业知识,你可以定制你的embedding模型,基于一个开业的embedding模型然后去微调成您的embedding模型

Rerank模型:

Rerank,即重排序技术,其工作原理如下:首先,Embedding 模型会根据用户提出的问题,在 RAG 中检索出相关的知识切片。随后,Rerank 模型对这些已检索出的知识切片进行深度的语义分析,以精准判断哪一个知识切片与用户问题最为契合,从而确定最适合回答用户问题的那个知识切片。

三、可能遇到的其他问题

1.当RAG检索出来的内容效果不好使,我们应该怎么做,RAG相对于微调的一大好处是可以按步骤调试。效果不好我们按优先顺序查看几个方面:

  • 文档处理和切割情况、颗粒度问题。
  • 检索召回不准,最希望被检索到的片段排序太靠后。
  • 整合生成的过程有什么问题。

2.提高准确率的常见小技巧:

  • 知识片段有明确主题、交叠切分(一些内容在两个切片中的重合度)、多颗粒度混合切分(颗粒度大小不是看字数,看语义的丰富程度)。
  • 知识片段的上下相邻片段也可以一并取出,提高信息完整度。
  • 检索时多召回一些结果,再用单独的模型去做重排序。
  • 向量+关键词两种检索方式分别去检索,然后在混合在一起(差不几个字就差别非常大)。
  • 将User Prompt重写成几种不同的表述方式(让大模型自己就可以将user prompt问题用多种表述方式,然后分别去做向量检索,分别有召回来的召回片段,避免问题表述方式问题导致一些关键的知识片段,检索出来的相关度偏低)。

3.表格处理效果不好怎么办,比如你的文件(word/pdf等)是一大段文字然后配上一个表格

  • 有一些工具和插件,在你给他一个文件中包含表格时,它可以帮你把文件中一整个表格截成图片形式。
  • 找一个多模态模型,把每一张图片输入给多模态模型生成一段描述图片的文字,这段文字就可以变成知识切片,文字变成向量,保存到知识库并将这段文字与图片进行关联。如果这个向量被检索到,再取出这张图片。
  • 将图片作为参考资料,跟所有的prompt一起给多模态模型,让模型回答问题

4.搜索引擎也是一种广义的RAG:

有些场景,搜索引擎搜索的外部信息是要和RAG数据库搜索出来的信息结合的,主要看场景用到哪些内容信息。搜索引擎是外部资料库;向量数据库是内部资料库

5.向量数据库和常规数据库:

向量数据库与常规数据库在实际应用中常结合使用,例如,向量数据库通常用于检索知识类信息,而常规数据库则主要负责检索用户信息、订单信息等结构化数据。

为了使语言模型更精准地理解用户意图,需依据用户提出的问题,让语言模型先判断其意图。若问题仅涉及检索用户或订单等结构化信息,则只需查询常规数据库;若问题包含知识性内容或需结合上下文理解,则还需调用向量数据库进行检索。最终,根据模型判断,合理分配检索任务,确保准确回应用户需求。

如何学习大模型 AI ?

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

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

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

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

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

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

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

在这里插入图片描述

第一阶段(10天):初阶应用

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

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

第二阶段(30天):高阶应用

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

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

第三阶段(30天):模型训练

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

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

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

第四阶段(20天):商业闭环

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

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

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

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

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

Logo

助力合肥开发者学习交流的技术社区,不定期举办线上线下活动,欢迎大家的加入

更多推荐