RAG是什么
1. RAG 的工作流程(分步骤拆解)
RAG 的实现通常分为 数据准备、检索、增强生成 三个阶段:
(1) 数据准备阶段
● 目标:构建可检索的外部知识库。
● 关键步骤:
○ 数据收集:从文档、数据库、网页等渠道获取原始数据(如 PDF、HTML、JSON)。
○ 数据清洗:去除噪声(广告、重复文本)、标准化格式(统一时间、单位)、分块(将长文本切分为 100-500 词的片段)。
○ 向量化:使用嵌入模型(如 OpenAI 的 text-embedding-ada-002、Sentence-BERT)将文本转换为高维向量(例如 768 维)。
○ 存储到向量数据库:将向量与原文关联,存入专用数据库(如 FAISS、Pinecone、Milvus)。
(2) 检索阶段
● 目标:根据用户问题找到最相关的文本片段。
● 实现细节:
○ 问题向量化:将用户输入的查询(Query)转换为向量。
○ 相似度计算:在向量数据库中搜索与问题向量最接近的文本向量。常用算法:
■ 余弦相似度:衡量两个向量方向的一致性。
■ 近似最近邻(ANN):牺牲少量精度以提升检索速度(如 FAISS 的 HNSW 算法)。
○ 返回 Top-K 结果:通常返回前 3-5 个最相关的文本片段作为上下文。
(3) 生成阶段
● 目标:结合检索结果生成最终回答。
● 实现细节:
上下文拼接:将用户问题与检索到的文本片段拼接为模型输入,例如:
根据以下信息回答问题:{检索到的文本},问题:{用户输入}"
○ 生成模型推理:使用大语言模型(如 GPT-4、Llama 2)生成回答。模型会同时参考:
■ 自身预训练的知识(参数中的通用知识)。
■ 检索到的上下文(动态注入的领域知识)。
2. 技术组件详解
(1) 嵌入模型(Embedding Model)
● 作用:将文本映射到向量空间,使语义相似的文本在向量空间中距离更近。
● 常用模型:
○ 通用领域:OpenAI 的 text-embedding-ada-002、Google 的 Universal Sentence Encoder。
○ 专业领域:可微调开源模型(如 BERT、RoBERTa)以适应医疗、法律等垂直领域。
(2) 向量数据库(Vector Database)
● 核心功能:
○ 高效存储和检索高维向量。
○ 支持大规模数据(百万级以上)的实时搜索。
● 技术对比:
数据库 特点
FAISS Facebook 开源,适合静态数据集,需全量加载到内存
Pinecone 云托管服务,支持动态更新,自动处理索引优化
Milvus 开源分布式系统,支持海量数据,可扩展性强
(3) 生成模型(Generation Model)
● 模型选择:
○ 闭源模型:GPT-4(效果最佳但成本高)、Claude 2。
○ 开源模型:Llama 2、Falcon(可私有化部署,适合数据敏感场景)。
● 提示工程优化:
设计模板(Prompt Template)明确指令,例如:
"你是一个专业助手,请根据以下文档内容回答问题,如果信息不足则回答'不确定':{检索结果}"
○ 控制生成参数(temperature=0.3 减少随机性,max_tokens=500 限制长度)。
3. 高级优化策略
(1) 检索优化
● 混合检索:结合语义检索(向量相似度)与关键词检索(BM25 算法),提升召回率。
● 重排序(Rerank):使用小型模型(如 Cohere 的 Rerank API)对 Top-100 结果重新排序,选择 Top-3。
● 多跳检索(Multi-hop):迭代检索,例如先检索“气候变化的原因”,再根据结果检索“温室气体种类”。
(2) 生成优化
● 知识蒸馏:用大模型生成的数据训练小模型,降低成本。
● 自我验证(Self-Check):让模型在生成后检查回答是否与检索内容一致。
● 多模态扩展:检索图片、表格等非文本数据,生成图文并茂的回答(如 GPT-4V)。
4. 实际案例:医疗问答系统
(1) 场景需求
● 用户输入症状描述,系统给出可能的疾病及建议。
● 需确保回答基于最新医学指南,避免误导。
(2) RAG 实现
● 知识库:PubMed 论文、临床指南(更新至 2023 年)。
● 检索:使用 BioBERT(医学领域嵌入模型)检索相关段落。
生成:输入提示词:
"你是一名医生,根据以下最新研究回答患者问题,避免使用过时知识:
{检索到的医学文献}
问题:{患者描述的症状}"
● 输出控制:模型生成回答后追加免责声明(“本建议仅供参考,请咨询专业医生”)。
5. RAG 的挑战与解决方案
挑战 解决方案
检索质量差(噪声多) 增加数据清洗步骤,使用领域专用嵌入模型
生成与检索内容不一致 在提示词中强制要求引用检索结果,或添加后处理校验模块
实时性要求高(延迟敏感) 使用 GPU 加速向量检索,或预缓存热门查询的检索结果
多语言支持 使用多语言嵌入模型(如
paraphrase-multilingual-mpnet-base-v2)
6. RAG vs 微调(Fine-tuning)
● RAG 的优势:
○ 无需重新训练模型,成本低。
○ 知识可追溯(知道答案来自哪篇文档)。
● 微调的优势:
○ 更适合学习特定风格(如法律文书格式)。
○ 推理速度更快(无需检索步骤)。
● 混合方案:先微调模型适应领域,再结合 RAG 注入实时数据。
7. 工具链推荐
● 全流程框架:
○ LangChain:支持 RAG 流程编排,集成多种数据库和模型。
○ LlamaIndex:专为 RAG 优化,提供高效的数据连接器。
● 本地部署:
○ 嵌入模型:HuggingFace 的 all-MiniLM-L6-v2(轻量级开源模型)。
○ 向量数据库:Chroma(简单易用)、Weaviate(支持语义与关键词混合检索)。
通过以上细节,RAG 不仅是一个技术框架,更是一种平衡静态知识与动态信息的解决方案,正在成为企业级 AI 系统的核心组件