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

内容纲要

一、核心定义

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

核心类比

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

工作流程

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

二、RAG核心概念

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

核心技术架构

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


三、为什么需要RAG?

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

核心优势

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

四、检索技术对比

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

示例对比

查询:"法国首都是哪里?"

关键字搜索:
  只匹配"法国"+"首都"等词

语义搜索:
  识别查询意图,匹配"Which city is France's capital?"
  即使措辞完全不同也能找到答案

五、RAG的三种演进形式

1. 标准RAG(Basic RAG)

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

2. 图RAG(Graph RAG)

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

图2:智能体式RAG - 引入推理层主动评估和优化检索结果

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

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

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

工作流程

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

⚠️ 挑战

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

六、典型应用场景

1. 企业搜索与问答

场景:员工查询HR政策
实现:检索内部文档→生成准确答复
价值:减少人工支持成本

2. 客户支持与服务台

场景:客户询问产品使用问题
实现:访问手册/FAQ/工单历史
价值:快速一致的响应

3. 个性化内容推荐

场景:推荐相关文章/产品
实现:语义匹配用户偏好
价值:超越关键字的精准推荐

4. 新闻与时事摘要

场景:查询最新事件
实现:集成实时新闻源
价值:生成最新摘要

七、实战示例

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
  • 运维能力
  • 成本预算

十、常见问题

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

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

Q2:Chunk大小如何确定?

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

Q3:如何提高检索准确性?

1) 混合搜索(BM25+向量);2) 重排序模型;3) 查询扩展;4) 元数据过滤;5) Agentic RAG。

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

Q5:RAG如何保护隐私?

1) 数据脱敏;2) 访问控制;3) 本地部署;4) 审计日志。

Q6:如何评估RAG质量?

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

十一、参考资源

图片资源

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

原文章节

  • <code>20-Chapter-14-Knowledge-Retrieval-RAG.md</code>

相关章节

  • 第 5 章:工具使用(RAG作为一种工具)
  • 第 8 章:记忆管理(长期记忆vs RAG)
  • 第 10 章:MCP(标准化知识源接入)

滚动至顶部