周红伟:RAG 与知识检索

张开发
2026/6/22 15:36:07 15 分钟阅读
周红伟:RAG 与知识检索
RAGRetrieval-Augmented Generation检索增强生成是目前最主流的 LLM 落地架构之一。RAG 的核心思想是让 LLM 在回答问题时先从外部知识库中检索相关内容再基于检索结果生成回答而不是仅依赖模型训练时记住的知识。这解决了 LLM 的两个核心痛点知识截止日期模型不知道训练后发生的事和幻觉问题模型在不确定时会编造答案。RAG 基础原理一个完整的 RAG 系统由两条流水线组成离线索引流水线将文档预处理存入向量库和在线查询流水线接收用户问题、检索、生成。离线阶段将原始文档切分成小块通过 Embedding 模型转换为向量存入向量数据库。在线阶段将用户问题同样转换为向量从数据库中找到最相近的文档块拼接成上下文交给 LLM 生成答案。下图展示了 RAG 的完整请求流程用户提问Embedding转为查询向量向量数据库相似度检索 Top-KPrompt 拼接问题 文档块LLM 生成基于检索结果作答离线索引一次性预处理原始文档切分 / 清洗Embedding转为文档向量写入向量数据库在线查询流程每次请求都会经过数据预处理与文档切分Chunking前置挑战复杂文档解析在进行切分前RAG 往往面临着格式解析的挑战。特别是 PDF、Word 或扫描件中的表格、图片和多栏排版普通的文本提取极易造成语义错乱。目前行业主流方案是引入文档解析引擎如 LlamaParse、Unstructured或多模态大模型将复杂图文转换为结构化的 Markdown为后续高质量切分打下基础。文档切分策略文档切分是 RAG 效果的基础切分粒度直接影响检索质量。块太大会引入噪声块太小会丢失上下文。常用策略如下切分策略适用场景优点缺点固定大小切分通用文本实现简单速度快可能切断语义完整的句子递归字符切分结构化文本Markdown、代码优先按段落、句子等语义边界切分实现略复杂需设定合理的分隔符列表语义切分 (Semantic)长文档、书籍利用 Embedding 计算相邻句子的相似度自动寻找语义转折点切分计算成本高预处理速度慢父子文档检索(Small-to-Big)全面覆盖场景用小块进行高精度向量检索命中后返回对应的大块父文档给 LLM兼顾了检索精度和上下文完整性。数据库设计和维护成本翻倍实践中常在切分时加入重叠overlap即相邻块之间共享若干字符防止重要信息在边界处被截断。典型配置块大小 512 tokens重叠 50~100 tokens。实例使用 LangChain 进行递归切分from langchain.text_splitter import RecursiveCharacterTextSplittersplitter RecursiveCharacterTextSplitter(chunk_size512, # 每块最大 token 数chunk_overlap50, # 相邻块的重叠 token 数防止信息在边界处丢失separators[\n\n, \n, 。, ., , ] # 优先按段落、句子切分)chunks splitter.split_text(document_text)print(f切分为 {len(chunks)} 个文档块)向量检索Embedding 模型Embedding 模型负责将文本转换为稠密向量通常是 768 或 1536 维的浮点数数组。语义相近的文本在向量空间中距离更近这正是相似度检索的数学基础。常用 Embedding 模型对比模型维度适用语言特点text-embedding-3-smallOpenAI1536多语言性价比高适合大规模索引text-embedding-3-largeOpenAI3072多语言精度最高成本较高BAAI/bge-m31024中英文开源中文效果优秀支持多语言sentence-transformers/all-MiniLM-L6-v2384英文体积小速度快适合本地极轻量部署相似度计算与 ANN 算法检索的核心是度量距离。最常用的是余弦相似度Cosine Similarity它计算两个向量的夹角余弦值值域 [-1, 1]越接近 1 越相似。此外还有点积Dot Product和欧氏距离L2 Distance。为了在百万级向量中实现毫秒级检索数据库通常采用近似最近邻ANN算法如HNSW、IVF。HNSW 是目前最主流的算法它通过构建多层跳跃图网络牺牲极少的精度换取了数量级的搜索速度提升。Advanced RAG (进阶架构)基础架构Naive RAG常面临检索不准确、冗余信息多导致上下文淹没等问题。Advanced RAG 通过预检索优化 → 检索融合 → 后检索优化的三段式架构予以解决。1、预检索查询优化用户的原始问题往往表达不够精确查询改写Query Rewriting用 LLM 将口语化提问改写为规范化的检索词。HyDEHypothetical Document Embedding让 LLM 先盲猜一个假设性答案由于生成的答案通常比原问题包含更多行业术语用这个假设答案的向量去检索往往能召回更高质量的文档。2、混合检索Hybrid Search将向量检索懂语义容错率高与关键词检索BM25匹配度高的结果按权重融合。这在遇到专有名词、产品型号、代码片段时尤为重要因为传统的向量检索容易在特定的专有名词上翻车。3、后检索优化重排序Reranking这是一个粗排 → 精排的两阶段设计。向量检索虽然快但打分不够精确。重排序Reranking会引入Cross-Encoder 模型如 bge-reranker将问题和文档成对输入模型进行联合推理打分。它的运算量大只负责精选 Top-20 到 Top-5。实例重排序流程伪代码from sentence_transformers import CrossEncoderreranker CrossEncoder(BAAI/bge-reranker-v2-m3)# 1. 粗排向量检索极速召回 Top-50candidates vector_store.similarity_search(query, k50)# 2. 精排构建 [问题, 文档] 对进行精确打分pairs [[query, doc.page_content] for doc in candidates]scores reranker.predict(pairs)# 3. 筛选最终传入 LLM 的 Top-5ranked_docs sorted(zip(scores, candidates), reverseTrue)final_docs [doc for _, doc in ranked_docs[:5]]4、Self-RAG 与 CRAG修正式 RAG加入自我反思机制。例如 CRAGCorrective RAG在拿到检索结果后先由 LLM 充当评委打分。如果本地知识库查无此文或质量极低系统会自动触发 Web Search如 Google API作为补充大幅降低幻觉。GraphRAG知识图谱 检索融合传统 RAG 将知识库当作独立的文本碎片无法回答诸如找到所有同时由现任 CEO 创办且市值超千亿的公司这类需要跨文档、多跳推理的复杂问题。GraphRAG引入知识图谱Knowledge Graph将实体和关系显式建模。用户问题向量检索相关文档块图检索实体关系子图上下文融合文档块 图路径实体 A → 关系 → 实体 B实体 B → 关系 → 实体 CGraphRAG 核心步骤知识构建离线阶段使用 LLM 从文档提取三元组主体、关系、客体写入 Neo4j 等图数据库。双路检索针对提问中的实体不仅做传统的向量检索同时在图谱中触发图遍历Graph Traversal提取多跳关系链。图文融合生成将向量检索找回的片段与图检索找回的路径结构拼装进 Prompt使得 LLM 既具备全局视野又掌握具体细节。技术与数据库选型建议数据库/工具选型类型推荐落地场景Pinecone / Zilliz Cloud全托管云服务开箱即用不想维护基础设施。搭配 Cohere Rerank GPT-4o 是最快商用的方案。Qdrant开源 托管Rust 编写内存管理优秀性能极高。适合企业级私有化部署。Weaviate / Elasticsearch开源 托管自带极其成熟的 BM25 向量混合检索Hybrid Search专有名词较多的场景首选。Milvus开源分布式适合十亿至百亿级别的超大规模企业级检索平台。Chroma / FAISS本地库/嵌入式极轻量无需部署独立服务。非常适合本地开发、个人知识库项目验证。RAG 评估指标RAGAS 框架RAG 系统的评估不能仅凭直觉主流使用RAGAS框架从检索和生成两个维度进行自动化量化测试Context Recall检索召回率标准答案中的信息有多少比例能被检索到。Context Precision检索精确率检索到的文档中有多少比例是真正相关的。Faithfulness忠实度/幻觉指标生成的答案是否都有检索出的文档支撑。Answer Relevance答案相关性生成的答案是否真正回答了用户的问题避免答非所问。

更多文章