检索增强生成把一个在外部文档集合中搜索的检索器与一个作为生成器的语言模型结合起来。Lewis 等人(2020)提出了这一方法:将参数化的 seq2seq 模型与基于 Wikipedia 的非参数化向量索引配合使用,结果表明它生成的文本更符合事实、更具体,并在开放域问答任务上取得了当时最先进的成绩。
如今大多数 RAG 系统沿用 Dense Passage Retrieval(Karpukhin 等人,2020)的思路,使用稠密嵌入进行检索;把检索与语言模型结合的想法也在 REALM(Guu 等人,2020)中得到了发展。
AI 中的 RAG 是什么?用大白话讲清它的含义
一句话说清 RAG 的含义:先查资料,再作答。普通的 LLM 只能根据训练时吸收的内容回答,而这些内容可能已经过时,或者被记错。RAG 系统会先从公司文档、知识库或网络中抓取与问题相关的段落,再把它们连同问题一起交给模型,这样回答就能引用并标注真实来源。
正因如此,RAG 成了构建以下应用的常用方式:基于私有文档的聊天机器人、必须保持信息最新的客服助手,以及能展示每条论断出处的研究工具。
检索增强生成是如何工作的
- 1建立索引。把文档切分成若干块,每块转换成一个嵌入,再把这些嵌入存入向量数据库或搜索索引。
- 2检索。用同样的方式对用户的问题进行嵌入,通过最近邻搜索找出最相似的文本块,之后通常还会进行一步重排序。
- 3增强与生成。把排名最靠前的段落插入提示词中(在模型的上下文窗口范围内),模型据此写出有依据的回答——理想情况下还会标明每句话由哪个段落支撑。
RAG 与微调的区别
两者都能让模型更好地服务于你的领域,但改变的东西不同。RAG 改变的是模型能看到的内容;微调改变的是模型本身。
| RAG | 微调 | |
|---|---|---|
| 改变什么 | 提供给模型的上下文 | 模型的权重 |
| 更新知识 | 重新为文档建立索引 | 重新训练 |
| 引用来源 | 可以指出所用的段落 | 没有内置的来源追溯 |
| 最适合 | 最新、私有或变化频繁的事实信息 | 统一的风格、格式或特定领域的行为 |
长上下文窗口让你可以把整份文档直接粘贴进聊天,文件不多时可以替代 RAG。但当文档集合超出窗口容量、经常变动,或需要供大量用户检索时,RAG 仍然更胜一筹。
MultipleChat 中的 RAG
MultipleChat 项目 正是这样工作的:你添加到项目中的文件会被建立索引;当你发送消息时,MultipleChat 会在其中搜索,只把最相关的文本块传给模型——这样项目中的每个对话都能用上你的文档,无需复制粘贴。Web Search 会补充实时来源;在付费套餐中,Auto Verification 还能在回答生成后立即检查其中的事实问题。