第三节课《茴香豆:搭建你的 RAG 智能助理》学习笔记

本文介绍了RAG技术,尤其是茴香豆这款基于大模型的知识助手,它利用RAG技术解决知识密集型任务,无需额外训练即可提供准确答案。文章详细阐述了RAG的工作原理、发展历程、优化方法,以及茴香豆在智能客服领域的应用和搭建RAG知识库的实战步骤。
摘要由CSDN通过智能技术生成

本节课程由书生·浦语社区贡献者北辰主讲。

课程背景引入:

首先快速了解RAG技术能干什么。

茴香豆是一款比较新的应用,我们没有使用和茴香豆有关的任何资料去训练InternLM2-Chat-7B模型,因此如下左图所示,我们原始的InternLM2-Chat-7B模型并没有能力去回答有关它的相关问题。

针对这种新增知识的情况,传统上我们会采集新增语料,然后通过微调等方式对模型进行再训练。这个操作在现实之中会遇到很多问题,如知识更新太快、语料知识库太大、训练成本高、语料难收集等。

RAG技术的出现可以很好地解决这个问题,如下右图所示,在没有额外训练地情况下,针对同样的问题“茴香豆是什么”,我们的茴香豆知识助手就回答出了这个问题,而这个问题是原始模型7B不能回答的,这个过程没有任何的训练过程。 有了这个初步认识,接下来可以进入课程的第一部分,了解RAG。

1、RAG 基础介绍

RAG的概念

RAG(Retrieval Augmented Generation,检索增强生成技术)是一种结合了检索(Retrieval)和生成(Generation)的技术,旨在通过利用外部知识库来增强大型语言模型(LLMs)的性能。它通过检索与用户输入相关的信息片段,并结合这些信息来生成更准确、更丰富的回答。

通俗一点来说,就是将RAG理解为一个搜索引擎,将用户输入的内容作为索引,在外部知识库当中搜寻相关的内容,结合大语言模型的能力生成回答。

RAG最大的特点就是能解决大模型处理知识密集任务时遇到的各种挑战【如:生成幻觉(hallucination,对自己不知道的东西胡说八道)、过时知识(像新闻新技术等的缺失)、缺乏透明和可追溯的推理过程】

RAG能够让大模型实现外部记忆,它在解决大模型常见的诸多问题的时候,也能够提供更准确的回答,因为没有训练的过程,它的总体成本会很低。

RAG技术可以应用在很多地方:常见的问答系统、文本生成系统、信息检索、在结合了多模态大模型之后RAG技术也能够用于图片的描述。

RAG工作原理

经典的RAG由三个部分“索引(Indexing)、检索(Retrieval)、生成(Generation)”组成。

索引(Indexing)部分负责处理外部知识,将知识源(如文档或者网页)分割成chunk,编码成向量,并存储在向量数据库中;

检索(Retrieval)部分负责接收用户的问题,将问题也编码成向量,并在向量数据库中找到与之最相关的文档块(top-k chunks);

生成(Generation)部分负责将检索到的内容和原始问题一起作为提示,输入到大模型中,生成最终的答案然后返回给用户。

