Skip to content

核心模块 ​

把 RAG 流水线拆成独立模块后,每个模块都有清晰的接口、实现选项和工程权衡。下面按数据流顺序逐一说明。

1. Document Loader ​

职责:从多种来源读取原始文档并附带元数据。

  • 来源:S3、GCS、OSS、SharePoint、Confluence、数据库、Git、API。
  • 输出:(raw_bytes, mime_type, source_url, updated_at, owner, acl)。
  • 关键点:增量加载依赖 source 的 change feed 或 last_modified 时间戳。

2. Document Parser ​

职责:把二进制文件解析为结构化文本。

  • PDF:文本提取(PyPDF/pdfplumber)或 OCR(Tesseract/PaddleOCR)。
  • Office:python-docx、python-pptx。
  • HTML/Markdown:保留标题层级、表格、代码块。
  • 代码:保留文件路径、注释、函数签名。

输出结构示例:

json
{
  "title": "退货政策",
  "sections": [
    {"heading": "退货期限", "text": "...", "level": 2},
    {"heading": "退款方式", "text": "...", "level": 2}
  ],
  "tables": [...]
}

3. Chunker ​

职责:把文档切分为语义完整的 chunk。

  • 接口:chunk(document) -> list[Chunk]。
  • 元数据:source、section、heading、page、position、tenant_id。
  • 实现:固定长度、重叠窗口、Markdown 结构、语义分块、Agentic 分块。
  • 进阶(2024–2026):Contextual Retrieval(嵌入前为 chunk 注入文档级上下文说明,Anthropic)、Late Chunking(先整篇嵌入再切分池化,Jina,arXiv:2409.04701)、Contextual Embedding(编码器在编码 chunk 时内生整篇文档上下文,voyage-context-3/4,索引期零额外 LLM 调用)、表格感知的结构切分。

关键权衡:

粒度检索精度语义完整token 效率
小 chunk(128 tokens)高低低
中 chunk(512 tokens)中中中
大 chunk(2048 tokens)低高高

4. Embedder ​

职责:把 chunk/query 编码为向量。

  • 接口:embed(texts: list[str]) -> list[list[float]]。
  • 模型选择(2026 年视角):
    • 通用:OpenAI text-embedding-3-small/large、Cohere Embed v3/v4、Gemini Embedding。
    • 开源多语言:Qwen3-Embedding(0.6B/4B/8B,32K 上下文,2025-06 登顶 MTEB 多语言榜)、BGE-M3、jina-embeddings-v3、E5-mistral。
    • 内生文档上下文:voyage-context-3/4(chunk 向量携带全文语境,索引期无额外 LLM 调用)。
    • 视觉文档:Qwen3-VL-Embedding(2B/8B,32K,Apache-2.0,arXiv:2601.04720)。
    • 代码:code-embedding 模型。
  • 工程:批量、异步、缓存、失败重试、模型版本管理。
  • 评估:用 MTEB / MTEB-Chinese 榜单做离线选型,用自有评估集做上线前验证。

5. Vector Store ​

职责:存储向量与 metadata,支持 ANN 检索与过滤。

  • 接口:upsert(chunks)、search(query_vector, top_k, filters)、delete(ids)。
  • 关键能力:
    • ANN 索引(HNSW、IVF_PQ、DiskANN)。
    • Metadata 过滤(前置过滤、后置过滤)。
    • 混合索引(向量 + 倒排;Milvus 2.5、Elasticsearch、OpenSearch 均内置全文+向量混合)。
    • 多租户(namespace/collection)。
  • 多模态扩展:支持 张量级多向量存储(ColBERT/ColPali 系,如 Vespa、Milvus 多向量),以及 ViDoRe 生态的向量 Reranker。

6. Retriever ​

职责:根据 query 召回候选 chunks。

  • Dense Retriever:query_vector · chunk_vector。
  • Keyword Retriever:BM25 / TF-IDF。
  • Hybrid Retriever:融合 dense 与 sparse 排名(RRF 或线性加权)——2025 年的生产标配。
  • Multi-Query Retriever:把 query 扩展成多个子查询分别检索后合并。
  • Graph Retriever:图谱子图检索(GraphRAG/LightRAG/HippoRAG 系),见核心章节“源码与生态分析”。
  • Agentic Retriever:以工具形式暴露,由推理模型在循环中调用,返回结构化结果(含引用编号与摘要)。

