2026年7月9日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

一文通俗讲透 RAG 背后的逻辑,让 AI 回答更精准!

发布日期:2024-09-21 21:28:58 浏览次数: 3778
作者:熊猫Jay字节之旅

微信搜一搜,关注“熊猫Jay字节之旅”

你是否曾对 AI 给出的答案产生过怀疑?RAG 可能就是解决这个问题的关键。

RAG ,对于技术人员肯定已经不陌生,但是对于普通人来说可能还是个模糊的词汇。

关于 RAG,在我们使用 AI 的过程中随处可见。

不管我们在 Kimi、ChatGPT、Claude 提供文件或网页来提问,还是使用 Coze、Dify 这类平台构建 AI 客服、法律助手、或者其他利用知识库的智能体,本质上都涉及到 RAG 技术。

昨天,Claude 发布了一篇 RAG 优化方案——“Contextual Retrieval”。在群里简单分享后,发现很多小伙伴都很感兴趣。

如果你还不太了解,让我们一起来回顾一下:

  1. 为什么需要 RAG?

  2. Contextual Retrieval 的优势是什么?

  3. RAG 其他优化方向的总结

一、为什么需要 RAG?

分享前,我们先聚焦于当用户询问一个问题:我想知道“八宝茶是哪个少数民族的传统饮品”

恰好这个问题涉及的领域较为冷门。

一般情况下,我们会直接向 AI 提问。如果大模型没有这方面的知识,那么可能会产生“幻觉”,也就是瞎编。

正确答案其实是 “回族”。

后来,我们了解到可以通过提示词编写的策略:提供参考文本。我们可以将一段引用内容和原始的问题组合来提问。

提示词:

八宝茶是哪个少数民族的传统饮品,请根据这段文字进行回答"""xxxxxxxxx""",如果找不到答案,则回复“不知道”。

这种方式存在两个问题。

第一,如果这段引用的内容过长,超出大模型的上下文限制,便得不到正确答案。

例如,大模型上下文限制为 8 千字,而给出了 1 万字,且答案恰好位于最开始的 2000 字左右内,那么很可能会错过正确答案。

第二,如果我们提供的文字内容不够全面或质量较低,那么即使得到答案,也极有可能不全面或完全不正确。

如何解决这些问题呢?

由此,RAG 便诞生了。我们先来一张 Claude 生成的图片,针对刚才的技术演化过程,看看 RAG 的优势。

什么是 RAG 呢?

简而言之,它是一种通过从外部知识库检索相关信息来辅助大语言模型生成更准确、更丰富的文本内容的技术。

RAG 全称 Retrieval-augmented Generation,中文叫做:检索增强生成。

1、检索:检索是 RAG 流程的第一步,从提前构建好的知识库中找出和问题有关的信息。这一步是为后面的生成环节提供背景信息和知识支持。

2、增强:增强是把检索到的信息作为大模型的上下文输入,以此提升模型对特定问题的理解和回答能力。通过增强这一步,大模型可以充分运用外部知识库中的特殊信息。

3、生成:生成是 RAG 流程的最后一步。这一步会利用检索到的内容作为上下文,再最终组合后的提示词指引 LLM 生成符合用户需求的回答。

最终,我们理解这个术词的完整含义:RAG 通过检索外部信息来增强大模型的提示词,从而生成更准确的答案。

那么,RAG 是怎么工作的呢?

我们来看下 Claude 最新优化方案中提及的常规 RAG 是如何工作的。下面我来进行通俗解释。

第一步:如果是文件,系统会运用一些识别工具提取文字内容。如果是网页,系统则会利用爬虫技术获取网页数据。

备注:网页上用户是直接提供文件。智能体平台,用户会提前上传文件。

第二步:系统会根据长度设定把每份提供的内容分成一段一段的文本块,术语叫 Chunk。然后,利用向量模型将这些 Chunks 存储到向量数据库中。

图中还提到另一项技术,叫做 TF-IDF。通过这项技术,可以为这些块创建 TF-IDF 编码,从而在检索信息时提供双重保障。

TF-IDF 是通过计算词在文档中的出现次数(TF)以及在整个文档集合中的普遍重要性(IDF),来确定哪些词对特定文档比较重要。这样,它可用于提取文档关键信息。

第三步:当用户提出问题“八宝茶是哪个少数民族的传统饮品”时,系统会在向量库中依据 TF-IDF 的索引定位到与这个问题相关的 chunks。

第四步:按照一定规则给这些 chunks 排名。

为什么要排名呢?

因为可能有很多 Chunk 都与“八宝茶是哪个少数民族的传统饮品” 这个问题有关的内容。

但是,不能将所有 Chunk 作为上下文去问大模型,这样内容太多太杂,不但会影响回答质量,还极有可能超出大模型的上下文限制。

