微信扫码
与创始人交个朋友
我要投稿
AI产品经理或者准备从事这个职业的朋友,一定都听说过RAG。RAG全称是Retrieval Augmented Generation,中文意思是检索增强生成,是一种构建AI应用的方法。
今天我就跟大家唠一唠RAG,什么是RAG、RAG的实现方式,以及RAG的典型产品应用分享。
01
—
RAG介绍
RAG是目前AIGC文本生成最普遍、最成熟的应用方法。
通俗地理解就是:把知识库提供给大模型,让大模型根据知识库的内容进行回答。
这和用户直接上传一个文档,让大模型根据文档回答问题有一些小的区别。
RAG有一个前置流程,即先检索知识库,把检索出来的知识片段提供给大模型,再让大模型根据知识片段回答问题。
这么做的好处是什么呢?
总结来说,RAG对AIGC应用的价值有三个方面:
举个应用场景的案例:
【场景】你公司有一款产品,你希望将该产品的知识文档,都提供给大模型,给用户提供一个基于大模型的智能问答客服,帮助用户快速解决问题。
RAG可以帮助你实现以下效果:
1、智能客服可以基于产品知识回答问题
回答结果可以引用的文档内容,以及大模型根据它的理解推理给出的答案。
它可以是基于知识内容的总结、解释。
也可以是基于知识内容,进行相关的工具调用,计算推理,得出答案。
也有更高级的用法,例如用思维链的方法,将问题拆分为多个任务,进行下一步的推理。当然思维链的方法已经不是RAG本身了,但我们可以将RAG方法应用在思维链推理模式中,用来构建复杂的任务。
2、知识库是可以实时更新完善的
你可以将最新的知识库内容提供给大模型,让在每次大模型回答问题前,都实时检索最新的内容。你不需要重新设置大模型。只要更新知识库即可。
这里有个小tips,知识库不仅仅是产品文档、用户手册。你也可以将过去大模型回答问题的记录,将其中常见的问题,优秀的回答,差的回答,经过审核筛选后,也作为知识的一部份。这可以很好地提升回答质量。
3、避免大模型上下文Token长度限制
由于大模型处理内容有token长度限制,虽然随着大模型的升级,它能处理的token数越来越大(例如最新的claude3已经支持20万token),但是我们仍然需要RAG。
原因有三点:
(1)太长的上下文,处理速度会很慢。
(2)上下文知识并不是越多越好,而是要精确,由于大模型的注意力机制,过多的内容也可能会导致大模型被带偏,不能给出准确的答案。
(3)太长的上下文,成本上升巨大。
02
—
RAG实现
我们再来讲讲如何构建一个基于RAG的大模型应用。
首先,我们要了解RAG的工作流程。
RAG工作流程分为两个主要步骤:
一、构建知识库
二、问答流程
一、构建知识库
构建知识库又分为几个步骤:
内容解析->内容分片->内容Embedding->存储
1、内容解析
内容解析是将不同格式的文档,例如txt,html,word,excel,pdf,markdown 等格式的文件,提取出文本内容(其实也可以是音频、图像,这里方便介绍就以文本举例)。有许多开源工具,均提供了这些能力。
需要注意的是,尽可能地让这些数据解析后的格式更规范,以保证后续提供给大模型的内容质量更好。
2、内容分片
以上解析出来的内容,可能有是很长的篇幅。我们需要将它们切片成小的片段。这些片段就是我们后续要提供给大模型的知识。所以在内容分片时,尽可能让切片内容完整、独立。
简单的方法,一般可以设置一个最大片段字符长度。不超过字符长度的章节段落进行切分。如果知识篇幅不大,也一可以一篇文档一个分片。
3、Embedding
Embedding翻译成中文是嵌入,这个可能有的朋友不太理解。
我们知道一段文字,哪怕是一个词,它包含的信息都是非常非富的,并且不词与词之间,都有关联关系,比如说狗、dog、gou、旺财、二哈,这些词它们的意思是很接近的。但是数据库能存储的信息又是非常有限的。
Embedding通俗地理解就是将信息从非常高的维度,压缩映射成一个有限维度的向量。将一段任意长度的文本,Embedding处理后,都会得到一个多维的向量。例如这样:
[-0.01605728454887867, -0.008948222734034061, -0.015024525113403797, -0.02007514238357544, ...... -0.0011304783402010798]
我们以一个简单的例子来看:下图是一个三维的空间。
二哈、旺财、dog,狗,猫这几个词被映射到这个空间的某个位置。它们位置距离,就可以表示它们的相关性。位置可以用一个3维向量来表示。
维度越多,能表示的信息就越丰富,充足的语料训练,也能让Embedding 的模型结果更准确。
Embedding我们不是一定只能用大模型的来做,普通的算法也可以做Embedding,但是大模型的Embedding效果会更好。因为它训练的语料充足,维度更多。
OpenAI的Embedding 模型 text-embedding-ada-002 有 1536个维度。
这样两段不同的文本内容,可以映射成二个1536维的向量。
4、存储向量
我们将所有文本内容片段,用Embedding处理好后,可以存储在向量数据库中。因为后续需要在向量数据库中检索数据。
向量数据库比较常用的可以考虑:pgvector(PostgreSQL 的开源扩展),Elasticsearch,Chroma等。这里不作具体优劣对比。
在向量数据库里我们可以存储一些信息,例如:
文档ID、文档内容、章节索引、段落索引、Embedding向量。
存储的文档元信息,可以尽可能丰富一些,因为如果后续要优化,可以对检索的内容进行过滤。
这样,我们就完成了知识库的初始化构建。
二、问答流程
问答流程又分为几个步骤:
用户提问->问题Embedding->检索相关知识->封装Prompt->大模型回答
用户提问与大模型回答是最基础的流程。
在这中间,RAG做了几件事:
1、问题Embedding
在接到用户的提问后,我们先将用户的问题,也进行Embedding处理,得到一个问题的向量值。
这个向量值,就包含了这个问题的信息,我们通过向量值的比较计算,就能找到与它相关的知识。
2、检索相关知识
将上一步得到的问题向量值,在向量数据库中检索,得到相关的内容片段。这些片段就是我们要提供给大模型的参考知识。
在检索时,我们可以指定返回的结果数,相似度阈值。例如返回相似度最高,且相似度大于0.3的3段内容。
3、封装Prompt
将上一步检索出来的3段内容,与用户问题,组成新的查询prompt,提交给大模型。这样大模型就可以参考我们检索出来的文档内容进行回答。
以上的过程,有很多优化的技巧,需要结合应用场景、数据进行详细的考虑和设计。优化的目的,是为了让大模型的回答更准确。
我总结了几种优化思路:
在对用户问题进行Embedding前,对问题进行补充完善。避免用户问题太过简单、或者有明显错误。
也可以考虑将用户问题,进行主题关键词抽取,或者使用知识图谱等进行初步的信息识别。这么做的目的是,避免用户的问题,信息太多太杂,导致检索出来的相关文档,与用户提问意图关联不大。也就是对用户问题进行简化。
在检索文档时,可以增加一些过滤条件,例如指定章节、关键词包含、日期筛选、相似度阈值等,以使检索出来的内容更准确。
对检索结果,也可考虑将相似度,与文档自身的权重进行综合加权。使提供给大模型的内容资料是最优的。
优化prompt,可以让大模型更好的学习参考内容和回答。这点应该是优化时首先考虑的,也是最低成本的优化方法。
如果有条件可以对大模型的生成内容进行监督,如果不符合预定的规则,则重新生成或者返回其它特定的内容。
03
—
RAG产品案例
RAG方法已经普遍被应用在各种AI产品中了。我们可以看几个产品案例。大家可以根据这些案例,来思考如何落地AI应用。
1、微软Copilot
微软Copilot是结合了BING搜索引擎的AI工具,用户提问后,它会根据搜索引擎的结果,进行总结回答。
对RAG来说,Embedding其实也不是绝对必要的,它的目的是为了更好地检索知识。搜索引擎本身也是检索知识,当然搜索引擎中也广泛地应用了Embedding技术。所以重要的是理解产品的逻辑,根据实际的需求来考虑如何设计产品。
2、字节Coze
字节的Coze产品,也提供了RAG的能力,允许用户上传自己的知识文档。自动化构建你的专属AI应用。
Coze的使用门槛非常低,免费,不需要乱七八糟的上网方式,非技术人员也可以用,人人都可以创建自己的AI助理。
3、Langchain-ChatChat
LangChain是一个开源LLM框架,包含了丰富的组件,例如数据处理,Embedding处理和向量存储、LLM终端等。
Langchain-ChatChat是基于LangChain开发的应用,可以集成开源大模型,例如ChatGLM(清华开源大模型),Qwen(阿里千问开源大模型)等。
它的优势:
(1)可以本地化部署,这样可以保护企业的数据安全,完全运行在企业内部私有环境。
(2)开源软件可以自定义扩展
(3)支持知识库管理等功能,开箱即用。
4、ChatPDF
ChatPDF,以及它有很多类似的工具。可以允许用户上传PDF文件,让大模型根据文件回答问题。
这类产品在早期chatgpt3.5版本时非常火。但后来chatgpt4提供用户上传文档能力后,有所被替代。这其实也是一个趋势,有许多AI应用短期很火,是因为它借助AI能力满足了一部份人的需求,而底层AI公司,现阶段主要在底层模型能力上发力,应用端则开放API,让生态自由发展。但现在AI应用的更新迭代丰常快,可能AI一次升级,许多AI应用产品就被替代了。做AI应用的创业团队,都需要考虑,尽可能的轻量、快速迭代。
5、Video Insights
Video Insights是一款Chatgpt的插件,允许用户提供一段视频(Youtube视频链接),它可以对YouTube视频进行转录、总结和聊天。
它的原理是先获取Youtube的视频字幕,然后交给Chatgpt作为参考内容,进行总结和对话。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-08-13
2024-03-30
2024-05-28
2024-05-10
2024-04-26
2024-04-25
2024-04-12
2024-07-25
2024-05-06
2024-07-18
2025-01-22
2025-01-22
2025-01-22
2025-01-22
2025-01-22
2025-01-21
2025-01-21
2025-01-20