08
RAG & Agent 策略:复杂系统设计
RAG & Agent 策略:复杂系统设计
交付物:企业级知识库架构图 & 多 Agent 协作方案
为什么 PM 需要理解 RAG 和 Agent?
当你的 AI 产品需求超出"简单问答"的范畴时,你会遇到两个关键技术:
- RAG(Retrieval-Augmented Generation):让 AI 基于你的数据回答问题
- Agent:让 AI 自主规划、调用工具、完成复杂任务
作为 PM,你不需要写代码,但需要:
- 理解这些技术能做什么、不能做什么
- 能够设计合理的产品方案
- 能够与工程师有效沟通
本章将帮你建立产品视角的 RAG 和 Agent 设计能力。
1. RAG 基础:让 AI "读懂"你的数据
1.1 为什么需要 RAG?
问题:LLM 有知识截止日期,且不了解你的私有数据。
- GPT-4 的知识截止于 2024 年
- LLM 不知道你公司的产品文档、政策、FAQ
解决方案:RAG = 检索 + 生成
用户提问
↓
检索相关文档(Retrieval)
↓
将文档作为上下文(Context)
↓
LLM 基于上下文生成回答(Generation)
1.2 RAG 核心流程
flowchart LR
A[原始文档] --> B[文档切分]
B --> C[向量化]
C --> D[(向量数据库)]
E[用户提问] --> F[问题向量化]
F --> G[相似度检索]
D --> G
G --> H[获取相关文档]
H --> I[构建 Prompt]
I --> J[LLM 生成回答]
1.3 PM 需要关注的 RAG 设计决策
| 决策点 | 选项 | 影响 |
|---|---|---|
| 文档切分策略 | 按段落/固定长度/语义 | 检索准确性 |
| 向量模型选择 | OpenAI/开源模型 | 成本和效果 |
| Top-K 数量 | 返回多少条结果 | 召回率 vs 噪音 |
| 相似度阈值 | 最低相似度要求 | 准确性 vs 覆盖率 |
| 重排序策略 | 是否二次排序 | 答案质量 |
| 引用展示 | 是否显示来源 | 用户信任度 |
1.4 文档切分策略详解
为什么要切分?
- 文档太长,超出上下文窗口
- 检索时需要找到最相关的"片段"
切分策略对比:
| 策略 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 固定长度(如 500 tokens) | 简单、均匀 | 可能切断语义 | 结构松散的文档 |
| 按段落/章节 | 保持语义完整 | 长度不均匀 | 结构化文档 |
| 语义切分 | 智能、准确 | 计算成本高 | 高质量要求场景 |
| 重叠切分 | 避免边界信息丢失 | 冗余存储 | 长文档 |
PM 建议:
- 产品文档、FAQ:按段落/章节
- 长篇文章、报告:固定长度 + 重叠
- 对话记录:按对话轮次
2. RAG 架构设计
2.1 基础 RAG 架构
用户界面
│
▼
┌─────────────────────────────────────────┐
│ 应用层 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 问题理解 │ │ 检索处理 │ │ 答案生成 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────┘
│ │
▼ ▼
┌─────────┐ ┌─────────────┐
│ LLM │ │ 向量数据库 │
│ (GPT-4) │ │ (Pinecone) │
└─────────┘ └─────────────┘
2.2 企业级 RAG 架构(交付物)
┌────────────────────────────────────┐
│ 负载均衡 │
└────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ API 网关 │ │ API 网关 │ │ API 网关 │
└────────────┘ └────────────┘ └────────────┘
│ │ │
└───────────────┼───────────────┘
│
┌───────────────────────────────────┼───────────────────────────────────┐
│ 应用服务层 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 问题预处理 │ │ 检索编排 │ │ 答案生成 │ │
│ │ - 意图识别 │ │ - 多路召回 │ │ - Prompt │ │
│ │ - 关键词提取 │ │ - 重排序 │ │ - 流式输出 │ │
│ │ - 问题改写 │ │ - 过滤去重 │ │ - 引用标注 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└───────────────────────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ LLM 服务 │ │ 向量数据库 │ │ 缓存服务 │
│ - GPT-4 │ │ - Pinecone │ │ - Redis │
│ - Claude │ │ - Milvus │ └──────────────┘
│ - 本地模型 │ │ - Weaviate │
└──────────────┘ └──────────────┘
│
┌──────┴──────┐
▼ ▼
┌──────────────┐ ┌──────────────┐
│ 索引管道 │ │ 文档存储 │
│ - 切分 │ │ - S3 │
│ - 向量化 │ │ - MongoDB │
│ - 元数据 │ └──────────────┘
└──────────────┘
2.3 RAG 优化策略
提升检索质量:
| 策略 | 描述 | 效果 |
|---|---|---|
| 混合检索 | 关键词 + 向量检索结合 | 提高召回率 |
| 查询改写 | 用 LLM 改写用户问题 | 解决表述不清问题 |
| HyDE | 先生成假设答案,再检索 | 提高语义匹配 |
| 重排序 | 用更强的模型二次排序 | 提高准确率 |
提升生成质量:
| 策略 | 描述 | 效果 |
|---|---|---|
| 压缩上下文 | 只保留最相关的内容 | 减少噪音 |
| 分步推理 | 先推理再回答 | 提高复杂问题准确率 |
| 自检机制 | LLM 检查自己的答案 | 减少幻觉 |
| 引用标注 | 标注答案来源 | 可验证性 |
3. Agent 基础:让 AI 自主完成任务
3.1 什么是 Agent?
Agent = LLM + 规划能力 + 工具调用
传统 LLM:
用户输入 → LLM → 输出答案
Agent:
用户输入 → LLM 规划 → 调用工具1 → 分析结果 → 调用工具2 → ... → 输出答案
3.2 Agent 核心能力
| 能力 | 描述 | 示例 |
|---|---|---|
| 规划(Planning) | 将复杂任务拆解为步骤 | "帮我分析竞品" → 1.搜索竞品信息 2.整理对比 3.生成报告 |
| 工具调用(Tool Use) | 调用外部工具获取信息或执行操作 | 搜索引擎、代码执行、API 调用 |
| 记忆(Memory) | 记住历史对话和中间结果 | 短期记忆、长期记忆 |
| 反思(Reflection) | 检查结果,修正错误 | 验证答案、重新规划 |
3.3 Agent 设计模式
模式 1:ReAct(推理 + 行动)
思考:我需要知道竞品A的融资情况
行动:搜索"竞品A 融资"
观察:找到3条结果...
思考:结果显示竞品A在2024年获得B轮融资
行动:继续搜索竞品B的融资情况
...
模式 2:Plan-and-Execute(规划 + 执行)
规划:
1. 搜索竞品A的基础信息
2. 搜索竞品B的基础信息
3. 对比两个竞品的功能
4. 生成分析报告
执行:按步骤依次执行
模式 3:Multi-Agent(多智能体协作)
协调者 Agent:接收任务,分配给子Agent
├── 搜索 Agent:负责信息检索
├── 分析 Agent:负责数据分析
├── 写作 Agent:负责报告生成
└── 审核 Agent:负责质量检查
4. Multi-Agent 协作方案设计(交付物)
4.1 多 Agent 架构
┌──────────────────┐
│ 协调者 Agent │
│ (Orchestrator) │
└────────┬─────────┘
│
┌─────────────────┼─────────────────┐
│ │ │
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ 研究 Agent │ │ 分析 Agent │ │ 执行 Agent │
│ - 搜索 │ │ - 数据处理 │ │ - API调用 │
│ - 爬取 │ │ - 图表生成 │ │ - 文件操作 │
│ - 总结 │ │ - 洞察提取 │ │ - 通知发送 │
└────────────┘ └────────────┘ └────────────┘
4.2 协作流程设计
场景:AI 竞品分析助手
## Agent 定义
### 协调者 Agent
角色:任务分配和结果整合
输入:用户的分析请求
输出:完整的分析报告
能力:
- 理解用户需求
- 拆解任务
- 分配给合适的子 Agent
- 整合各 Agent 的输出
### 搜索 Agent
角色:信息检索专家
输入:搜索关键词
输出:结构化的搜索结果
工具:
- 网页搜索
- 新闻搜索
- 社交媒体搜索
限制:
- 只负责搜索,不做分析
### 分析 Agent
角色:数据分析师
输入:原始数据
输出:分析结论
能力:
- 数据清洗
- 对比分析
- 趋势识别
- 洞察提取
### 写作 Agent
角色:报告撰写专家
输入:分析结论
输出:格式化报告
能力:
- 结构化写作
- 图表生成
- 格式美化
## 协作流程
1. 用户输入:"分析竞品 A 和竞品 B"
2. 协调者理解需求,制定计划:
- 任务 1:搜索竞品 A 信息 → 搜索 Agent
- 任务 2:搜索竞品 B 信息 → 搜索 Agent
- 任务 3:对比分析 → 分析 Agent
- 任务 4:生成报告 → 写作 Agent
3. 并行执行任务 1 和任务 2
4. 等待搜索完成,执行任务 3
5. 执行任务 4
6. 协调者整合,返回最终报告
4.3 Agent 工具定义(Function Calling)
{
"tools": [
{
"name": "web_search",
"description": "搜索互联网获取最新信息",
"parameters": {
"query": {
"type": "string",
"description": "搜索关键词"
},
"num_results": {
"type": "integer",
"description": "返回结果数量",
"default": 5
}
}
},
{
"name": "get_company_info",
"description": "获取公司基础信息",
"parameters": {
"company_name": {
"type": "string",
"description": "公司名称"
}
}
},
{
"name": "compare_products",
"description": "对比两个产品的功能",
"parameters": {
"product_a": {
"type": "string",
"description": "产品A名称"
},
"product_b": {
"type": "string",
"description": "产品B名称"
},
"dimensions": {
"type": "array",
"items": { "type": "string" },
"description": "对比维度"
}
}
},
{
"name": "generate_report",
"description": "生成分析报告",
"parameters": {
"title": {
"type": "string",
"description": "报告标题"
},
"sections": {
"type": "array",
"description": "报告章节内容"
},
"format": {
"type": "string",
"enum": ["markdown", "pdf", "html"],
"description": "输出格式"
}
}
}
]
}
5. 评估与兜底策略
5.1 RAG 评估指标
| 指标 | 定义 | 计算方式 |
|---|---|---|
| 检索召回率 | 相关文档被检索到的比例 | 检索到的相关文档 / 总相关文档 |
| 检索准确率 | 检索结果中相关文档的比例 | 相关文档 / 总检索结果 |
| 答案准确性 | 答案正确的比例 | 正确答案数 / 总问题数 |
| 答案完整性 | 答案覆盖问题所有方面 | 人工评估 |
| 幻觉率 | 生成虚假信息的比例 | 含幻觉答案 / 总答案 |
| 引用准确性 | 引用与答案匹配的比例 | 正确引用 / 总引用 |
5.2 Human-in-the-Loop 设计
┌──────────────────────────────────────────┐
│ 用户界面 │
└──────────────────────────────────────────┘
│
▼
┌───────────────────┐
│ 置信度判断 │
└───────────────────┘
/ \
高置信度 低置信度
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ 直接回答 │ │ 人工审核队列 │
└──────────────┘ └──────────────┘
│
▼
┌──────────────┐
│ 人工审核 │
│ - 修正答案 │
│ - 补充知识库 │
│ - 标注样本 │
└──────────────┘
5.3 兜底策略
| 场景 | 兜底策略 |
|---|---|
| 检索无结果 | 引导用户换个问法 / 推荐热门问题 |
| 低置信度答案 | 标注"仅供参考" / 提供人工入口 |
| 超出知识范围 | 明确说明"这个问题我不确定" |
| 敏感问题 | 拒绝回答 / 转人工 |
| 系统错误 | 友好提示 + 自动重试 |
| 高延迟 | 流式输出 / 预估等待时间 |
5.4 Safety Guardrails
用户输入
│
▼
┌──────────────────────────────────────┐
│ 输入过滤层 │
│ - 敏感词检测 │
│ - 恶意攻击检测(Prompt Injection) │
│ - 长度/格式验证 │
└──────────────────────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ RAG / Agent 处理 │
└──────────────────────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ 输出过滤层 │
│ - 敏感内容检测 │
│ - 事实一致性检查 │
│ - 格式规范化 │
└──────────────────────────────────────┘
│
▼
用户输出
6. 实战案例:企业知识库问答系统
6.1 需求描述
产品:企业内部知识库问答系统
用户:公司全体员工
场景:
- 查询公司政策(HR、财务、行政)
- 查询产品文档
- 查询技术文档
- 查询历史项目资料
要求:
- 基于公司内部文档回答
- 答案准确,不能胡说
- 需要标注来源
- 敏感信息需要权限控制
6.2 架构设计
┌────────────────────────────────────────────────────────────┐
│ 用户界面 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ [搜索框] 请输入你的问题... │ │
│ │ │ │
│ │ 快捷入口:[年假政策] [报销流程] [产品FAQ] │ │
│ └──────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────────┐
│ API Gateway │
│ (认证 + 限流 + 日志) │
└────────────────────────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────────┐
│ 应用服务 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 问题预处理 │→ │ 权限检查 │→ │ RAG 流程 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 意图识别 │ │ 用户权限 │ │ 检索 + 生成 │ │
│ │ - HR相关 │ │ - 部门权限 │ │ - 多路召回 │ │
│ │ - 产品相关 │ │ - 职级权限 │ │ - 重排序 │ │
│ │ - 技术相关 │ │ - 项目权限 │ │ - 答案生成 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└────────────────────────────────────────────────────────────┘
│
┌──────────────────┼──────────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ LLM │ │ 向量数据库 │ │ 缓存 │
│ (GPT-4) │ │ (Milvus) │ │ (Redis) │
└────────────┘ └────────────┘ └────────────┘
│
┌──────────────────┼──────────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ HR 知识库 │ │ 产品知识库 │ │ 技术知识库 │
│ - 政策文档 │ │ - 产品手册 │ │ - 技术文档 │
│ - 流程SOP │ │ - FAQ │ │ - 代码文档 │
└────────────┘ └────────────┘ └────────────┘
6.3 关键设计决策
| 决策 | 选择 | 理由 |
|---|---|---|
| 向量数据库 | Milvus | 开源、可自部署、支持权限 |
| LLM | GPT-4 + 本地模型兜底 | 质量优先、成本可控 |
| 文档切分 | 按章节 + 重叠 | HR 文档结构化强 |
| 检索策略 | 混合检索(关键词+向量) | 兼顾精确和语义 |
| 权限控制 | 基于元数据过滤 | 在检索层面过滤 |
| 引用展示 | 必须显示来源 | 可追溯、可验证 |
7. 本章小结
通过这一章的学习,你应该掌握了:
- RAG 原理:检索增强生成的核心流程和设计决策
- RAG 架构:从基础到企业级的架构设计
- Agent 概念:规划、工具调用、记忆、反思
- Multi-Agent:多智能体协作方案设计
- 评估与兜底:如何保证系统质量和安全
关键心法:
- RAG 不是银弹——检索质量决定答案质量
- Agent 不是万能——需要设计好边界和兜底
- 系统设计要"防御性"——假设每个环节都可能出错
- 持续迭代——上线后收集反馈,持续优化
下一章,我们将学习 AI 产品的安全合规设计。