排名后,获取最接近问题的一个或多个 Chunk。至于具体是几个,得看系统设定和用户的配置。

最后一步:将获取后的 chunk 作为上下文,结合用户最初的问题,拼接成提示词,让大模型分析并从中获取答案。

提示词类似这样(取自 FastGPT 的提示词):

忘记你已有的知识,仅使用{{knowledge}}中的内容作为你的知识,回答用户的问题{{question}}:

思考流程:
1. 判断问题{{question}}是否与{{knowledge}}标记中的内容有关。
2. 如果有关,你按下面的要求回答。
3. 如果无关,你直接拒绝回答本次问题。

回答要求:
- 保持答案与中描述的一致。
- 使用 Markdown 语法优化回答格式。
- 使用与问题{{question}}相同的语言回答。

{{knowledge}} 就是最重要的几个 Chunk 组合后的内容。

这时候,根据这段提示词,大模型就可以更准确地回答我们。

当然,这也并非完美,在特殊情况下,会存在一些明显问题。我们参考 Claude 官方提供的一个例子来说明。

比如,我们的问题是“八宝茶是哪个少数民族的传统饮品?”,正确答案是“回族”。

但某个 Chunk 中正好有一段类似文字,是用来介绍蒙古族马奶茶的:“该茶是蒙古族的传统饮品”,这里有个指代词“该”,若不处理,基于这个 chunk,答案就不对了。

二、Contextual Retrieval 的优势是什么?

Claude 最新发布的 “Contextual Retrieval” 到底如何解决这个问题呢?

这个方法的核心是利用整个文档作为上下文,借助提示词对这个 Chunk 做简洁概述,并在向量化之前,将这段解释放在 Chunk 的开头,作为其中的一部分。

另外一点优化是:这个方法在交给大模型之前,多做了一步排名,叫 Reranker,这样可以进一步找到更接近用户问题的 Chunk。

那它是借助什么提示词来给每个 Chunk 做简述的呢?

原始版本:

<document>
{{WHOLE_DOCUMENT}}
</document>
Here is the chunk we want to situate within the whole document
<chunk>
{{CHUNK_CONTENT}}
</chunk>
Please give a short succinct context to situate this chunk within the overall document for the purposes of improving search retrieval of the chunk. Answer only with the succinct context and nothing else.

中文版本:

<document>
{{WHOLE_DOCUMENT}}
</document>
这是我们想要放在整个文档中的块。
<chunk>
{{CHUNK_CONTENT}}
</chunk>
请提供一个简短而简洁的上下文,以便在整个文档中定位此块,以提高块的搜索检索效果。仅用简洁的上下文回答,不要有其他内容。

那我们再回到刚才的小故事里。

针对原先这个 Chunk:该茶是蒙古族的传统饮品就会被处理成这样:这段内容来自蒙古族马奶茶的介绍文件;该茶是蒙古族的传统饮品。

通过这种处理,系统能够更准确地筛选信息,从而提升了答案的精确度。

三、总结

总结一下,这只是 Claude 建议的一种 RAG 优化策略,主要包括内容切分方式以及结果重排的优化。

文章地址:https://www.anthropic.com/news/contextual-retrieval

方案代码地址:https://github.com/anthropics/anthropic-cookbook/tree/main/skills/contextual-embeddings

但是,优化 RAG 不止于此。在前面我们提到的很多步骤中都存在优化空间。

比如,文件内容提取的准确度网页爬虫的准确度 以及 数据清洗的策略(去除内容中的杂质)。

关于内容提取,如果内容提取不准确,后面的努力都是白费。

我在之前的实践过程中针对内容提取遇到过很多问题。

例如,PDF 有很多复杂的格式,比如扫描件、手写件。PDF 内容又会涉及到复杂的表格、数学公式和图片等等。

以下是之前做的一次方案调研:

免费AI神器!精准解析 PDF 还能一键翻译!

备注:这文章里推荐的这家最近出了点问题,服务器在修复,大家要用的话,推荐先用 TextIn。

此外,还有一些优化空间。比如,可以利用大模型来优化用户提出的问题。因为很多时候,用户提出的问题本身存在问题。

还有,怎么在检索过程中怎么评估哪些信息是最相关的,以及它们如何相互影响等等很多方面。

关于这一点,微软过去提出过 GraphRAG ,这是一种通过知识图谱的方式来构建和检索知识的方案。但是,成本也非常高,它只适用于需要处理大量、高度相关性信息的应用场景。

比如 法律分析、医疗诊断。法律中,条文和判例引用复杂;在医疗中,医生查找病历、药物等高度关联的信息。

GraphRAG 就可以用“图谱”的方式把这些场景的知识组织起来,让用户得到更完整的答案。

今天只是做了一次简单的分享,如果你对 RAG 优化有什么见解或者有趣的 idea,欢迎在评论区回复。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