跳到主要内容

RAG(检索增强生成)

RAG(Retrieval-Augmented Generation)是一种将外部知识检索与大语言模型生成能力结合的技术架构,解决 LLM 知识截止、幻觉等问题。

核心流程

用户提问 → Embedding 向量化 → 向量数据库检索 → 相关文档片段 → 拼接 Prompt → LLM 生成回答

关键组件

1. 文档处理(Indexing)

将原始文档转化为可检索的格式:

  • 文档加载:支持 PDF、Markdown、HTML、数据库等多种数据源
  • 文本分块(Chunking):将长文档切分为合适大小的片段
    • 固定大小分块(Fixed Size)
    • 语义分块(Semantic Chunking)
    • 递归字符分块(Recursive Character Splitting)
  • 向量化(Embedding):将文本转换为高维向量
    • OpenAI text-embedding-3-small/large
    • 开源模型:bge-largee5-large

2. 向量数据库(Vector Store)

存储和检索向量的专用数据库:

数据库特点
Chroma轻量级,适合原型开发
Pinecone全托管云服务
Milvus高性能,支持十亿级向量
Weaviate支持混合搜索
pgvectorPostgreSQL 扩展,适合已有 PG 的团队

3. 检索策略(Retrieval)

  • 相似度搜索:余弦相似度、欧氏距离
  • 混合搜索:向量搜索 + 关键词搜索(BM25)
  • 重排序(Reranking):使用 Cross-Encoder 对检索结果重新排序
  • 元数据过滤:按时间、来源、类别等条件筛选

4. 生成(Generation)

将检索到的上下文与用户问题组合,交给 LLM 生成回答:

System: 你是一个问答助手,基于以下上下文回答问题。如果上下文中没有相关信息,请说"我不知道"。

Context: {retrieved_documents}

User: {question}

进阶模式

Naive RAG vs Advanced RAG

Naive RAG:   Query → Retrieve → Generate

Advanced RAG: Query → Query改写 → 多路检索 → 重排序 → 压缩 → Generate → 自我验证

常见优化手段

  • Query 改写:用 LLM 重写用户问题,提升检索质量
  • HyDE:先让 LLM 生成假设性回答,用回答去检索
  • 多跳检索(Multi-hop):多次检索,逐步收集信息
  • Self-RAG:模型自己判断是否需要检索、检索结果是否相关
  • 父文档检索:检索小块,但返回所属的大块上下文

评估指标

指标说明
Faithfulness回答是否忠于检索到的上下文
Relevance检索到的文档是否与问题相关
Answer Correctness回答是否正确
Context Precision相关文档排名是否靠前
Context Recall是否召回了所有相关文档

评估工具:RagasTruLens

适用场景

  • 企业知识库问答
  • 文档搜索与摘要
  • 客服机器人
  • 代码库问答
  • 法律/医疗等领域的专业问答

大规模数据下的 Agent 使用策略

Agent 的 context window 有限,无法一次性加载所有 RAG 数据。以下是处理大规模数据的主要策略。

1. 分层检索(Hierarchical Retrieval)

先用轻量级模型/向量检索缩小范围,再用 LLM 精读:

100万文档 → Embedding 检索 Top 100 → Rerank 到 Top 10 → 送入 Agent

2. 迭代检索(Iterative Retrieval)

Agent 不一次查完,而是多轮查询,根据上一轮结果调整查询策略。类似人类"先搜一下,看看结果,再换个关键词搜"。

3. 摘要 + 索引

  • 预先对文档生成摘要,Agent 先读摘要决定是否需要原文
  • 建立多级索引:目录级 → 章节级 → 段落级

4. Chunk 策略优化

  • 语义分块而非固定长度切分
  • 保留 metadata(来源、时间、类别)供 Agent 过滤
  • 适当的 chunk overlap 防止信息断裂

5. Tool-based 按需加载

把 RAG 封装成 工具(Tool),Agent 按需调用,而非一股脑塞进 context:

Agent 决定查什么、查多少

调用 search_docs(query, filters, top_k)

获取结果,决定是否需要进一步检索

规模与方案对照

数据规模推荐方案
< 10万条向量检索 + Rerank,直接塞 context
10万 - 千万分层检索 + Tool 按需加载
> 千万多级索引 + 迭代检索 + 摘要预处理

核心原则

Agent 不应该"看完所有数据再回答",而是"知道去哪找、找多少"。把 RAG 看作 Agent 的一个 Tool,让 Agent 自主决定检索策略,比硬塞 context 更高效也更准确。