Retrieval Augmented Generation (RAG)
RAG 会从外部知识库检索相关段落并将其加入 LLM 提示中,让答案基于最新、私有且可引用的来源。
检索增强生成(RAG)是一种技术:大型语言模型(LLM)在回答问题时,会使用查询时从外部知识源检索到的段落,并将这些段落与问题一同插入提示词。LLM 的训练数据会截止于某个日期,且从未包含公司的内部文档,因此若不进行检索,模型要么缺少事实依据,要么会编造看似合理的内容,这种问题称为幻觉。这个术语源自 Patrick Lewis 及其 Facebook AI Research 同事于 2020 年发表的论文《面向知识密集型 NLP 任务的检索增强生成》。该论文将预训练的 BART 生成器与神经检索器结合起来,检索器使用维基百科的稠密向量索引,并在三个开放域问答任务上取得了当时最先进的结果。如今,这个名称泛指任何先检索、后生成的系统。
RAG 流水线的工作方式#
RAG 分两个阶段运行。索引在预先阶段完成:文档被拆分为段落,例如通过语义分块进行拆分;每个段落会转换为一个嵌入,再将向量存储在向量数据库中。查询时,系统使用同一个模型将问题转换为嵌入,向量搜索会返回最接近的段落,然后系统根据指令、这些段落和问题构建提示词。随后,LLM 会根据所提供文本生成有依据的答案,并可为每项论述引用对应段落。
生产系统会在这一核心流程周围增加其他步骤。混合搜索结合向量相似度和关键词匹配,避免遗漏零件编号等精确术语;重排序器使用更精确的模型重新排列排名靠前的候选结果;上下文检索则让 LLM 在索引前为每个块添加一段简短说明,交代该块在文档中的位置。LangChain 和 LlamaIndex 等框架将这些组件封装在一起。
借助 Sentence Transformers 库,只需几行 Python 代码就能完成检索和增强步骤:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
# Knowledge base: passages the LLM never saw during training
passages = [
"Badge access to Building C requires a safety briefing completed within the last 12 months.",
"The cafeteria in Building A serves breakfast from 7:00 to 9:30 on weekdays.",
"Forklift operators must renew their certification every three years.",
]
passage_embeddings = model.encode(passages)
# Retrieve: embed the question and keep the most similar passage
question = "How often do I need to redo forklift training?"
scores = model.similarity(model.encode(question), passage_embeddings)[0]
context = passages[int(scores.argmax())]
# Augment: put the retrieved passage in the prompt the LLM will answer from
prompt = f"Answer using only this context.\nContext: {context}\nQuestion: {question}"
print(prompt)它会打印一段包含叉车认证段落的提示词;问题与该段落在语义上匹配:问题询问是否需要重新培训,而段落讲的是续期认证。任何 LLM 都可以根据该提示词作答,而且段落每天都可以更换,无需重新训练模型。
RAG 与微调及长上下文#
- 微调:使用新的样本更新模型权重。微调很适合改变行为、风格和输出格式,但不适合添加频繁变化的事实,而且无法提供可引用的来源,因此许多系统会用微调处理格式,并用 RAG 获取知识。
- 长上下文窗口:能够处理百万个 token 的模型可以直接读取大量文档,但每次查询都要为每个 token 付费,而且输入越长,准确率越低,这种现象称为上下文腐化。RAG 只会发送相关段落。
一些变体扩展了基本模式:GraphRAG 从知识图谱中检索,智能体式 RAG 让智能体决定何时以及在哪里搜索,而多模态 RAG 除了文本,还会检索图像、视频和音频。
RAG 的应用场景#
- 企业聊天机器人:内部助手根据政策、维基和以往的支持工单作答,并链接到答案所依据的段落。
- 客户支持:助手会在回复前检索客户具体产品型号的手册和该客户的订单历史记录。
- 医疗保健:临床助手会检索最新指南和药物参考资料,让答案指向可核查的来源,而不是依赖模型记忆。
RAG 也能回答有关视频的问题。LLM 无法针对每个问题都观看数小时的录像,因此将 RAG 与计算机视觉结合,可以先将录像转换为可检索的记录。Ultralytics YOLO26 在跟踪模式下会报告每一帧中各对象的类别、边界框和持久跟踪 ID,流水线会将这些信息存储为行。因此,对于“今天早上有多少辆卡车驶入 3 号装卸区?”这类问题,系统检索的是这些记录,而不是视频。
RAG 答案出错的原因#
RAG 可能在两个环节出错。检索失败意味着包含答案的段落没有进入提示词,原因可能是分块时将其拆开、嵌入模型没能匹配同义词,或该段落的排名刚好低于 top-k 截止位置;可以在一组测试问题上用 k 处的召回率进行衡量。生成失败则意味着正确的段落已经送达,但模型忽略、误读或反驳了它。Ragas 等评估库会评估这两个环节:用上下文召回率评估检索器,用忠实度评估生成器;忠实度指答案中的论述得到检索上下文支持的比例。