补充知识:向量数据库(Vector-DB

向量数据库是RAG技术当中专门储存外部数据的地方,主要是实现了将文本及相关数据通过预训练的模型转换为固定长度的向量,这些向量要能够很好地捕捉文本和知识地语义信息以及内部联系。

向量数据库是实现快速准确回答的基础,能够高效地实现相似性检索,根据用户的查询,快速找出最相关的向量。通常情况下,会通过计算余弦相似度或者是点乘的方法来判断相似度。检索的结果要根据相似度的得分进行排序,最相关的内容将被用于后续文本的生成。

在面向大规模数据以及需要高速响应的需求的时候,向量数据库也是需要进行优化的,其中很重要的就是对向量表示的优化,例如使用更高级的文本编码技术、使用更好的预训练模型等,也包括去尝试不同的句子嵌入或段落嵌入方法等等,可以说针对向量表示的优化,将直接影响RAG的结果的好坏

RAG的发展历程(2020年至今)

Navie RAG范式:只有“索引、检索、生成”三个部分构成的最基础的范式,这种范式通常会应用于简单的问答系统和信息检索场景。

Advanced RAG范式:在三个基础部分之外,对检索前后都进行了增强,在检索之前对用户的问题进行路由扩展、重写等处理,对检索到的信息进行重排序、总结、融合等处理,使信息收集和处理效率更高,使得RAG可以应用在摘要生成、内容推荐等领域。

Modular RAG范式:将RAG的基础部分和后续各种优化技术和功能模块化,可以根据实际业务需求定制,完成如多模态任务对话系统等更高级的应用。

RAG常见优化方法

(①②提升向量数据库的质量;③④是Advanced RAG范式中的前检索和后检索部分;⑤⑥⑦是针对检索的优化)

  • ①嵌入式优化:通过结合稀疏编码器和密集检索器以及多任务的方式,来增强嵌入的性能。
  • ②索引优化:可以通过增强数据粒度优化索引结构,添加元数据对其优化和混合检索等策略来提升索引的质量。
  • ③查询优化:通过查询扩展和转换,来使用户的原始问题更清晰、更适合检索任务,例如采用多查询方法,通过大模型生成的提示工程来扩展查询。
  • ④上下文管理:通过重排和上下文选择/压缩,来减少检索的冗余信息,并提高大模型的处理效率,例如我们可以使用小一点的语言模型来检测和溢出不重要的标记,或者训练信息提取器和信息压缩器。
  • ⑤迭代检索:在RAG过程中根据检索结果多次迭代检索知识,为大模型生成提供全面的知识基础。
  • ⑥递归检索:通过迭代细化查询来改进搜索结果的深度和相关性,使用了链式推理指导检索过程,并根据检索结果细化推理过程。
  • ⑦自适应检索:用Flare、Self-RAG等等,让大模型能够自主地决定其所要检索的内容、最佳时机等这些因素。
  • ⑧LLM微调:大模型微调可以根据场景和数据特征对大模型进行定向微调,也可以根据大模型对于检索或生成的参与,进行有针对性的微调。

对比RAG和大模型常见微调的优势和局限

LLM模型优化方法比较:

从两个方面来对比几种方法:一是任务对外部知识的需求,二是任务对模型适配度的需求。

提示工程在面对外部知识需求和模型适配需求上的表现都是比较差的,它不能适应新的知识,同时对特定任务也难以有非常专业的表现。

微调则是一种对外部数据需求要求不高,但是对于模型任务适配要求很高的场景的优化手段。

RAG技术则正好与微调相反,它适用于高外部数据需求,但是对于模型适配度要求不高的场景。

当然也有既满足外部知识的高需求,又能满足对于任务适配度高的需求的方法,那就是把上述这三种方法结合到一起。

如何评价一个RAG技术

通常我们将RAG技术当中的检索阶段和生成阶段进行单独的分别评价。

首先我们在NLP领域经常会用到的经典评估指标,如准确率、召回率、F1分数、BLUE分数、ROUGRE分数等,这些都可以用于RAG的检索过程和生成过程的评价。

除了这些特别经典的评估指标外,最近也陆续出现了许多专门针对RAG的评测框架,它们可以从多维度来评测RAG的性能,如对抗噪音的鲁棒性、拒答能力、信息融合能力、真实性、回答问题的相关度、总结能力、纠错能力等。其中RGB、RECALL、CRUD是针对RAG的基准测试,RAGAS、ARES、TruLens都是评测工具。

2、开源应用工具“茴香豆”的简介

茴香豆介绍

茴香豆是一个基于大模型的领域知识助手,由书生·浦语团队开发,是一款开源免费的工具。茴香豆针对我们常见的通讯软件中的群聊场景,进行了很好的工作流的优化,可以为群里面的用户提供及时准确的技术支持和自动化的问答服务。

茴香豆应用了上述提到的RAG技术,无需训练任何模型就能高效准确地回应与特定知识领域相关的复杂查询。

茴香豆最主要的适用场景就是智能客服,特别是即时通讯工具中的技术用户群。在现实场景当中会遇到,随着用户群数量增加,群内会充斥着大量无意义聊天或者时一些纯纯灌水的闲聊。传统的NLP解决方案是没有办法理解和分辨用户的真实意图,无法在大量闲聊中去找到那些真实需求的用户问题。茴香豆结合了大模型和RAG的技术,可以很好地处理这种场景,能够高效地解答用户的真实问题,同时也能避免造成消息过载。

茴香豆核心特性

茴香豆的构建

一个茴香豆个人知识助手有以下四个组成部分:

首先是知识库,通常是企业内部或者个人所在领域的专业技术文档,或是像价目表、产品规格等这类会实时更新的数据。目前茴香豆支持markdown、pdf、word、txt、ppt等常用的文件格式。为了应对真实场景,茴香豆也可以很容易去通过设置接受问题和拒答问题的事例来控制助手的回答范围。

第二部分则是前端,也就是问答助手读取用户提问和回答的平台,国内一般是微信群或者飞书群,国外则是另外一些技术交流应用软件。

第三部分则是大模型,目前茴香豆支持本地调用大模型或者调用远端大模型的API。

最后的核心就是茴香豆,茴香豆将上述三个部分整合起来,打通了工作流,形成了一个智能领域的知识回答助手。茴香豆并不是一款单独的RAG应用,它有着完整的应对真实使用场景的工作流设置,该工作流已经过长达半年的实际验证,整个工作流分成了三个部分,分别是:预处理、拒答工作流、应答工作流。

在预处理的部分会将用户的输入进行筛选,然后转换为合适的问询。合适的问询进入拒答工作流后,茴香豆会通过对该问询本身的分析,以及该问询与数据库当中示例问题的比较,来给出问题相关性的得分。根据得分来判断该问题是否要进入回答环节,如果确认了这是一个必要回答的问题,那么就进入了应答流程,由大模型根据问询和检索到的知识内容进行答案的生成,然后返回给用户。

使用拒答工作流的目的就是能够更加灵活广泛地适用于各种不同的场景和知识领域,根据实际使用场景的不同,可以自行地去决定所创建的知识助手的应答频率和应答范围。可以通过操控针对判断LLM scoring得分的阈值,来判断该应答助手是个话痨还是一个很严谨的技术专家这样的一个形象。

茴香豆完整工作流

为了能够生成更加准确有效的回答,茴香豆的应答模块采用了多来源检索、混合模型以及安全评估等方式来保证自己回答内容的准确性。茴香豆不仅可以应用本地文件生成的向量数据库来进行内容的检索,也可以通过网络检索,同时也支持知识图谱的形式。茴香豆可以综合多来源检索到的信息,通过评分来控制内容筛选,方便地调整输出内容的严谨性。在生成部分,茴香豆既可以使用本地模型,也可以使用远端的模型,使用混合的模式来共同处理生成任务。在直接输出给最终用户前,茴香豆还有专门的安全检测模块,通过大模型检验、传统NLP的检验、包括时间的筛选和消息的撤回,来保证我们回答内容的安全性。

茴香豆的介绍到此就结束啦~~

接下来是实战部分。

3、使用茴香豆搭建RAG知识库实战     

实践一:在茴香豆Web版中创建自己领域的知识问答助手

Web版本地址: https://openxlab.org.cn/apps/detail/tpoisonooo/huixiangdou-web

茴香豆是一个基于LLM的领域知识助手,用于解决群聊里的问题。这是它的Web端,用来创建知识库、获取服务端地址。

首先是创建自己的知识库,输入账号密码。

上传自己的知识库,例如电信办卡优惠。点击上传,成功后可以带着知识库聊天,例如问电信办卡优惠,再试试闲聊“你好”,如果要定制自己的拒答主题,可以更新正反例。

实践二:在InternLM Studio上部署茴香豆技术助手

首先打开Intern Studio创建开发机,选择镜像Cuda11.7-conda,选择30%的A100GPU,创建开发机,点击进入开发机选项。进入开发机后,从官方环境复制运行InternLM的基础环境,在命令行模式下运行:“studio-conda -o internlm-base -t InternLM2_Huixiangdou”

可以看到环境已经配置完成。现在检查以下conda环境是否正常配置。输入命令“conda env list”可以看到已正常配置。

下一步,输入“conda activate InternLM2_Huixiangdou”激活刚刚安装的环境。

可以看到命令行最开头的地方已经切换成环境名称,这个环境名称在重新启动Terminal和重启开发机的时候,都需要重新地去启动安装好的环境。

接下来需要下载一些基础的文件。

接下来下载茴香豆。先安装茴香豆运行所需依赖,再下载茴香豆官方仓库。如下图所示,已经下载好官方仓库并切换到了指定版本。

下面要开始正式搭建RAG助手。首先要修改配置茴香豆的配置文件,将刚刚下载的三个模型的地址替换掉配置文件中原有的模型地址。

接下来创建自己的知识库(本文针对茴香豆这个工具来专门创建一个知识库)。首先把茴香豆的相关语料下载到开发机

接着将茴香豆的一些示例问题加入到示例问题列表中

再创建一个问题列表用来测试我们的拒答流程是否正常

接下来要对已经准备好的语料库和包括茴香豆的知识库的示例问题、反例问题进行向量化,创建我们自己的向量数据库。

现在可以测试一下茴香豆知识助手。

现在让我们看一下茴香豆助手的输出,针对茴香豆是什么的问题,我们的助手给出了一个看似合理的答案,还给了一个附加的链接,这个链接直接将我们引向了茴香豆的技术报告。可见我们RAG技术的茴香豆技术助手是可以提供可追溯的资料来源。针对第二个问题,茴香豆怎么部署到微信群,我们的技术助手也给出了一个有效的回答。针对第三个问题,我们的技术助手虽然准确判断出它是一个问题,但在随后的流程中,因判断该问题与所检索到的资料和检索主题相关性较低,所以我们的技术助手做出判断,针对拒答该问题进行生成,所以没有任何回答。

至此,我们完成了茴香豆在服务器上的部署体验。

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值