外观
RAG 简介
约 3809 字大约 13 分钟
2025-09-04
检索增强生成 RAG
检索增强生成(Retrieval-Augmented Generation,简称 RAG)是一种将信息检索技术与大语言模型(LLM)的生成能力相结合的人工智能架构。它的核心思想是让模型在生成回答之前,先从外部知识库中检索相关信息,并基于这些信息来生成更准确、更可靠的响应。
- 检索(Retrieve):当用户提出问题时,系统首先使用嵌入模型(Embedding Model)将查询转换为高维向量(vector),然后在向量数据库(Vector Database)中检索与问题向量最相似的文档或文本片段。常用的检索技术包括基于稀疏向量的检索(如 BM25)和基于稠密向量的检索(如使用预训练语言模型生成的嵌入向量)。
- 增强(Augment):将检索到的相关信息(上下文)与用户的原始问题拼接起来,形成一个内容更丰富、语境更明确的提示(Prompt)。这一步旨在为生成模块提供更优质的输入。
- 生成(Generate):将增强后的提示输入给大语言模型(如 GPT、T5 等),模型会结合检索到的上下文和自身知识生成最终连贯、准确且有针对性的回答。
使用 RAG 的原因
检索增强生成(RAG)非常重要,并且成为许多大型语言模型(LLM)应用的必要组成部分,主要是因为它能有效弥补 LLM 的固有缺陷,并显著提升其在真实场景中的实用性、准确性和可靠性。
为了更直观地了解 RAG 如何弥补 LLM 的不足,可以参考下表:
LLM 的核心局限性 | RAG 提供的解决方案 |
---|---|
知识过时 (Knowledge Cutoff) | 通过检索外部最新信息,确保模型能获取实时数据、研究报告或新闻,无需重新训练模型。 |
事实性错误/幻觉 (Hallucination) | 要求 LLM 基于检索到的、可验证的外部证据生成答案,极大减少了虚构或错误信息的产生。 |
处理非公开/专有数据能力弱 | 可以连接企业内部的文档、数据库、知识库,使 LLM 能够基于私有数据回答问题,同时保障数据安全(数据无需上传至第三方训练)。 |
可追溯性差 (Lack of Traceability) | 生成答案时可以附带引用来源,用户能自行查验原始资料,增强了透明度和信任度。 |
细分领域专业知识不足 | 通过接入特定领域的专业知识库(如医疗、法律、金融),赋能 LLM 完成高度专业化的任务,使其成为领域“专家”。 |
上下文窗口限制 | 通过精准检索最相关的信息片段,避免将过长文本全部塞入上下文,优化信息使用效率(但检索质量本身也面临挑战)。 |
RAG 的优势与必要性
RAG 的重要性体现在以下几个关键方面:
提升答案准确性与可靠性:RAG 让 LLM 的生成过程建立在从外部知识库检索到的、可验证的事实信息之上,而非仅仅依赖其内部可能不完整、过时或错误的参数化记忆。这极大地减少了模型“幻觉”(编造事实)的现象。
支持知识实时更新,成本低廉:LLM 的训练数据是静态的,且有截止日期。RAG 通过连接外部知识源(如最新研究报告、新闻、实时数据库),无需耗费巨资重新训练或微调模型,就能让 LLM 获取最新信息。这与“微调”(Fine-tuning)相比,是一种更经济、更灵活的知识更新方式。
赋能特定领域与私有数据应用:企业可以利用 RAG 轻松构建基于自身知识库(如产品手册、公司制度、项目文档)的智能问答系统、客服机器人或内部专家系统。LLM 无需在训练时接触这些敏感私有数据,只需在推理时检索,更好地保障了数据安全。
增强透明度和可信度:RAG 系统可以提供其生成答案所依据的信息来源或引用。用户和开发者可以追溯和核查这些原始资料,增强了模型输出的可解释性,有助于建立用户信任。
更好的成本效益:与动辄需要大量算力进行全模型微调相比,构建和维护一个 RAG 系统的成本要低得多,且更灵活。
RAG 的典型应用场景
RAG 的优势使其在多个场景中变得至关重要:
- 智能客服与问答系统:基于最新的产品文档和知识库,提供准确且可溯源的客服体验。
- 企业知识管理:员工可快速查询分散在大量内部文档、手册、邮件中的信息。
- 内容创作与辅助研究:快速整合多源信息(如最新报道、学术论文),辅助生成报告、文章或进行摘要。
- 专业领域决策支持:在医疗、法律、金融等领域,基于最新指南、法规文献和案例提供辅助信息。
RAG 的工作原理
检索增强生成(RAG)通过结合信息检索和大语言模型生成的优势,来产生更准确、可靠的回答。其核心在于让模型在生成答案前,先从外部知识库中查找相关信息。
RAG 的工作流程,主要包括 索引(预处理) 和 查询(检索与生成) 两个核心阶段
索引 - 知识库预处理
索引(Indexing)阶段旨在将原始文档转化为便于快速检索的结构化格式,为后续查询做准备:
- 文档加载:从各种来源(如 PDF、Word、网页、数据库)加载原始文档。
- 文本分块:将长文档切割成更小的、语义相关的文本片段(chunks)。这是因为直接处理长文档效率低,且容易丢失关键信息。常见的分块策略包括:
- 固定长度分块:按固定 token 数或字符数拆分。
- 按语义单元分割:根据句子、段落、章节等自然边界拆分。
- 重叠分块:让相邻分块保留部分重叠内容,以避免割裂完整语义。
- 向量化:使用Embedding 模型将每个文本块转换为高维向量(embeddings)。这些向量能够捕捉文本的语义信息,语义相近的文本其向量也相似。
- 存储:将生成的向量及其对应的原始文本块存储到向量数据库(如 FAISS、Chroma、Milvus、Pinecone 等)中,并建立索引以供高效检索。
查询 - 响应用户问题
在查询(Query)阶段,当用户提出问题时,系统执行以下步骤:
- 查询向量化:使用与索引阶段相同的 Embedding 模型,将用户查询转换为向量。
- 检索:在向量数据库中,通过计算相似度(如余弦相似度、欧氏距离),查找与查询向量最相似的 Top-K 个文本块。
- 上下文构建:将检索到的多个文本块组合成增强的上下文信息。
- 生成答案:将原始用户查询和检索到的上下文一同填入预设的提示模板,然后提交给大语言模型(LLM)。LLM 会基于这些信息生成最终答案,并可能注明引用来源。
与传统搜索的区别
检索增强生成(RAG)和传统搜索引擎在目标和技术上都有所不同。简单来说,传统搜索引擎更像一个庞大的“图书馆管理员”,它帮你快速找到可能相关的书籍(网页链接),但需要你自己翻阅和整理信息;而 RAG 则像一个 “专业顾问”,它不仅会查找资料,还会理解你的问题, 整合信息,并直接给你一个组织好的、有据可循的答案。
特性维度 | 传统搜索引擎 | 检索增强生成 (RAG) |
---|---|---|
核心目标 | 快速查找和排序相关网页/文档 | 理解问题并生成直接、连贯的答案 |
输出形式 | 网页链接列表(需用户自行筛选、阅读和整合) | 结构化的文本答案(可直接使用,并可附引用来源) |
知识处理方式 | 知识存储于外部网页索引数据库,通过关键词匹配和页面排序算法(如 PageRank)进行检索 | 结合外部知识库检索(提供最新、专有知识)和大语言模型内部参数化知识(提供通用知识和语言能力)进行综合生成 |
交互方式 | 单次关键词查询,缺乏上下文记忆 | 支持多轮对话,能理解上下文并进行追问澄清 |
信息时效性 | 通过爬虫持续更新,通常时效性较好 | 严重依赖其连接的知识库。若知识库及时更新,则时效性好;若依赖模型内部知识,则可能滞后 |
可解释性 | 结果排序有算法依据,但为何某个链接更相关有时不透明 | 可提供答案引用的来源文档,增强答案的可信度和可验证性 |
适用场景 | 查找已知网页、获取实时新闻、进行广泛的研究初期资料收集 | 快速获取精准答案、复杂问题解答、内容创作与总结、基于特定知识库的专业问答(如智能客服、企业知识管理) |
如何使用 RAG
核心流程与关键组件
一个基本的 RAG 系统工作流程可以概括为:准备知识库 → 检索相关信息 → 增强提示并生成答案。
组件 | 作用 | 常见选择 |
---|---|---|
知识库/数据源 | 提供检索的原始文本信息 | 你的文档(TXT, PDF, Word)、数据库、网站等 |
嵌入模型 (Embedding Model) | 将文本转换为数值向量(嵌入),以捕捉语义 | Sentence-BERT、OpenAI text-embedding-ada-002 、BGE |
向量数据库 (Vector Database) | 存储向量,并支持高效的相似性搜索 | FAISS (本地), Chroma (本地), Pinecone (云服务) |
大语言模型 (LLM) | 根据“问题+检索到的上下文”生成最终答案 | OpenAI GPT 系列 (API 调用), Llama 2/3 (可本地部署), ChatGLM (中文友好) |
开发框架 (可选但强烈推荐) | 提供工具链和标准化接口,简化开发流程 | LangChain, LlamaIndex, Haystack |
使用步骤
- 数据预处理:将原始文档(如 PDF、Word、TXT)加载并分割成较小的文本片段(Chunking),以便后续处理和检索。 之后使用嵌入模型将每个文本块转换为向量。
- 构建检索系统:将生成的向量存入向量数据库(如 FAISS、Chroma),并建立索引以备快速检索。
- 实现检索与生成:当用户提问时,将问题也转换为向量,并在向量数据库中检索最相似的文本片段。然后将检索到的文本和原始问题一起组合成一个增强的提示(Prompt),发送给 LLM 生成最终答案。
开发工具及应用软件
使用或开发 RAG 系统,你需要一系列工具和框架来协同工作。
工具类别 | 核心作用 | 主流选择与推荐(含国产优选) | 特点与适用场景 |
---|---|---|---|
核心开发框架 | 提供构建 RAG 流程的高级抽象和组件编排 | LangChain: 模块化设计,组件丰富,社区活跃,非常适合快速原型开发和构建复杂应用。 LlamaIndex: 专注于数据索引和检索,提供多种高级索引结构,适合构建高性能 RAG 系统。 Haystack: 模块化设计,面向生产环境,与 Elasticsearch 等企业级搜索引擎集成良好。 | LangChain 易上手且生态繁荣;LlamaIndex 在检索性能上可能更优;Haystack 则为企业级应用提供了强大支持。 |
向量数据库 | 存储文本向量并支持高效相似性搜索 | Milvus: 分布式架构,支持十亿级向量规模,延迟可低至毫秒级,适用于超大规模企业级场景。 腾讯云 VectorDB: 支持千亿级向量,国产化适配(信创生态),适合企业私域知识库、金融/政务 AI 应用。 Pinecone: 全托管云服务,无需运维,开箱即用,适合生产环境。 Chroma: 轻量级,易用,非常适合本地开发和测试。 PgVector (PostgreSQL 扩展): 适合中小规模向量检索、现有 PG 生态升级。 | 企业级大规模场景可选 Milvus 或腾讯云 VectorDB;需要全托管服务可考虑 Pinecone;快速原型开发和小规模应用可选 Chroma 或 PgVector。 |
嵌入模型 (Embedding) | 将文本转换为数值向量(嵌入),以捕捉语义 | OpenAI Embeddings (如 text-embedding-ada-002 ): 效果出色,使用简便,但需 API 调用且有成本。Sentence Transformers (如 BGE-large-zh , all-MiniLM-L6-v2 ): 开源免费,可本地部署,需计算资源。BGE 系列针对中文优化效果显著。商汤 Piccolo2: 在中文评测中表现优异,支持长文本。 | 根据数据敏感性、成本和性能需求选择。开源模型(如 BGE、Piccolo2)适合敏感数据或控制成本,OpenAI 的模型则适合快速获得高质量结果。 |
大语言模型 (LLM) | 根据检索到的上下文生成最终答案 | OpenAI API (GPT-3.5-turbo, GPT-4): 生成质量高,易用,但需付费且数据需出境。 开源模型 (Llama 2/3, ChatGLM, Qwen): 可本地部署,数据可控,但对硬件有要求。 国产大模型 API: - 腾讯混元(腾讯):在高质量的内容创作、数理逻辑、代码生成、多轮对话、图像与视频生产上性能表现优越。 - 文心一言(百度):中文综合能力领先。 - 通义千问(阿里云):信息检索与多语言翻译能力领先,性价比高。 - Kimi(月之暗面):长文本处理能力突出。 - DeepSeek-R1(深度求索):数学推理能力强大,响应速度快。 - 豆包(字节跳动):多模态交互功能丰富,生态完善。 | API 方式简单快捷;本地部署开源模型则更注重数据隐私和成本控制。国产大模型在中文场景下各有优势,可根据具体需求(如长文本、推理、多模态)选择。 |
数据处理与评估 | 文档加载、解析、分块,以及系统效果评估 | 文档加载: PyPDF2, Unstructured, BeautifulSoup。 文本分块: LangChain Text Splitters。 RAG 评估框架: RAGAs, DeepEval: 用于量化评估 RAG 系统各环节质量(如答案相关性、忠实度)。 | 这些工具帮助处理原始数据并衡量 RAG 系统的表现,对于迭代优化至关重要。 |