通用 AI 模型对世界了解甚多,却对你的业务一无所知。它从未见过你的产品手册、你的内部制度或上季度的报告。检索增强生成(retrieval-augmented generation,RAG)正是弥合这一鸿沟的技术:它让模型能够使用你自己的文档来回答问题,既准确又附带来源,而无需重新训练模型。本指南解释 RAG 是什么、如何工作,以及何时该使用它。
要点速览
- RAG 从你自己的内容中检索相关片段并放入 prompt,让模型基于你的知识作答,而不仅仅依赖其训练数据
- 它的原理是把文档转换成 embeddings,存入 vector database,并为每个问题检索最接近的匹配
- RAG 减少 hallucination 并让你能够引用来源,且相比 fine-tuning 更容易、更省钱地保持内容更新
- 对于大多数「懂我们资料的 AI」场景来说,它都是正确的模式:客服机器人、内部知识助手和文档问答
RAG 解决的问题
语言模型在商业应用中有两个局限:它们只知道训练数据中包含的内容(因此没有任何私有信息,也没有任何近期信息),而且它们可能会自信地编造内容。把你所有的文档塞进每一个 prompt 并不可行;内容太多,既慢又贵。RAG 通过为每个问题仅检索相关片段并把答案锚定其上,同时解决了这两个问题。
检索增强生成如何工作
分为两个阶段。
建立索引(做一次,并随内容变化更新):
- 把你的文档切分成大小合适的 chunk。
- 把每个 chunk 转换成一个 embedding ,即捕捉其含义的数值向量。
- 把这些向量存入 vector database。
检索与生成(在查询时):
- 把用户的问题转换成一个 embedding。
- 在 vector database 中搜索含义与问题最接近的 chunk。
- 把这些检索到的 chunk 作为上下文插入 prompt。
- 模型生成一个锚定于该上下文的答案,最好还能标注所用的来源。
由于检索依据的是含义而非精确关键词,即使措辞不同,RAG 也能找到相关内容。
为什么在大多数情况下 RAG 胜过 fine-tuning
fine-tuning 会在你的数据上调整模型的权重。它有其用武之地,但对于基于知识的问答,RAG 通常是更好的选择:
- 时效性: 更新一份文档并重新索引,答案立即更新。fine-tuning 需要重新训练才能反映变化。
- 成本: 建立索引远比反复进行 fine-tuning 便宜。
- 可控与可信: RAG 能展示其来源,因此答案可审计、更易被信任。经过 fine-tuning 的知识则不透明。
- 减少 hallucination: 把模型锚定在检索到的文本上,能让它更贴近事实。
fine-tuning 更适合教会模型一致的风格或格式,或狭窄的专门行为,而非让一整套知识保持更新。
什么让 RAG 系统变得优秀
RAG 概念简单,却很容易做砸。质量取决于:
- chunking 策略: chunk 太大会稀释相关性;太小则丢失上下文。把这一点做对很重要。
- 检索质量: 答案的好坏取决于检索到的 chunk。优质的 embeddings、合理的排序、有时还需 re-ranking,都会带来差异。
- prompt 设计: 你如何指示模型使用检索到的上下文(并在信息缺失时说出「我不知道」),决定了可靠性。
- 保持索引更新: 一条对已变更内容重新索引的流水线,能让答案长期保持准确。
常见应用场景
- 从你的文档中作答的客服机器人。
- 面向制度、wiki 和报告的内部知识助手。
- 面向合同、手册或研究的文档问答。
- 任何必须基于私有或频繁变化信息作答的助手。
关键要点
- RAG 通过在查询时检索相关片段,把 AI 的答案锚定在你自己的文档上。
- 它借助 embeddings 和一个 vector database 运作:索引一次,每个问题检索并生成。
- 在保持知识更新方面,RAG 在时效性、成本、可控与可信上都胜过 fine-tuning。
- 质量来自 chunking、检索、prompt 设计以及保持索引更新。
为你的企业加入懂知识的 AI
一套生产级 RAG 系统需要合适的 chunking、检索、prompting,以及一条能保持更新的索引流水线。AI 集成服务 以精心设计的 prompt 和成本控制,将由 RAG 驱动的知识库和其他智能功能构建进你现有的应用,而 OpenAI API 集成服务 则专门覆盖基于 RAG 的助手。如果你从对话式界面起步,参见使用 OpenAI API 构建 AI 聊天机器人 。若想更全面地了解如何采用 AI,面向英国中小企业的 AI 集成指南 是不错的起点。
常见问题(FAQ)
什么是检索增强生成(RAG)? RAG 是一种让 AI 模型能够使用你自己的文档作答的技术。它从你的内容中检索最相关的片段并放入 prompt,让模型基于你的知识作出回应,而不仅仅依赖其训练数据。
RAG 与 fine-tuning 有何不同? RAG 在查询时检索相关内容并把答案锚定其上,因此更新即时生效,且可以引用来源。fine-tuning 会改变模型的权重,需要重新训练才能反映新信息。RAG 更适合保持知识更新;fine-tuning 更适合一致的风格或狭窄的行为。
RAG 能阻止 AI 的 hallucination 吗? 它通过把答案锚定在检索到的事实上,显著减少 hallucination,并让你能够引用来源,使答案可审计。它并不能完全消除 hallucination,因此良好的 prompting 仍然重要(包括指示模型在不知道时如实说明)。
什么是 vector database,RAG 为什么需要它? vector database 存储 embeddings,即你文档 chunk 的数值表示,并找出含义与某个问题最接近的那些。RAG 用它基于含义而非精确关键词匹配来快速检索相关上下文。
构建一个 RAG 系统我需要什么? 你的源文档、一条 chunking 与 embedding 流水线、一个 vector database,以及一个检索相关 chunk 并据此向模型发出 prompt 的应用。较难的部分是 chunking 策略、检索质量和保持索引更新。
评论