跳转到内容

RAG for AIGC: 检索增强生成在 AI 生成内容中的应用 — 学习笔记

待复核

这篇是 RAG for AIGC 的综述(arXiv:2402.19473),不是单一新算法。

RAG = Retrieval-Augmented Generation(检索增强生成)。日常类比:开卷考试——先翻准许带进考场的资料,再答题;不是靠把整本教材背进脑子。

模型不只靠参数里的记忆回答,而是带着检索结果一起生成。资料库更新后,系统就能用新资料,而不必每次都重新训练大模型。

AIGC(AI 生成内容)比问答更宽:文本、代码、图像、音频、视频、3D、科学发现等。综述关心的是:RAG 如何作为一类方法,服务不同模态与不同生成任务。

一句话记住:先找齐准考证上允许带的材料,再动笔;材料错了,文笔再好也是开卷考砸。

不理解 RAG,下面这些事很难解释:

  • 为什么模型知识会过期,而换资料库往往比重新训练便宜
  • 为什么长尾事实不稳定,却能靠外部证据补上
  • 为什么企业常把「检索 + 生成」当成 LLM 应用的常见默认架构(不是唯一,但是高频)
  • 为什么 AIGC 要把「生成」和「素材库」连在一起,而不只拼一句漂亮 prompt

生成模型还有隐私与训练成本问题:RAG 提供一条工程上可用的路径——知识放库里,模型负责读懂与组织。

在 AIGC 场景里,同一套「先检索再生成」还能接到素材库:品牌色板、历史成片、内部设计规范,都可以成为检索对象,而不必写进模型权重。

  1. RAG 不只是文本问答——也可服务图像、代码、音乐、多模态生成。类比:开卷资料可以是书,也可以是样张、图纸、旧作业。

  2. 检索对象不一定是文档——图片、视频片段、代码文件、知识图谱节点、过往生成样例都行。

  3. 注入阶段不同——有的把资料拼进 prompt;有的在 latent representation 层注入;有的把检索器与生成器联合训练。

  4. 质量取决于四环节:检索 → 重排 → 上下文组织 → 生成。只优化模型本身通常不够;任一环掉链子,最终答案都可能错。

工程上常把「重排」当成性价比最高的旋钮:检索多拿一点(如 top_k=20),重排后再截断到模型真正读得完的 3–5 段,往往比盲目加大模型更管用。

案例 1:企业知识库问答(文本 RAG)

Section titled “案例 1:企业知识库问答(文本 RAG)”

用户问产品配置问题。一条最小流水线:

q = "产品 X 的限流默认值?"
chunks = retrieve(index, q, top_k=8) # 段落向量检索
chunks = rerank(q, chunks)[:4] # 重排后只留最相关 4 段
answer = generate(q, context=chunks)
if not supported(answer, chunks): say("资料不足,无法确认")

步骤含义:转 query → 检索 → 重排 → 生成 → 无证据则拒答。chunk 常见 200–500 token,重叠约 10–20%;top-k 过大容易把窗口塞满噪声。

评测时不要只看 BLEU/流畅度:抽 20 条问答,人工标「引用是否支持结论」。支持率上不去,先查索引与切分,而不是先换 LLM。

检索对象可以是参考图。系统先找相似风格或构图,再用这些参考约束生成(例如拼 caption、IP-Adapter 一类条件)。

若检索错了风格,后面再强写 prompt 也难救——开卷考试翻错章节,作文再通顺也偏题。

案例 3:代码生成检索仓库上下文

Section titled “案例 3:代码生成检索仓库上下文”

检索对象是仓库里的接口定义与旧实现。生成补丁时,把命中的函数签名、测试、相邻文件放进上下文。

仓库很大时,先按路径 / 符号过滤,再做向量检索,避免 top-k 全是无关文件。资料里没有答案时,应承认不知道,而不是编造 API。

三个案例共用同一纪律:检索对象要匹配任务模态;上下文要短而准;生成必须可对照证据。缺纪律的「RAG」只是把搜索框和聊天框用胶带粘在一起。

  1. 检索到错误资料——生成模型会把错误证据说得很自然。
  2. 资料太多——上下文窗口被噪声占满,模型反而更容易跑偏。
  3. chunk 切分粗糙——一个定义被切断,检索结果看起来相关但缺关键前提。
  4. 只看答案流畅度——RAG 应评估引用是否支持结论,而不是只看文字好不好看。
  5. 把 RAG 当数据库替代品——精确事务、权限和结构化查询仍然需要正常系统设计。

补一句操作建议:上线前用「故意塞错文档」做对抗抽检——若模型仍一本正经引用,说明你还缺拒答与引用校验,而不是缺更大的模型。

适用

  • 知识经常变化:客服、法规、内部文档、产品手册、研究资料
  • 有明确外部语料的生成:按品牌素材写文案、按代码仓库给补丁建议
  • 需要可追溯证据、方便人工审核的场景

不适用

  • 完全没有资料库的开放创作
  • 检索库质量很差(RAG 会把噪声放大)
  • 需要强一致事务 / 权限的操作系统式查询
  • top-k 命中里无关段长期占比很高(例如 >50%)却不治理索引与重排

若你的主需求是「精确查表 / 下单 / 改权限」,先做正常 API 与数据库;RAG 最多当解释层,不要当事务层。

  • 早期 NLP 系统常把检索和生成分开:搜索引擎找资料,摘要系统压缩资料。
  • 神经生成模型兴起后,人们一度希望模型自己记住所有知识——更新慢,也难以解释来源。
  • REALM、RAGRETROAtlas 等工作把检索重新接回神经生成。
  • 这篇综述站在更晚的位置,把这些路线扩展到 AIGC 全域。
  • 它说明 RAG 不只是问答技巧,而是一种生成系统架构。
  1. RAG 的核心不是「把搜索结果塞进 prompt」,而是把外部知识变成生成过程的一等输入。
  2. 做系统要同时关心四层:资料库是否可信、检索是否找对证据、上下文是否适合模型阅读、生成是否忠实于证据。
  3. 先治理 chunk / 索引 / 重排,再谈换更大模型。
  4. 无证据时拒答,往往比流畅胡编更有用。

开卷考试的胜负,多半不在文笔,而在目录、书签和你敢不敢写「本题材料不足」。RAG 工程也一样。

把这句话贴在评测看板旁边,比再加一条「提升流畅度」的 KPI 更有用。

  • rag-lewis-2020:检索增强生成的经典入口。
  • REALM:把检索接入预训练阶段。
  • retro:用海量检索邻居增强语言模型。
  • atlas-2022:端到端训练检索器和生成器。
  • self-rag-2023:让模型学习什么时候检索和自检。
  • graphrag:用知识图谱组织检索对象的一条工程路线。
  • rag-lewis-2020 —— 文本 RAG 奠基,本综述的上游经典
  • retro —— 检索邻居扩上下文的规模化路线
  • atlas-2022 —— 检索器与生成器联合训练
  • self-rag-2023 —— 模型自己决定何时检索
  • replug-2023 —— 检索黑盒增强 LM 的一条支线
  • graphrag —— 微软知识图谱 + RAG 的工程化探索

(暂无反向链接)