知识检索(RAG)| Agentic Design Patterns | 智能体设计模式

内容纲要

导语

传统LLM像闭卷考试,只能靠记忆回答,信息过时且可能产生幻觉。RAG(检索增强生成)像开卷考试,在生成响应前从外部知识库检索相关信息并增强提示词,使AI能够基于实时、可验证数据生成准确答案。本文介绍RAG核心概念、三种演进形式(标准RAG、图RAG、智能体式RAG)、向量数据库选型与实战案例,适合需要构建知识问答系统的开发者。

TL;DR

  • 核心:RAG在LLM生成响应前,从外部知识库检索相关信息并增强提示词,使AI能够基于实时、可验证数据生成准确答案。
  • 价值:访问最新信息、降低幻觉风险、利用专业知识、提供可验证引用、无需重新训练模型。
  • 流程:用户查询 → 语义搜索知识库 → 提取最相关信息片段 → 增强原始提示词 → LLM生成基于事实的响应。
  • 演进:标准RAG(简单检索+增强)→ 图RAG(知识图谱)→ 智能体式RAG(引入推理层)。
  • 技术:嵌入(Embeddings)、语义相似度、分块(Chunking)、向量数据库、混合搜索(BM25+向量)。

是什么:RAG的核心定义

RAG(检索增强生成):在LLM生成响应前,从外部知识库检索相关信息并增强提示词,使AI能够基于实时、可验证数据生成准确答案。

核心类比

传统LLM  →  闭卷考试(只靠记忆)
RAG系统  →  开卷考试(可查阅资料)

工作流程

用户查询 
  ↓
语义搜索知识库(不是关键字匹配)
  ↓
提取最相关信息片段
  ↓
增强原始提示词(查询+检索内容)
  ↓
LLM生成基于事实的响应

可视化示意图

图1:RAG核心流程 - 分块→嵌入→向量存储→语义检索

读图要点:文档分块、嵌入向量化、存储到向量数据库、语义检索相关片段、增强提示词生成答案。

常见误解澄清

  • ❌ RAG就是向量搜索:RAG包含检索和生成两个环节,向量搜索只是检索方式之一。
  • ❌ RAG可以完全消除幻觉:RAG降低幻觉风险,但不保证100%准确,仍需验证。
  • ❌ 所有场景都需要RAG:简单问答、固定知识库场景不需要RAG,需要实时信息、专业知识时用RAG。

为什么:产生背景与适用场景

产生背景

LLM局限与RAG解决方案:

LLM局限 影响 RAG解决方案
静态训练数据 信息过时,无法获取最新资讯 连接实时知识库
幻觉(Hallucination) 生成虚假信息 基于可验证数据回答
缺乏专业知识 无法访问公司内部文档 整合私有知识库
无法提供来源 答案不可验证 附带引用和出处
领域知识不足 专业领域表现差 动态加载领域文档

核心优势

  • ✅ 访问最新信息
  • ✅ 降低幻觉风险
  • ✅ 利用专业知识
  • ✅ 提供可验证引用
  • ✅ 无需重新训练模型

RAG核心概念

概念 定义 作用
Embeddings(嵌入) 文本的数字向量表示 捕捉语义含义,在高维空间中相近含义的词距离近
语义相似度 基于含义而非词语的相似程度 "furry feline"与"cat"高度相似
Chunking(分块) 将大文档分割成小片段 提高检索效率和相关性
向量数据库 专门存储和查询嵌入的数据库 高效语义搜索(FAISS/Pinecone/Weaviate)
语义搜索 理解意图的智能搜索 超越关键字匹配,理解查询背后的概念

怎么做:RAG的三种演进形式与实战实现

1. 标准RAG(Basic RAG)

特点:简单检索+增强
流程:查询 → 检索 → 拼接 → 生成
适用:基础问答、文档查询

2. 图RAG(Graph RAG)

特点:使用知识图谱而非向量库
优势:
  - 理解实体间显式关系
  - 综合多文档碎片化信息
  - 提供更细致的上下文推理
劣势:
  - 构建和维护成本高
  - 灵活性差
  - 延迟更高
适用:复杂金融分析、科研(基因-疾病关系)

3. 智能体式RAG(Agentic RAG)⭐

核心创新:引入推理和决策层

能力 示例场景 价值
来源验证 识别2025政策文档比2020博客更权威 确保答案最新准确
冲突协调 预算提案€50K vs 财报€65K 选择最可靠来源
多步推理 "我们产品vs竞品"→分解为4个子查询 综合复杂答案
识别知识差距 内部库无昨日新闻→调用Web搜索API 动态使用外部工具

工作流程

用户查询
  ↓
检索初步结果
  ↓
智能体评估
  ├─ 来源是否权威?
  ├─ 信息是否冲突?
  ├─ 是否需要分解查询?
  └─ 是否需要外部工具?
  ↓
优化后的上下文
  ↓
LLM生成可靠答案

⚠️ 挑战

  • 复杂性↑:设计实现维护成本高
  • 延迟↑:多轮推理增加响应时间
  • 新错误源:推理缺陷可能导致误判

检索技术对比

技术 原理 优势 劣势
关键字搜索(BM25) 词频匹配 快速、精准匹配 无法理解语义
向量搜索 语义相似度 理解含义、发现概念关联 计算成本高
混合搜索 结合BM25+向量 兼顾精度和语义 实现复杂

实战示例

1. ADK + Google Search

from google.adk.tools import google_search
from google.adk.agents import Agent

search_agent = Agent(
    name="research_assistant",
    model="gemini-2.0-flash-exp",
    instruction="帮助用户研究主题,使用Google Search工具",
    tools=[google_search]
)

2. ADK + Vertex AI RAG

from google.adk.memory import VertexAiRagMemoryService

RAG_CORPUS_RESOURCE_NAME = "projects/xxx/ragCorpora/xxx"

memory_service = VertexAiRagMemoryService(
    rag_corpus=RAG_CORPUS_RESOURCE_NAME,
    similarity_top_k=5,              # 返回最相似的5个结果
    vector_distance_threshold=0.7    # 语义距离阈值
)

3. LangChain完整RAG流程

关键步骤

# 1. 文档加载和分块
loader = TextLoader('./document.txt')
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = text_splitter.split_documents(documents)

# 2. 嵌入并存储到向量数据库
vectorstore = Weaviate.from_documents(
    documents=chunks,
    embedding=OpenAIEmbeddings()
)
retriever = vectorstore.as_retriever()

# 3. 定义RAG链
template = """基于以下上下文回答问题:
Context: {context}
Question: {question}
Answer:"""
prompt = ChatPromptTemplate.from_template(template)
rag_chain = prompt | llm | StrOutputParser()

# 4. 执行查询
context = retriever.invoke(user_question)
answer = rag_chain.invoke({"context": context, "question": user_question})

对比与取舍:RAG的优势与挑战

✅ 核心优势

优势 说明
实时性 克服静态训练数据限制
准确性 基于事实而非记忆
可验证性 提供来源引用
专业性 访问领域专业知识
无需重训练 动态更新知识

⚠️ 主要挑战

挑战 影响 缓解方案
信息碎片化 关键信息分散多文档 Graph RAG/Agentic RAG
检索质量 不相关块引入噪声 混合搜索+重排序
矛盾信息 多来源信息冲突 Agentic RAG协调
预处理成本 需构建向量数据库 使用托管服务(Pinecone)
数据同步 知识库需定期更新 自动化ETL流程
延迟增加 检索步骤增加时间 优化索引+缓存
Token消耗 增强提示词更长 智能分块+摘要

向量数据库选型

类型 代表产品 适用场景
托管服务 Pinecone, Weaviate 快速上线、无需维护
开源方案 Chroma DB, Milvus, Qdrant 自主可控、可定制
扩展现有DB pgvector(Postgres), Redis 现有架构集成
核心库 FAISS, ScaNN 嵌入到应用中

选型考虑

  • 数据规模
  • 查询QPS
  • 运维能力
  • 成本预算

常见错误与排错

典型坑位

问题 症状 识别方法 修复建议
Chunk大小不当 检索不精准或丢失上下文 检查Chunk大小 500-1000 tokens,根据文档类型调整
检索质量差 返回不相关信息 检查检索结果 混合搜索+重排序,查询扩展
信息冲突 多来源信息矛盾 检查来源一致性 Agentic RAG协调,选择最可靠来源
延迟过高 响应时间过长 检查检索和生成时间 优化索引,缓存结果,并行处理

调试技巧

  1. 优化Chunk策略:根据文档类型调整Chunk大小和重叠。
  2. 使用混合搜索:结合BM25和向量搜索,提高检索准确性。
  3. 实现重排序:使用重排序模型优化检索结果。
  4. 监控关键指标:召回率、精确率、MRR、用户满意度。

FAQ

Q1:RAG vs Fine-tuning如何选择?
A:

  • RAG: 知识频繁更新、需要引用来源、多领域知识
  • Fine-tuning: 改变模型行为、特定风格输出、固定领域

Q2:Chunk大小如何确定?
A:

  • 太小:丢失上下文
  • 太大:检索不精准
  • 建议:500-1000 tokens,根据文档类型调整

Q3:如何提高检索准确性?
A:1) 混合搜索(BM25+向量);2) 重排序模型;3) 查询扩展;4) 元数据过滤;5) Agentic RAG。

Q4:如何处理多语言RAG?
A:使用多语言嵌入模型(如mBERT),或分别构建各语言知识库。

Q5:RAG如何保护隐私?
A:1) 数据脱敏;2) 访问控制;3) 本地部署;4) 审计日志。

Q6:如何评估RAG质量?
A:

  • Retrieval: 召回率、精确率、MRR
  • Generation: 准确性、相关性、流畅度
  • End-to-End: 用户满意度

延伸阅读与引用

图片资源

  • chapter14_fig1 RAG核心概念
  • chapter14_fig2 Agentic RAG
  • chapter14_fig3 数据库检索
  • chapter14_fig4 Web检索

总结

知识检索(RAG)是突破LLM静态知识限制的核心技术。通过语义搜索外部知识库、增强提示词、生成基于事实的响应,RAG实现了访问最新信息、降低幻觉风险、利用专业知识的目标。从标准RAG到图RAG再到智能体式RAG,RAG技术不断演进,引入推理层和决策机制,显著提升了检索质量和答案可靠性。虽然RAG面临信息碎片化、检索质量、延迟等挑战,但通过混合搜索、重排序、Agentic RAG等技术可以显著缓解。

滚动至顶部