RAG技术全解析:从入门到企业级应用实践

张开发
2026/4/22 9:43:57 15 分钟阅读

分享文章

RAG技术全解析:从入门到企业级应用实践
一、为什么需要RAG大语言模型LLM虽然强大但存在三个致命缺陷-知识截止日期训练数据截止后的事件一概不知-幻觉问题对未知问题会“一本正经地胡说八道”-私有数据无法访问企业内部文档、最新资讯无法融入RAGRetrieval-Augmented Generation检索增强生成应运而生——在用户提问时先从外部知识库中检索相关文档片段再连同问题一起交给大模型生成答案。 一句话定义RAG 检索(相关文档) 生成(基于文档问题)二、RAG核心流程三阶段阶段1索引离线准备1.文档切分将PDF/Word/网页切分成小段落chunk2.向量化用Embedding模型将每个chunk转为向量3.存储存入向量数据库同时保留原始文本阶段2检索在线查询1. 用户问题 → Embedding模型 → 问题向量2. 向量数据库相似度搜索 → 召回Top-K个最相关chunk阶段3生成在线回答1. 构造Prompt基于以下资料\n{chunks}\n\n回答问题{question}2. 大模型生成答案可附带引用来源三、技术栈选型环节开源方案商业/云方案Embedding模型BGE-large-zh, text2vec, m3eOpenAI text-embedding-3, 智谱Embedding向量数据库Chroma, Qdrant, MilvusPinecone, 阿里云ADB大模型ChatGLM3, Qwen, YiGPT-4o, Claude, 文心一言编排框架LangChain, LlamaIndexDify, Coze新手推荐组合LangChain Chroma OpenAI API或国内智谱/通义千问四、手把手实战从零构建一个RAG问答系统环境准备pip install langchain chromadb openai tiktoken pypdf完整代码示例中文知识库from langchain.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.chat_models import ChatOpenAI from langchain.chains import RetrievalQA # 1. 加载文档以PDF为例 loader PyPDFLoader(company_handbook.pdf) documents loader.load() # 2. 切分文档关键参数chunk_size, overlap text_splitter RecursiveCharacterTextSplitter( chunk_size500, # 每块500字符 chunk_overlap50, # 重叠50字符避免上下文断裂 separators[\n\n, \n, 。, , , , , ] ) chunks text_splitter.split_documents(documents) # 3. 向量化并存入Chroma embeddings OpenAIEmbeddings() # 或替换为本地模型 vectorstore Chroma.from_documents( documentschunks, embeddingembeddings, persist_directory./chroma_db # 持久化 ) # 4. 构建检索器retriever retriever vectorstore.as_retriever( search_typesimilarity, # 也可用mmr最大边际相关性 search_kwargs{k: 4} # 召回4个相关片段 ) # 5. 构建问答链 llm ChatOpenAI(modelgpt-3.5-turbo, temperature0) qa_chain RetrievalQA.from_chain_type( llmllm, chain_typestuff, # stuff, map_reduce, refine, map_rerank retrieverretriever, return_source_documentsTrue # 返回引用来源 ) # 6. 提问 response qa_chain(公司年假有多少天) print(response[result]) print(引用资料, response[source_documents])关键参数调优建议-chunk_size中文建议256~512字符英文200~400token-chunk_overlap一般为chunk_size的10%~20%-k值通常4~10知识库越杂越大可适当增大-temperature问答任务建议0~0.3避免发散五、进阶优化技巧让RAG真正可用技巧1混合检索Hybrid Search纯向量检索可能忽略关键词精确匹配。使用**向量检索 BM25关键词检索**再通过RRF倒数排名融合合并结果。# 使用LangChain的EnsembleRetriever from langchain.retrievers import EnsembleRetriever from langchain.retrievers import BM25Retriever bm25_retriever BM25Retriever.from_documents(chunks) ensemble_retriever EnsembleRetriever( retrievers[bm25_retriever, vectorstore.as_retriever()], weights[0.4, 0.6] # 权重分配 )技巧2重排序Re-ranking初次召回Top-20用更精准的交叉编码器模型重新打分取Top-4。可大幅提升相关性。pythonfrom sentence_transformers import CrossEncoder reranker CrossEncoder(BAAI/bge-reranker-large) # 对召回结果计算相关性分数重新排序技巧3查询改写Query Rewriting用户原始问题可能模糊或指代不清。先用大模型改写为更明确的检索查询。rewrite_prompt 请将以下问题改写为更清晰、便于检索的形式{question} rewritten llm.invoke(rewrite_prompt) # 用rewritten去检索技巧4多路检索 融合同时检索向量库、关键词索引、SQL数据库、API最后融合结果。技巧5Self-RAG自我反思让大模型在生成过程中判断“是否需要检索”、“检索结果是否足够”、“回答是否基于事实”动态决策。六、常见问题与解决方案问题现象根本原因解决方案回答漏掉关键信息切分过大或过小相关片段被截断调整chunk_size增大k值答案与问题无关检索召回质量差改用混合检索重排序出现“根据提供资料...”却无内容检索结果为空设置fallback回答如“未找到相关信息”回答不准确/幻觉大模型未严格遵循检索内容强化Prompt约束要求“仅基于以下资料回答”响应速度慢大模型调用耗时缓存常见问题用小模型做第一轮筛选知识更新不及时索引未重建实现增量更新定时重建索引七、RAG vs 微调Fine-tuning如何选择维度RAG微调知识更新实时只需更新文档库需重新训练成本高可解释性可溯源到原始文档黑盒难以解释幻觉问题低强约束在检索内容上中高个性化风格难需在Prompt中调易模型学习风格计算成本低仅推理检索高训练推理典型场景企业知识库、客服、法律文档特定格式生成、角色扮演、风格模仿最佳实践RAG为主微调为辅。对核心风格或特殊格式要求可微调一个轻量LoRA对知识类任务RAG足够。八、高级架构RAG在企业级落地的演进简单RAGNaive RAG索引 → 检索 → 生成× 问题检索质量不稳定长上下文丢失模块化RAGModular RAG- 新增查询规划器复杂问题拆解为多步检索-检索后处理重排序、压缩提取关键句-生成后验证用大模型自我检查是否忠实于资料记忆增强RAGMemRAG- 维护短期对话记忆和长期知识记忆- 典型框架RAPTOR递归抽象树检索Agentic RAG- 检索不再是一次性而是Agent可以**主动决定**何时检索、检索什么、调用哪些工具SQL、API、Web搜索- 代表LangGraph、LlamaIndex的Agent模式九、评估RAG系统的方法评估维度指标如何计算检索相关性Hit Rate, MRR, NDCG人工标注或利用大模型评估生成忠实度是否产生幻觉用NLI模型或LLM-as-Judge答案正确性Exact Match, F1有标准答案时使用端到端响应时间P99延迟系统监控推荐开源评估框架RAGAS、ARES、TruLens# RAGAS示例 from ragas import evaluate from ragas.metrics import faithfulness, answer_relevancy, context_relevancy result evaluate( datasetyour_dataset, metrics[faithfulness, answer_relevancy, context_relevancy] )十、学习资源与延伸阅读必读论文1.RAG原始论文Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (Lewis et al., 2020)2. Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection (Asai et al., 2023)3. RAPTOR: Recursive Abstractive Processing for Tree-Organized Retrieval (Sarthi et al., 2024)开源项目-LangChain- 最流行的编排框架-LlamaIndex- 专为RAG优化的数据框架-RAGFlow- 开箱即用的RAG平台-QAnything- 网易开源的RAG引擎博客/视频- Building RAG from Scratch (LangChain官方教程)- Advanced RAG Techniques (Pinecone工程博客)十一、写在最后RAG的未来RAG正在从“文档检索 LLM”演变为多模态RAG检索图像、表格、音频、交互式RAG用户反馈实时调整检索策略和分布式RAG企业级联邦检索。掌握RAG意味着掌握了让大模型落地生产环境的核心钥匙。RAG不是万能的但没有RAG的大模型应用是万万不能的。

更多文章