并行化模式(Parallelization)
通过同时执行独立任务,将总耗时从「各任务耗时之和」优化为「最慢任务的耗时」。
🎯 什么是并行化?
并行化是指同时执行多个组件——可以是LLM调用、工具使用,甚至整个子智能体,而不是一个接一个地执行。
三种模式的演进
| 章节 | 模式 | 核心能力 | 解决问题 |
|---|---|---|---|
| 第一章 | 提示链 | 顺序执行 | 怎么走? |
| 第二章 | 路由 | 动态决策 | 走哪条路? |
| 第三章 | 并行化 | 同时执行 | 走多快? |
核心原理
找出工作流中互不依赖的环节,将它们并行执行。
⚡ 顺序 vs 并行:直观对比
顺序执行
搜索来源A → 总结来源A → 搜索来源B → 总结来源B → 生成答案
2秒 3秒 2秒 3秒 2秒
总耗时:2+3+2+3+2 = 12秒并行执行
┌─ 搜索A (2秒) ─┐ ┌─ 总结A (3秒) ─┐
│ │ │ │
└───────┬───────┘ └───────┬───────┘
│ 同时 │ 同时
┌───────┴───────┐ ┌───────┴───────┐
│ │ │ │
└─ 搜索B (2秒) ─┘ └─ 总结B (3秒) ─┘
│
▼
生成答案 (2秒)
总耗时:2 + 3 + 2 = 7秒(节省42%)⚠️ 顺序执行的瓶颈
| 问题 | 说明 |
|---|---|
| 累加延迟 | 总耗时 = 所有任务耗时之和 |
| I/O等待 | 调用API时CPU在空转 |
| 响应缓慢 | 用户等待时间长 |
| 资源浪费 | 没有充分利用并发能力 |
并行化的本质
在等待A的响应时,同时发起B、C、D的请求,而不是干等着。
📋 七大应用场景
1. 信息收集和研究
| 场景 | 并行任务 | 价值 |
|---|---|---|
| 研究公司 | 新闻、股票、社媒、数据库 | 快速获得全面信息 |
2. 数据处理和分析
| 场景 | 并行任务 | 价值 |
|---|---|---|
| 客户反馈分析 | 情感分析、关键词、分类、紧急识别 | 快速多角度分析 |
3. 多API/工具交互
| 场景 | 并行任务 | 价值 |
|---|---|---|
| 旅行规划 | 航班、酒店、活动、餐厅 | 快速完整计划 |
4. 多组件内容生成
| 场景 | 并行任务 | 价值 |
|---|---|---|
| 营销邮件 | 主题、正文、图片、按钮 | 高效生成完整邮件 |
5. 验证和核实
| 场景 | 并行任务 | 价值 |
|---|---|---|
| 用户输入验证 | 邮箱、电话、地址、敏感词 | 快速反馈有效性 |
6. 多模态处理
| 场景 | 并行任务 | 价值 |
|---|---|---|
| 社媒帖子分析 | 文本情感+图像识别 | 快速综合多模态信息 |
7. A/B测试或多方案生成
| 场景 | 并行任务 | 价值 |
|---|---|---|
| 创意文案 | 同时生成3个标题版本 | 快速比较选优 |
✅ 并行化的适用条件
可以并行的情况
✅ 任务之间没有依赖关系
✅ 任务的输入是已知的
✅ 任务可以独立完成
不能并行的情况
❌ 任务B需要任务A的输出
❌ 任务之间有顺序依赖
❌ 后续任务的输入取决于前序任务的结果
判断技巧
问自己:"如果把任务A和B交给两个人同时做,他们能独立完成吗?"
- 能 → 可以并行
- 一个人要等另一个人的结果 → 不能并行
🔬 实战案例:公司研究智能体
场景描述
用户请求:"帮我调研一下苹果公司最近的情况"
需要收集的信息:
- 最新新闻
- 股价走势
- 社交媒体舆情
- 财务数据
顺序执行(慢)
搜索新闻 → 获取股价 → 分析社媒 → 查财务 → 生成报告
3秒 2秒 4秒 2秒 3秒
总耗时:3+2+4+2+3 = 14秒并行执行(快)
┌─────────────────────────────────────────────────────────────────┐
│ 公司研究智能体 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ [用户请求: 调研苹果公司] │
│ │ │
│ ▼ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ ⚡ 并行数据收集 │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │ │
│ │ │ 新闻搜索 │ │ 股价API │ │ 社媒分析 │ │ 财务DB │ │ │
│ │ │ 3秒 │ │ 2秒 │ │ 4秒 │ │ 2秒 │ │ │
│ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └───┬────┘ │ │
│ │ │ │ │ │ │ │
│ │ └────────────┴─────┬──────┴───────────┘ │ │
│ │ │ │ │
│ └──────────────────────────┼─────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────┐ │
│ │ 汇合等待 │ ← 等待最慢的任务(4秒) │
│ └───────┬────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────┐ │
│ │ 生成研究报告 │ │
│ │ 3秒 │ │
│ └────────────────┘ │
│ │
│ 总耗时:4 + 3 = 7秒(节省50%) │
│ │
└─────────────────────────────────────────────────────────────────┘关键设计要点
| 要点 | 说明 |
|---|---|
| 独立性 | 四个数据源互不依赖 |
| 汇合点 | 等待所有并行任务完成 |
| 耗时瓶颈 | 并行阶段耗时 = 最慢任务耗时 |
| 顺序步骤 | 报告生成需要所有数据,必须顺序 |
🔄 三种模式如何组合?
组合架构
┌─────────────────────────────────────────────────────────────────┐
│ 智能体系统 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ [用户请求] │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ 🔀 路由 │ ← 决定走哪条路 │
│ └──────┬───────┘ │
│ │ │
│ ┌────┴────┐ │
│ ▼ ▼ │
│ │
│ ┌───────────────┐ ┌───────────────┐ │
│ │ 提示链 A │ │ 提示链 B │ │
│ │ │ │ │ │
│ │ 步骤1 │ │ 步骤1 │ │
│ │ ↓ │ │ ↓ │ │
│ │ ⚡ 并行步骤 │ │ 步骤2 │ │
│ │ ┌───┬───┐ │ │ ↓ │ │
│ │ ▼ ▼ ▼ │ │ 步骤3 │ │
│ │ A B C │ │ │ │
│ │ └───┴───┘ │ │ │ │
│ │ ↓ │ │ │ │
│ │ 汇合整合 │ │ │ │
│ └───────────────┘ └───────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘三种模式的协作
| 模式 | 作用 | 时机 |
|---|---|---|
| 路由 | 选择执行路径 | 入口和分支点 |
| 提示链 | 定义执行步骤 | 每条路径内部 |
| 并行化 | 加速独立任务 | 链内可并行的步骤 |
组合公式
高性能智能体 = 提示链(可靠性) + 路由(灵活性) + 并行化(效率)
⚠️ 并行化的代价
复杂性增加
| 挑战 | 说明 |
|---|---|
| 设计复杂 | 需要识别哪些任务可以并行 |
| 调试困难 | 并发问题难以复现和定位 |
| 日志混乱 | 多个任务的日志交织在一起 |
| 错误处理 | 一个任务失败时,其他任务怎么办? |
| 资源管理 | 需要控制并发数量,避免过载 |
何时值得使用?
✅ 值得:
- 任务涉及大量外部I/O等待
- 用户对响应速度敏感
- 有多个独立数据源
❌ 不值得:
- 任务本身执行很快
- 只有一两个独立任务
- 增加的复杂性超过收益
📊 三种模式对比
| 维度 | 提示链 | 路由 | 并行化 |
|---|---|---|---|
| 核心问题 | 怎么走? | 走哪条路? | 走多快? |
| 执行方式 | 顺序 | 条件分支 | 并发 |
| 比喻 | 流水线 | 调度中心 | 多车道高速 |
| 优化目标 | 可靠性 | 灵活性 | 效率 |
📝 核心要点
| 要点 | 说明 |
|---|---|
| 独立性识别 | 只有不相互依赖的任务才能并行 |
| 效率提升 | 大幅减少涉及I/O等待的任务耗时 |
| 复杂性代价 | 会增加设计、调试和日志的复杂性 |
| 框架支持 | LangChain和Google ADK都有内置并行支持 |
| 汇合整合 | 并行任务完成后需要汇合和整合结果 |
🔧 工具支持
| 框架 | 并行化机制 |
|---|---|
| LangChain LCEL | RunnableParallel 组件 |
| LangGraph | 图结构中定义并行分支 |
| Google ADK | LLM驱动的多智能体委派 |
🔗 相关阅读
参考资源: