跳到主要内容

RAG

在让 LLM 回答之前,找出与问题有关的文档一起交给它读,让它根据其中的内容回答的方法

RAG (检索增强生成) 是在让 LLM 回答之前,找出与问题有关的文档一起交给它读,让它根据其中的内容来回答的方法。它不只依赖训练学到的知识,还能用公司内部的资料和训练之后出现的信息来回答。资料少的话,把全部原样交给模型读更简单,RAG 适合资料多的时候。回答的质量,由查找的部分做得好坏和读懂所给文档的能力两方面决定。

取出需要的部分交给模型的方法

RAG (检索增强生成) 是在让 LLM 回答之前,找出与问题有关的文档一起交给它读,让它根据其中的内容来回答的方法。这个名称是从 Lewis 等人 2020 年的论文传开的。只靠模型训练时记住的知识,回答不了公司内部的资料和训练之后出现的信息。RAG 通过在回答之前交给模型需要的部分来弥补这一点。

常见的做法是,事先把资料分成几百个 token 左右的小片段,做成能按意思的接近程度来查找的形式。来了问题后,选出关系密切的片段,和问题一起交给模型。

与整份读入的方法区分使用

资料少的话,不查找而把全部交给模型读更简单。Anthropic 在 2024 年 9 月的说明里表示,资料少于 20 万 token (约 500 页) 的话,把全部原样放进指令就行。这种情况下,不需要 RAG 这样的方法。资料比这更多,或资料频繁增加时,适合用 RAG。

不过,读得长也不等于能读对。在 Liu 等人的研究 (2023 年公开) 里,需要的信息在长输入的中间时,回答的准确度大幅下降。把长资料整份交给模型时,也要注意这一点。

决定回答质量的 2 个部分

RAG 的回答质量,由查找的部分和读了所给文档后回答的部分两方面决定。查找的部分出了偏差,模型就写不出正确的回答。Anthropic 举出了切成片段后丢失上下文的例子。只有“销售额比上一季度增长了 3 %”这个片段,就不知道是哪家公司什么时候的事。于是它提出了给每个片段补充前后上下文说明的做法。

按用途选择的页面上的“读取文档并作答”,比较的是读了后回答的部分的能力,按考查 12 万 token 故事阅读理解的任务的正确率来排序。查找的部分做得好坏,取决于搭建机制一方的功夫。

这个页面对你有帮助吗?

相关用途