7. Reranker ​

职责:在召回候选中筛选最相关的 chunk。

  • Cross-Encoder:高精度、高延迟,适合 Top-100 → Top-10。
  • 生成式 / Listwise:Qwen3-Reranker(0.6B/4B/8B,Apache-2.0,开源精度天花板,4B 为甜点档)用“是/否”token 打分;商用 Cohere Rerank 3.5、Voyage rerank-2.5。
  • 轻量模型:BGE-reranker-v2-m3(Apache-2.0)与 jina-reranker-v3/v3.5(listwise,约百毫秒级延迟、131K 上下文,但 CC-BY-NC 非商用许可)——选轻量 reranker 时务必核查许可证,商用自托管优先 Apache-2.0 系。
  • 多向量 Late Interaction:ColBERT/ColPali 系 Reranker,token 级交互,用于视觉文档与高精度场景。
  • 特征融合:结合向量分、关键词分、freshness、点击率。

8. Query Engine ​

职责:编排查询生命周期。

  • 接口:answer(query, context) -> Answer。
  • 内部:preprocess → retrieve → rerank → assemble → generate → post-process。
  • 支持配置:是否启用 rerank、最大检索数量、超时、fallback。
  • 质量分档(2026 标配):在 retrieve 之后插入 grader 节点(CRAG 思路),把结果分为 Correct / Ambiguous / Incorrect,分别走直通 / 补充扩展 / 改写重检索分支。
  • Agentic 扩展:推理循环模式(检索—反思—再检索)需要配置最大迭代次数、token 预算、工具 schema。

9. Generator Client ​

职责:调用 LLM 生成答案。

  • 通过 LLM Gateway 统一路由。
  • Prompt 模板管理(版本化、A/B 测试)。
  • 输出解析:提取答案、引用、置信度。

10. Memory / Cache ​

职责:加速重复查询与重复检索,并与 Agent 长期记忆融合。

  • Query Cache:相同 query 直接返回缓存答案。
  • Embedding Cache:避免重复编码相同 query/chunk。
  • Retrieval Cache:缓存热门检索结果。
  • Conversation Memory:多轮对话上下文管理。
  • Agent 记忆层(2025 年趋势):RAG 检索与 Agent 长期记忆的边界正在融合——Mem0 用实体中心 + 向量检索做 CRUD 式记忆,Zep/Graphiti 用时序知识图谱 + PageRank 做跨会话记忆检索(详见 Memory 主题)。实现上,记忆系统就是“带写入路径的 RAG”。

11. Evaluator ​

职责:离线/在线评估 RAG 效果。

  • 检索指标:Hit Rate、MRR、Recall@K、NDCG@K。
  • 生成指标:Faithfulness、Answer Relevance、Context Precision、Context Recall。
  • 场景基准:RGB(噪声/拒答/反事实鲁棒性)、CRUD-RAG(增删改查)、RAGBench(行业 TRACe)、BERGEN(流水线归因)。
  • Agentic 指标:轨迹级评估(检索次数、停止时机)、cost per correct answer。
  • 框架:RAGAS(0.4 起迁移到 collections API,便于嵌入 CI/在线 trace)、ARES、TruLens、LangSmith、Langfuse。

12. Observer ​

职责:全链路可观测。

  • Trace:query → rewrite → retrieval → rerank → generation → answer。
  • Metrics:latency P50/P99、retrieval latency、token cost、cache hit rate。
  • Logging:记录 prompts、retrieved chunks、模型输出(注意 PII 脱敏)。

小结 ​

这些模块并非每个系统都需要独立部署。小规模场景可以把多个模块合并在一个服务里;大规模场景则会把 Embedder、Vector Store、Retriever、Reranker、Generator 拆成独立可扩展的微服务。下一章会结合开源生态,看这些模块在主流框架中是如何实现的。

Released under CC-BY-SA-4.0 License.