第4章:单Agent vs 多Agent
本章核心:并非所有问题都需要多个Agent。理解单Agent和多Agent的适用场景,才能做出正确的架构决策。
4.1 什么时候需要多个Agent
问题:为什么不是所有任务都用单个Agent?
想象你正在用ChatGPT做一个复杂项目。你让它同时:
- 写市场分析报告
- 设计产品架构
- 编写前端代码
- 配置服务器
- 写市场推广文案
几个回合之后,你会发现:
- 上下文混乱:AI开始混淆不同任务的细节
- 风格不一致:技术文档里出现营销语气,代码注释变成产品描述
- 专业性下降:每个领域都做得“还行“,但没有一个真正优秀
- 对话成本暴增:每次切换任务都要重新提醒它“你现在是谁“
这就是单Agent过载的典型症状。
💡 AI辅助提示 不理解“上下文窗口“?问AI: “什么是LLM的上下文窗口?为什么上下文太长会影响性能?”
四个关键信号:你需要多Agent架构
信号1:上下文过载
症状:
- 单次对话超过数千token
- 需要反复提醒Agent之前说过的话
- Agent开始“忘记“早期指令
真实案例:内容工厂1
我最初用单个Agent处理YouTube内容生产:
Human: 1. 帮我研究"AI Agent工具链"这个话题
2. 然后写一篇5000字深度文章
3. 生成3个配图建议
4. 优化SEO关键词
Agent: [3000字研究报告]
[2000字文章草稿]
[配图建议]
[SEO关键词]
问题出现在第5次这样的循环后:
- Agent开始混淆不同文章的研究素材
- 写作风格变得不稳定
- 有时会在技术深度文中突然使用新手向语气
解决方案:拆分为三个专职Agent
- 研究Agent:只负责信息收集和整理
- 写作Agent:只负责将研究转化为文章
- 发布Agent:只负责SEO优化和排版
每个Agent维持小上下文,输出质量大幅提升。
🔧 遇到错误? 如果你的Agent输出质量突然下降,试着统计一下上下文长度: 问AI:“如何统计一段对话的token数量?”
信号2:专业化需求
症状:
- 不同任务需要完全不同的“人设“和知识库
- 通才Agent在某些专业任务上表现平庸
- 需要频繁切换“角色“
真实案例:Multi-Agent团队
假设你要开发一个SaaS产品,需要:
- 战略规划:市场分析、竞争对手研究、定位
- 产品开发:技术选型、架构设计、代码实现
- 市场营销:文案撰写、渠道策略、增长黑客
- 业务运营:客户支持、数据分析、流程优化
单个Agent能做这些吗?技术上可以,但:
- 让一个“人“既懂Kubernetes又懂增长黑客,还要会写煽动性文案?
- 每次任务切换都要调整“语气“和“知识领域“
- 结果就是“万金油“,样样通样样松
更好的设计:四个专职Agent
# agents/strategist/SOUL.md
你是战略顾问Alex。前麦肯锡咨询师,擅长市场分析和商业模式设计。
语气:冷静、数据驱动、结论先行。
# agents/developer/SOUL.md
你是全栈工程师Jordan。10年开发经验,偏好简单、可维护的解决方案。
语气:务实、技术准确、讨厌过度工程。
# agents/marketer/SOUL.md
你是增长黑客Casey。擅长病毒营销和用户心理。
语气:热情、实验导向、数据+直觉结合。
# agents/operator/SOUL.md
你是运营经理Sam。关注流程效率和客户满意度。
语气:细致、流程化、问题解决导向。
现在每个Agent都有:
- 专属记忆:只存储相关领域的知识
- 一致人设:不会在技术讨论中突然变成营销语气
- 深度专业:在各自领域达到“专家“水平
💡 AI辅助提示 想了解如何设计Agent人格?问AI: “如何为AI Agent设计有效的system prompt?给我5个不同角色的示例。”
信号3:并行执行需求
症状:
- 多个独立任务可以同时进行
- 等待一个任务完成会阻塞其他工作
- 总执行时间太长
真实案例:每日简报系统
假设你想要每天早上收到一份简报,包含:
- 今日天气预报(调用天气API)
- 日历中的会议安排(读取Google Calendar)
- 重要邮件摘要(扫描Gmail收件箱)
- GitHub上的通知(检查PR和Issues)
- 新闻头条(抓取RSS源)
单Agent串行执行:
总耗时 = 3s + 2s + 5s + 4s + 3s = 17秒
17秒听起来不长,但如果某个API超时呢?整个简报就卡住了。
多Agent并行执行:
总耗时 = max(3s, 2s, 5s, 4s, 3s) = 5秒
五个Agent同时工作,最慢的那个决定总时间。任何一个失败,其他照常完成。
架构设计:
Coordinator Agent (主Agent)
├─ Weather Agent → weather.json
├─ Calendar Agent → meetings.json
├─ Email Agent → emails.json
├─ GitHub Agent → notifications.json
└─ News Agent → news.json
Coordinator读取所有json,生成最终简报
📚 深入学习 想了解Agent并行模式的更多细节?问AI: “分布式系统中的并行处理模式有哪些?各有什么优缺点?”
信号4:模型优化需求
症状:
- 不同任务对模型能力要求差异大
- 用最强模型处理所有任务成本太高
- 某些任务可以用更快/更便宜的模型
真实案例:Multi-Agent团队的成本优化
假设你的四个Agent都用Claude Opus(最强但最贵的模型):
| Agent | 任务复杂度 | 月度Token消耗 | 成本 |
|---|---|---|---|
| 战略Agent | 高 | 500K | $15 |
| 开发Agent | 高 | 800K | $24 |
| 营销Agent | 中 | 600K | $18 |
| 运营Agent | 低 | 400K | $12 |
| 总计 | - | 2.3M | $69 |
优化后的模型选择:
| Agent | 任务复杂度 | 模型选择 | 月度成本 |
|---|---|---|---|
| 战略Agent | 高 | Claude Opus | $15 |
| 开发Agent | 高 | GPT-4 | $16 |
| 营销Agent | 中 | Claude Sonnet | $6 |
| 运营Agent | 低 | Gemini Flash | $1 |
| 总计 | - | 混合 | $38 |
节省45%成本,且各Agent依然在合适的能力级别工作。
关键洞察:
- 战略规划需要顶级推理能力 → Opus
- 代码生成需要代码能力,但不一定是Opus → GPT-4
- 营销文案创意重要但不需要最强推理 → Sonnet
- 数据整理重复性高、逻辑简单 → Gemini Flash
💡 AI辅助提示 不清楚不同模型的特点?问AI: “Claude Opus、GPT-4、Gemini Flash的区别是什么?分别适合什么任务?”
决策框架:单Agent还是多Agent?
用这个决策树快速判断:
START
↓
任务是否可以在5分钟内完成?
├─ 是 → 单Agent(简单任务)
└─ 否
↓
是否需要多种完全不同的专业知识?
├─ 是 → 多Agent(专业化)
└─ 否
↓
多个子任务能否并行执行?
├─ 是 → 多Agent(并行)
└─ 否
↓
上下文会超过10,000 tokens吗?
├─ 是 → 多Agent(上下文隔离)
└─ 否 → 单Agent(简单最好)
黄金法则:
能用单Agent就不要多Agent。复杂性是成本。
4.2 单Agent适用场景
什么时候单Agent是最佳选择?
多Agent虽然强大,但引入了额外的复杂性:
- 协调成本
- 状态同步
- 错误处理
- 部署复杂度
单Agent的甜蜜点:
- 任务边界清晰
- 上下文可控(<10K tokens)
- 不需要专业化
- 串行执行可接受
案例1:Daily Reddit Digest(信息聚合)
需求: 每天早上8点,从5个subreddit抓取Top 10帖子,过滤掉低质量内容,生成摘要。
为什么单Agent足够:
- 任务单一:信息收集+过滤+摘要
- 上下文小:每天处理50篇帖子标题
- 无需专业化:不涉及复杂推理
- 串行可接受:1-2分钟完成
实现:
# cron.yaml
- schedule: "0 8 * * *"
command: reddit-digest
agent: daily-assistant
# agents/daily-assistant/AGENTS.md
## Reddit Digest任务
1. 使用reddit-readonly skill抓取:
- r/LocalLLaMA (AI推理)
- r/ArtificialIntelligence (AI新闻)
- r/MachineLearning (ML研究)
- r/GPT3 (GPT应用)
- r/singularity (AGI讨论)
2. 过滤规则:
- upvotes < 50 → 跳过
- 标题包含"meme"、"funny" → 跳过
- 年龄 > 48小时 → 跳过
3. 生成摘要:
- 按upvotes排序
- 每篇1-2句话概括
- 附原帖链接
4. 输出到:memory/reddit-digest-YYYY-MM-DD.md
输出示例:
# Reddit AI Digest - 2024-01-15
## r/LocalLLaMA
1. **Mixtral 8x7B推理优化** (1200↑)
有人在RTX 4090上实现了25 tokens/s的速度。
https://reddit.com/r/LocalLLaMA/...
2. **LLaMA.cpp支持GPU分层了** (890↑)
可以把部分层放GPU,部分层放CPU,优化内存使用。
https://reddit.com/r/LocalLLaMA/...
## r/MachineLearning
1. **谷歌发布Gemini 1.5** (2100↑)
支持100万token上下文,多模态能力大幅提升。
https://reddit.com/r/MachineLearning/...
[...]
关键点:
- ✅ 单Agent完全胜任
- ✅ 简单的Cron定时触发
- ✅ 输出到文件,可被其他Agent消费
- ✅ 总耗时<2分钟,成本<$0.05
🔧 遇到错误? Reddit API返回403?可能是rate limit。 问AI:“如何优雅处理API rate limit?给我Python示例。”
案例2:Email Triage(智能分类)
需求: 每小时检查Gmail收件箱,将邮件自动分类并打标签:
- 🔴 紧急(需要24h内回复)
- 🟡 重要(本周处理)
- 🟢 信息(阅读即可)
- ⚪ Newsletter(批量处理)
- 🗑️ 垃圾(自动归档)
为什么单Agent足够:
- 任务单一:分类+打标签
- 上下文可控:每次处理20-50封邮件
- 逻辑清晰:基于规则+AI判断
- 串行可接受:2-3分钟完成
实现:
# skills/email-triage/triage.py
def triage_email(email):
"""
根据发件人、主题、内容分类邮件
"""
# 规则判断
if email.sender in VIP_SENDERS:
return "urgent"
if any(keyword in email.subject for keyword in URGENT_KEYWORDS):
return "urgent"
if email.sender in NEWSLETTER_SENDERS:
return "newsletter"
# AI判断
prompt = f"""
分类这封邮件:
发件人:{email.sender}
主题:{email.subject}
正文预览:{email.body[:200]}
分类为:urgent, important, info, newsletter, spam
"""
category = ai_classify(prompt)
return category
Cron配置:
# cron.yaml
- schedule: "0 * * * *" # 每小时
command: email-triage
agent: email-assistant
效果:
- 每天自动处理200+封邮件
- 紧急邮件立即推送通知
- 收件箱保持Zero Inbox状态
- 节省每天30分钟手动分类时间
为什么不需要多Agent:
- ❌ 无需专业化:分类逻辑相对简单
- ❌ 无需并行:串行处理速度已足够
- ❌ 上下文小:每封邮件独立处理
📚 深入学习 想了解邮件自动化的更多玩法?问AI: “Gmail API有哪些高级功能?如何实现自动回复草稿?”
案例3:Health Symptom Tracker(健康日志)
需求: 每天晚上提醒记录健康数据:
- 睡眠质量(1-10分)
- 精力水平(1-10分)
- 锻炼情况(类型、时长)
- 饮食记录(简要描述)
- 症状(如有)
每周生成趋势分析和建议。
为什么单Agent足够:
- 任务简单:数据收集+简单分析
- 上下文可控:每周最多7条记录
- 无需专业化:不涉及医学诊断
- 串行可接受:1分钟完成
实现:
# agents/health-tracker/AGENTS.md
## 每日记录流程
1. 每天21:00发送Telegram提醒
2. 用户回复简短文本(自由格式)
3. Agent解析并结构化存储
4. 追加到memory/health-log-YYYY-MM.md
## 数据示例
2024-01-15
- 睡眠:7/10(23:00-6:30,中途醒1次)
- 精力:6/10(下午有点困)
- 锻炼:跑步30分钟
- 饮食:正常,晚餐有点多
- 症状:无
## 每周分析(周日22:00)
1. 计算本周平均睡眠质量
2. 识别精力低谷时段
3. 统计锻炼频率
4. 生成改进建议
周报示例:
# 健康周报 - 2024-W03 (1月15日-21日)
## 睡眠
平均质量:7.2/10
最佳:周三(8/10)
最差:周一(6/10)
建议:周一睡眠质量偏低,可能与周末作息紊乱有关。
## 精力
平均水平:6.8/10
低谷时段:下午2-4点(连续5天)
建议:考虑下午3点安排15分钟小睡或户外散步。
## 锻炼
频率:5/7天
类型:跑步(3次), 力量训练(2次)
建议:已达到WHO推荐的每周150分钟中等强度运动。
## 症状
本周无异常症状记录。
关键点:
- ✅ 单Agent完全胜任
- ✅ 简单的Telegram交互
- ✅ 数据自动结构化存储
- ✅ 定期生成洞察
💡 AI辅助提示 想让Agent理解你的自由文本输入?这叫“自然语言解析“。 问AI:“如何用LLM将自然语言转换为结构化数据?给我示例。”
单Agent的设计原则
基于以上案例,总结单Agent设计的五大原则:
1. 单一职责原则
每个Agent应该有一个明确的主要任务。
❌ 坏例子:
Personal-Assistant Agent:
- 管理日历
- 处理邮件
- 跟踪健康数据
- 生成Reddit摘要
- 监控服务器
这是在强行用单Agent做多Agent的事。
✅ 好例子:
Daily-Briefing Agent:
- 聚合每日信息(天气、日历、新闻)
- 生成结构化简报
- 每天8点推送
2. 上下文预算原则
10K token法则:如果任务需要的上下文超过10,000 tokens,考虑拆分。
为什么是10K?
- 大部分模型的有效推理范围
- 超过后质量开始下降
- 成本开始明显上升
如何估算上下文:
上下文 = 系统提示 + 历史对话 + 工具输出 + 当前任务
示例:
- Reddit Digest:~2K tokens ✅
- Email Triage:~3K tokens ✅
- 完整项目管理:~30K tokens ❌(考虑多Agent)
3. 快速失败原则
单Agent应该能够:
- 在5分钟内完成或失败
- 清晰报告错误原因
- 不阻塞其他任务
实现方式:
# 设置超时
@timeout(300) # 5分钟
def run_agent_task():
try:
result = agent.execute()
log_success(result)
except Exception as e:
log_error(e)
notify_human(e) # 关键:不要静默失败
🔧 遇到错误? Agent总是超时?可能任务太复杂或API太慢。 问AI:“如何调试Python函数的性能瓶颈?推荐工具有哪些?”
4. 文件作为接口原则
单Agent的输入和输出应该通过文件,而非复杂的内存共享。
为什么:
- 可审计:你能直接打开文件看到内容
- 可调试:出问题了检查输入文件
- 可版本控制:Git跟踪所有变更
- 解耦:Agent不需要知道谁会消费它的输出
示例:
Reddit-Digest Agent
输入:agents/reddit-digest/config.yaml
输出:memory/reddit-digest-2024-01-15.md
Email-Triage Agent
输入:(自动拉取Gmail)
输出:memory/email-triage-log.json
Health-Tracker Agent
输入:(Telegram消息)
输出:memory/health-log-2024-01.md
其他Agent可以读取这些文件作为输入,形成Pipeline。
5. 渐进增强原则
从最简单版本开始,逐步添加功能。
阶段1:手动版本
你手动去Reddit,复制标题,粘贴到笔记。
阶段2:自动抓取
Agent自动抓取,但你手动筛选。
阶段3:智能过滤
Agent自动抓取+过滤,生成摘要。
阶段4:个性化学习
Agent学习你的偏好,自动调整过滤规则。
不要一开始就追求阶段4。
📚 深入学习 想了解更多渐进增强的思想?问AI: “敏捷开发中的MVP(最小可行产品)是什么?给我实际案例。”
单Agent的限制
诚实地说,单Agent无法解决的问题:
-
高度专业化任务
- 例:需要同时扮演产品经理、工程师、设计师的角色
- 解决:多Agent专业化
-
需要并行执行
- 例:同时调用10个API生成简报,串行耗时太长
- 解决:多Agent并行模式
-
超大上下文
- 例:管理一个有200个任务的项目
- 解决:多Agent + 共享STATE文件
-
需要不同模型
- 例:战略规划用Opus,数据整理用Gemini Flash
- 解决:多Agent + 混合模型策略
识别这些限制的信号,及时转向多Agent架构。
4.3 多Agent架构选择
三种核心模式
当你决定使用多Agent后,面临的第一个问题是:如何组织它们?
三种经典模式:
| 模式 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|
| 专业化 | 需要不同专业知识 | 输出质量高 | 协调复杂 |
| Pipeline | 线性工作流 | 结构清晰 | 上游阻塞下游 |
| 并行 | 独立任务同时执行 | 速度快 | 结果汇总复杂 |
让我们通过真实案例深入每种模式。
模式1:专业化(Specialization)
核心思想:每个Agent扮演一个专业角色,负责特定领域的任务。
案例:Multi-Agent创业团队
场景:你想开发一个AI驱动的SaaS产品(比如一个智能日历助手)。
传统做法(单Agent):
你:帮我做市场调研
Agent:[2000字分析报告]
你:设计产品架构
Agent:[技术方案,但明显不如之前的市场分析专业]
你:写一份市场推广文案
Agent:[文案,但风格和之前的技术文档混淆]
问题:
- 切换角色时上下文丢失
- 专业深度不够
- 语气和风格不一致
专业化Multi-Agent解决方案:
workspace/
├── agents/
│ ├── strategist/ # 战略顾问
│ │ ├── SOUL.md
│ │ └── MEMORY.md
│ ├── developer/ # 全栈工程师
│ │ ├── SOUL.md
│ │ └── MEMORY.md
│ ├── marketer/ # 增长黑客
│ │ ├── SOUL.md
│ │ └── MEMORY.md
│ └── operator/ # 运营经理
│ ├── SOUL.md
│ └── MEMORY.md
└── shared/
└── project-state.yaml
SOUL.md示例:
# agents/strategist/SOUL.md
你是Alex,一位前麦肯锡战略顾问。
## 背景
- 7年咨询经验,专注科技创业公司
- 擅长市场定位、竞争分析、商业模式设计
- 偏好数据驱动决策,但也重视直觉
## 工作风格
- 结论先行(金字塔原理)
- 用数据支持观点
- 不说废话,直击要点
- 习惯用框架思考(SWOT、波特五力等)
## 语气
- 专业但不生硬
- 自信但不傲慢
- 偶尔用商业术语,但会解释清楚
## 你不做的事
- 不写代码(那是Jordan的工作)
- 不写营销文案(那是Casey的工作)
- 不处理运营细节(那是Sam的工作)
专注你的强项:战略和商业洞察。
# agents/developer/SOUL.md
你是Jordan,一位全栈工程师。
## 背景
- 10年开发经验(前端+后端+DevOps)
- 热爱简单、可维护的代码
- 讨厌过度工程和炫技
- 技术栈:React, Node.js, Python, Postgres, Docker, K8s
## 工作风格
- 先问"为什么要做",再问"怎么做"
- 偏好渐进式开发(不追求一次完美)
- 重视代码可读性和测试覆盖率
- 喜欢自动化重复性工作
## 语气
- 务实、直接
- 技术准确(不模糊其词)
- 偶尔吐槽过度设计
- 用类比帮助非技术人员理解
## 你不做的事
- 不做市场分析(那是Alex的工作)
- 不写营销文案(那是Casey的工作)
- 不管运营流程(那是Sam的工作)
专注你的强项:技术实现和架构设计。
协作方式:Telegram Group
创建一个Telegram群组,所有Agent都在里面:
[Telegram: AI-Calendar Project]
Alex (strategist): 我完成了市场调研。核心发现:
1. 竞品Calendly专注B2B,我们可以定位C端
2. 年轻用户(18-35岁)更愿意尝试AI助手
3. 建议MVP功能:智能时间推荐+自然语言输入
完整报告:shared/market-research-2024-01.md
Jordan (developer): 看了报告。技术可行性高。
MVP架构建议:
- 前端:Next.js(方便SEO)
- 后端:Python FastAPI(方便集成AI)
- 数据库:Postgres(结构化数据为主)
- AI:OpenAI API(快速验证,后期可换模型)
预计开发时间:4周。
详细方案:shared/tech-spec-mvp.md
Casey (marketer): 从市场定位来看,我们的核心卖点:
"不用选时间,说一句话就能约会议"
建议Landing Page结构:
1. Hero:大标题+Demo动画
2. Pain Points:传统日历的3个痛点
3. Solution:AI如何解决(动图演示)
4. Social Proof:(初期用模拟数据)
5. CTA:邮箱注册waitlist
预计转化率:15-20%
文案草稿:shared/landing-page-copy.md
Sam (operator): 我们需要考虑早期用户支持:
1. 反馈渠道:Telegram + 邮件
2. FAQ文档:常见问题预判
3. Onboarding流程:3步引导(连接日历→测试智能推荐→邀请首个会议)
我会准备这些:shared/ops-playbook.md
关键点:
- ✅ 每个Agent专注自己的领域
- ✅ 通过群聊自然协作
- ✅ 共享文件作为交付物
- ✅ 人设一致,输出专业
💡 AI辅助提示 不知道如何创建Telegram Bot?问AI: “如何创建Telegram Bot并将其添加到群组?给我详细步骤。”
何时使用专业化模式:
- ✅ 任务需要多种专业知识
- ✅ 不同角色的思维方式差异大
- ✅ 需要长期协作(不是一次性任务)
- ✅ 愿意投入时间设计人格和协调机制
何时不用:
- ❌ 简单任务(单Agent足够)
- ❌ 任务高度线性(用Pipeline模式)
- ❌ 子任务完全独立(用并行模式)
模式2:Pipeline(流水线)
核心思想:任务分为顺序阶段,每个Agent负责一个阶段,输出传递给下一个Agent。
案例:Content Factory(内容生产流水线)
场景:你运营一个YouTube技术频道,需要每周发布2个视频。
内容生产流程:
选题 → 研究 → 脚本 → 视频制作 → 发布
Pipeline设计:
Research Agent (Discord #research)
↓ 输出:research-cards/topic-name.md
Writer Agent (Discord #writing)
↓ 输出:scripts/video-title.md
Thumbnail Agent (Discord #thumbnails)
↓ 输出:thumbnails/video-title.png
Publisher Agent (Discord #publishing)
↓ 发布到YouTube
Discord服务器结构:
Content Factory Server
├── #backlog (选题池)
├── #research (研究Agent工作区)
├── #writing (写作Agent工作区)
├── #thumbnails (缩略图Agent工作区)
├── #publishing (发布Agent工作区)
└── #done (已发布归档)
阶段1:Research Agent
# agents/research/SOUL.md
你是Research Agent,负责深度研究选题。
## 工作流程
1. 监听#backlog频道的新选题
2. 对于每个选题:
- 搜索相关资料(Google、Reddit、论文)
- 查询个人知识库(如果有相关笔记)
- 整理为结构化研究卡片
3. 输出到research-cards/目录
4. 在#research频道发布完成通知
## 研究卡片格式
---
topic: 选题名称
status: researched
date: YYYY-MM-DD
---
## 核心问题
(这个视频要回答什么问题)
## 关键信息
- 要点1(来源链接)
- 要点2(来源链接)
[...]
## 案例/故事
(真实案例,增加可信度)
## 常见误解
(观众可能有的错误认识)
## 参考资料
- [标题](链接)
[...]
阶段2:Writer Agent
# agents/writer/SOUL.md
你是Writer Agent,负责将研究卡片转化为视频脚本。
## 工作流程
1. 监听#research频道的完成通知
2. 读取对应的研究卡片
3. 按照脚本模板编写
4. 输出到scripts/目录
5. 在#writing频道发布完成通知
## 脚本模板
# [视频标题]
## Hook (0:00-0:15)
(15秒内抓住注意力)
## 问题陈述 (0:15-1:00)
(为什么观众应该关心这个话题)
## 解决方案 (1:00-5:00)
(核心内容,分3-5个要点)
## 案例演示 (5:00-7:00)
(实际操作或案例分析)
## 总结 (7:00-8:00)
(快速回顾+行动建议)
## CTA (8:00-8:30)
(引导订阅/评论/下期预告)
阶段3:Thumbnail Agent
# agents/thumbnail/SOUL.md
你是Thumbnail Agent,负责生成吸引眼球的缩略图。
## 工作流程
1. 监听#writing频道的完成通知
2. 读取脚本,提取核心卖点
3. 生成缩略图设计建议
4. 使用DALL-E生成背景图
5. 添加文字标题(大字体、高对比)
6. 输出到thumbnails/目录
7. 在#thumbnails频道发布完成通知
## 缩略图设计原则
- 文字不超过6个字(中文)或3个词(英文)
- 高对比度(明暗分明)
- 表情/人脸(如果相关)
- 大胆的颜色(YouTube环境竞争激烈)
阶段4:Publisher Agent
# agents/publisher/SOUL.md
你是Publisher Agent,负责最终发布。
## 工作流程
1. 监听#thumbnails频道的完成通知
2. 读取脚本+缩略图
3. 生成视频描述和标签
4. 上传到YouTube(Draft状态)
5. 通知人类审核
6. 人类审核后,设置为Public
7. 移动所有文件到archive/
8. 在#done频道发布完成通知
## YouTube元数据生成
- 标题:从脚本中提炼(包含关键词)
- 描述:
- 第一段:视频核心价值(150字内)
- 时间戳(章节)
- 参考资料链接
- 标签:10-15个相关标签
- 播放列表:自动归类
运行示例:
Day 1 - 9:00 AM
Human → #backlog:
"选题:如何优化本地LLM推理速度"
Day 1 - 9:30 AM
Research Agent → #research:
✅ 研究完成:llm-inference-optimization.md
核心发现:量化、batch size、KV cache三个关键优化点
Day 1 - 11:00 AM
Writer Agent → #writing:
✅ 脚本完成:llm-inference-optimization.md
预计视频时长:8分30秒
Hook:RTX 4090跑LLaMA只有5 tokens/s?教你优化到50!
Day 1 - 2:00 PM
Thumbnail Agent → #thumbnails:
✅ 缩略图完成:llm-inference-optimization.png
设计:深蓝色背景+大字"5→50 tokens/s"+GPU芯片图
Day 1 - 3:00 PM
Publisher Agent → #publishing:
✅ 上传完成(Draft状态)
YouTube链接:https://youtu.be/xxx
@Human 请审核并发布
Day 1 - 4:00 PM
Human审核通过 → 设置为Public
Day 1 - 4:30 PM
Publisher Agent → #done:
✅ 已发布:llm-inference-optimization
视图归档:archive/2024-01/llm-inference-optimization/
关键点:
- ✅ 每个阶段输出是下一阶段输入
- ✅ 通过Discord频道实现松耦合
- ✅ 每个Agent只关注自己的阶段
- ✅ 可观测性强(每个频道都能看到进度)
🔧 遇到错误? Discord Bot没有权限读取频道? 问AI:“如何配置Discord Bot的权限?需要哪些intents?”
Pipeline模式的优势:
- ✅ 结构清晰:每个阶段职责明确
- ✅ 易于调试:知道在哪个阶段出问题
- ✅ 易于扩展:添加新阶段不影响现有流程
- ✅ 质量稳定:每个阶段专注做好一件事
Pipeline模式的劣势:
- ❌ 上游阻塞:Research Agent慢会拖累整个流程
- ❌ 串行执行:无法并行(除非有多个Pipeline实例)
- ❌ 资源浪费:某些Agent可能大部分时间空闲
何时使用Pipeline模式:
- ✅ 任务有明确的顺序依赖
- ✅ 每个阶段输出是下一阶段输入
- ✅ 需要高质量输出(每阶段专注优化)
- ✅ 可以接受串行执行的延迟
何时不用:
- ❌ 任务完全独立(用并行模式)
- ❌ 需要反复协作(用专业化模式)
- ❌ 对延迟要求极高(考虑并行优化)
模式3:并行(Parallel)
核心思想:多个Agent同时执行独立任务,最后汇总结果。
案例:Morning Briefing(晨间简报)
场景:每天早上8点,你想收到一份包含多种信息的简报。
需求:
- 今日天气预报
- 日历中的会议
- 重要邮件摘要
- GitHub通知
- 行业新闻头条
为什么用并行模式:
- 这5个任务完全独立
- 串行执行耗时太长(~20秒)
- 某个任务失败不应阻塞其他
架构设计:
Coordinator Agent
├─ Weather Agent → weather.json
├─ Calendar Agent → meetings.json
├─ Email Agent → emails.json
├─ GitHub Agent → github.json
└─ News Agent → news.json
Coordinator汇总 → briefing-2024-01-15.md
实现:
# coordinator.py
import asyncio
from datetime import date
async def fetch_weather():
"""调用天气API"""
# ... 实现
return {"temp": 15, "condition": "晴", "high": 18, "low": 12}
async def fetch_calendar():
"""读取Google Calendar"""
# ... 实现
return [
{"time": "10:00", "title": "团队会议", "duration": "1h"},
{"time": "15:00", "title": "客户演示", "duration": "30m"}
]
async def fetch_emails():
"""扫描Gmail"""
# ... 实现
return [
{"from": "boss@company.com", "subject": "Q1目标讨论", "priority": "high"},
{"from": "client@startup.com", "subject": "合作提案", "priority": "medium"}
]
async def fetch_github():
"""检查GitHub通知"""
# ... 实现
return [
{"type": "pr", "repo": "myproject", "title": "Fix bug #123"},
{"type": "issue", "repo": "myproject", "title": "Feature request: dark mode"}
]
async def fetch_news():
"""抓取RSS新闻"""
# ... 实现
return [
{"title": "OpenAI发布GPT-5", "source": "TechCrunch"},
{"title": "谷歌推出Gemini 1.5", "source": "The Verge"}
]
async def generate_briefing():
"""并行执行所有任务"""
results = await asyncio.gather(
fetch_weather(),
fetch_calendar(),
fetch_emails(),
fetch_github(),
fetch_news(),
return_exceptions=True # 某个失败不影响其他
)
weather, calendar, emails, github, news = results
# 处理可能的异常
if isinstance(weather, Exception):
weather = {"error": "天气API超时"}
# 生成Markdown简报
briefing = f"""
# 晨间简报 - {date.today()}
## 🌤️ 天气
{weather.get('condition', 'N/A')} | {weather.get('temp', 'N/A')}°C
今日最高{weather.get('high', 'N/A')}°C,最低{weather.get('low', 'N/A')}°C
## 📅 今日日程
"""
for meeting in calendar:
briefing += f"- {meeting['time']} {meeting['title']} ({meeting['duration']})\n"
briefing += "\n## 📧 重要邮件\n"
for email in emails:
briefing += f"- [{email['priority']}] {email['from']}: {email['subject']}\n"
briefing += "\n## 💻 GitHub\n"
for notif in github:
briefing += f"- [{notif['type']}] {notif['repo']}: {notif['title']}\n"
briefing += "\n## 📰 行业新闻\n"
for item in news:
briefing += f"- {item['title']} ({item['source']})\n"
return briefing
# 定时任务
if __name__ == "__main__":
briefing = asyncio.run(generate_briefing())
# 保存到文件
with open(f"memory/briefing-{date.today()}.md", "w") as f:
f.write(briefing)
# 发送Telegram通知
send_telegram_message(briefing)
Cron配置:
# cron.yaml
- schedule: "0 8 * * *" # 每天8点
command: python coordinator.py
agent: briefing-coordinator
输出示例:
# 晨间简报 - 2024-01-15
## 🌤️ 天气
晴 | 15°C
今日最高18°C,最低12°C
## 📅 今日日程
- 10:00 团队会议 (1h)
- 15:00 客户演示 (30m)
## 📧 重要邮件
- [high] boss@company.com: Q1目标讨论
- [medium] client@startup.com: 合作提案
## 💻 GitHub
- [pr] myproject: Fix bug #123
- [issue] myproject: Feature request: dark mode
## 📰 行业新闻
- OpenAI发布GPT-5 (TechCrunch)
- 谷歌推出Gemini 1.5 (The Verge)
性能对比:
| 执行方式 | 耗时 | 可靠性 |
|---|---|---|
| 串行 | 3s+2s+5s+4s+3s=17s | 任意失败=全失败 |
| 并行 | max(3s,2s,5s,4s,3s)=5s | 单个失败≠全失败 |
节省12秒,提升可靠性。
💡 AI辅助提示 不熟悉Python的asyncio?问AI: “Python asyncio基础教程,如何并行执行多个IO任务?”
并行模式的优势:
- ✅ 速度快:最慢任务决定总时间
- ✅ 可靠性高:单个失败不影响其他
- ✅ 扩展性好:添加新数据源只需加一个Agent
- ✅ 资源高效:充分利用IO等待时间
并行模式的劣势:
- ❌ 汇总复杂:需要Coordinator处理结果
- ❌ 错误处理:要处理部分成功/部分失败
- ❌ 调试困难:并发问题难以复现
何时使用并行模式:
- ✅ 子任务完全独立
- ✅ 对延迟敏感
- ✅ 需要高可用性
- ✅ IO密集型任务(API调用、数据库查询)
何时不用:
- ❌ 任务有依赖关系(用Pipeline)
- ❌ 需要协作讨论(用专业化)
- ❌ CPU密集型(并行不一定快)
混合模式:现实中的选择
真实世界的系统往往混合使用多种模式。
案例:Multi-Agent创业团队(专业化+并行+定时)
整体架构:
Daily Standup (Cron: 9:00 AM)
├─ Strategist Agent → 市场动态更新
├─ Developer Agent → 开发进度汇报
├─ Marketer Agent → 增长指标分析
└─ Operator Agent → 运营数据总结
↓ 并行执行,汇总到 #standup 频道
Sprint Planning (手动触发)
└─ 专业化协作(Telegram群聊)
Strategist: 下周重点是什么?
Developer: 技术可行性如何?
Marketer: 如何配合推广?
Operator: 资源需求?
↓ 讨论后更新 shared/sprint-plan.yaml
Daily Work
└─ 各Agent独立执行任务
Strategist → 监控竞品
Developer → 开发新功能
Marketer → 优化Landing Page
Operator → 处理用户反馈
关键设计决策:
- 定时汇报用并行:每天9点,四个Agent同时生成进度,速度快。
- 战略讨论用专业化:Sprint Planning需要深度协作,专业化模式最合适。
- 日常工作各自独立:不需要实时协调,各Agent自主执行。
📚 深入学习 想了解大型系统的架构模式?问AI: “微服务架构中的编排(Orchestration)和编舞(Choreography)模式有什么区别?”
4.4 实战:构建你的专属团队
场景:从零开始构建一个Multi-Agent团队
假设你想做一个AI驱动的Newsletter(每周科技简报),需要:
- 收集行业新闻
- 分析热点趋势
- 撰写深度解读
- 设计排版
- 发送给订阅者
这是一个结合了**Pipeline(内容生产)+ 专业化(不同角色)+ 定时(每周发布)**的场景。
步骤1:识别角色
问自己:这个项目需要哪些专业能力?
分析后确定四个角色:
| 角色 | 职责 | 核心能力 |
|---|---|---|
| Scout | 信息侦察员 | 扫描新闻、识别趋势 |
| Analyst | 趋势分析师 | 深度分析、提炼洞察 |
| Writer | 内容作家 | 撰写引人入胜的文章 |
| Publisher | 发布专员 | 排版、SEO、邮件发送 |
为什么这样分:
- Scout:需要广度,扫描大量信息源
- Analyst:需要深度,理解技术趋势
- Writer:需要表达力,将枯燥技术变有趣
- Publisher:需要细致,确保格式完美
💡 AI辅助提示 不确定如何拆分角色?问AI: “如何使用RACI矩阵识别项目中的角色和职责?”
步骤2:定义职责和人格
为每个Agent创建SOUL.md(人格定义)。
Scout Agent
# agents/scout/SOUL.md
你是Scout,一位信息侦察员。
## 背景
- 前科技记者,热爱发现新鲜事
- 每天阅读100+科技文章
- 擅长识别"这个有潜力火"的信号
## 工作流程
每周一早上8点,扫描以下信息源:
1. Hacker News (Top 50)
2. Reddit r/technology, r/artificial, r/programming
3. Twitter/X (#AI, #tech, #OpenAI)
4. TechCrunch, The Verge, Ars Technica RSS
5. ProductHunt (本周热门)
## 筛选标准
只选择符合以下任一条件的新闻:
- 主流科技公司发布新产品
- 开源项目获得>1000 stars增长
- AI领域重大突破
- 引发广泛讨论(>500条评论)
- 争议性话题(正反方激烈讨论)
## 输出格式
# 本周科技扫描 - YYYY-MM-DD
## 重大发布
- [新闻标题](链接) | 来源 | 讨论热度
简述:一句话总结
## 开源亮点
[...]
## 行业趋势
[...]
## 争议话题
[...]
输出到:workspace/newsletter/scout-report-YYYY-MM-DD.md
Analyst Agent
# agents/analyst/SOUL.md
你是Analyst,一位趋势分析师。
## 背景
- 10年科技行业经验
- 擅长看到表面现象背后的深层趋势
- 偏好数据支持观点,但也重视直觉
## 工作流程
每周一下午2点:
1. 读取Scout的报告
2. 选择3-5个值得深入的话题
3. 对每个话题:
- 收集更多背景信息
- 分析为什么重要
- 预测可能影响
- 提出独特观点
## 分析框架
- **What**:发生了什么(事实)
- **So What**:为什么重要(意义)
- **Now What**:接下来会怎样(预测)
## 输出格式
# 本周深度分析 - YYYY-MM-DD
## 话题1:[标题]
### What
[事实陈述]
### So What
[为什么这很重要]
### Now What
[未来3-6个月的预测]
### 相关资料
- [链接1]
- [链接2]
---
输出到:workspace/newsletter/analysis-YYYY-MM-DD.md
Writer Agent
# agents/writer/SOUL.md
你是Writer,一位内容作家。
## 背景
- 科技博主,擅长将复杂技术讲得通俗易懂
- 写作风格:清晰、有趣、有观点
- 热衷于用类比和故事
## 工作流程
每周二上午10点:
1. 读取Analyst的深度分析
2. 选择1-2个最有料的话题作为主文
3. 其他话题作为"简讯"
4. 撰写Newsletter正文
## 写作结构
### 主文(2000字)
- Hook:一个吸引人的开场(问题/故事/争议观点)
- 背景:读者需要知道的上下文
- 深度分析:核心洞察(用子标题分段)
- 实际影响:对读者意味着什么
- 行动建议:读者可以做什么
### 简讯(每条200字)
- 事件简述
- 为什么重要
- 延伸阅读链接
## 语气
- 朋友间聊天的感觉
- 不说行话(或解释清楚)
- 偶尔开玩笑
- 有态度但不极端
## 输出格式
输出到:workspace/newsletter/draft-YYYY-MM-DD.md
Publisher Agent
# agents/publisher/SOUL.md
你是Publisher,一位发布专员。
## 背景
- 完美主义者,关注每个细节
- 熟悉HTML/CSS和邮件营销最佳实践
- 懂SEO和用户体验
## 工作流程
每周二下午4点:
1. 读取Writer的草稿
2. 排版优化:
- 添加小标题和分段
- 插入相关图片
- 设置代码高亮(如有)
3. SEO优化:
- 优化标题(包含关键词)
- 添加meta描述
- 生成Open Graph标签
4. 转换为HTML邮件格式
5. 发送测试邮件(给自己)
6. 人工审核后,发送给订阅者
## 邮件设计原则
- 移动端优先(60%读者用手机)
- 清晰的CTA(引导回复/分享)
- 加载速度快(图片压缩)
- 暗黑模式友好
## 输出
- HTML邮件:workspace/newsletter/email-YYYY-MM-DD.html
- 网页版:workspace/newsletter/web-YYYY-MM-DD.html
- 发送日志:workspace/newsletter/sent-log.json
步骤3:设置通信渠道
选择:Discord服务器(比Telegram更适合异步协作)
Newsletter Team Server
├── #inbox (选题池)
├── #scout-reports (Scout输出区)
├── #analysis (Analyst输出区)
├── #drafts (Writer输出区)
├── #publishing (Publisher工作区)
├── #published (归档)
└── #team-chat (讨论区)
为什么用Discord:
- 频道分类清晰
- 支持线程讨论
- 历史记录可搜索
- Webhook集成简单
配置示例:
# agents/scout/config.yaml
channels:
output: "scout-reports"
schedule:
- cron: "0 8 * * MON"
task: "weekly-scan"
# agents/analyst/config.yaml
channels:
input: "scout-reports"
output: "analysis"
schedule:
- cron: "0 14 * * MON"
task: "deep-analysis"
# agents/writer/config.yaml
channels:
input: "analysis"
output: "drafts"
schedule:
- cron: "0 10 * * TUE"
task: "write-newsletter"
# agents/publisher/config.yaml
channels:
input: "drafts"
output: "publishing"
schedule:
- cron: "0 16 * * TUE"
task: "publish-newsletter"
🔧 遇到错误? Discord Webhook怎么设置? 问AI:“如何创建和使用Discord Webhook?给我Python示例。”
步骤4:共享记忆设计
问题:四个Agent如何共享知识?
方案1:共享文件系统(推荐初期)
workspace/
├── agents/
│ ├── scout/
│ ├── analyst/
│ ├── writer/
│ └── publisher/
├── newsletter/
│ ├── scout-report-YYYY-MM-DD.md
│ ├── analysis-YYYY-MM-DD.md
│ ├── draft-YYYY-MM-DD.md
│ └── email-YYYY-MM-DD.html
└── shared/
├── style-guide.md (写作风格指南)
├── sources.yaml (信息源列表)
├── subscriber-list.json
└── performance-metrics.md
方案2:共享知识库(长期运营后)
随着Newsletter积累,可以构建知识库:
workspace/kb/
├── topics/
│ ├── ai.md (AI相关历史内容)
│ ├── web3.md
│ └── devtools.md
├── sources/
│ ├── high-quality.yaml (高质量信息源)
│ └── blacklist.yaml (低质量源黑名单)
└── insights/
├── reader-feedback.md (读者反馈总结)
└── trending-topics.md (长期趋势观察)
关键文件:style-guide.md
# Newsletter写作风格指南
## 目标读者
- 科技从业者(开发者、产品经理、创业者)
- 对AI/Web3/开源感兴趣
- 希望快速了解行业动态,不想错过重要信息
## 语气
- 朋友聊天:不是报告,是和朋友分享见闻
- 诚实态度:好的说好,烂的说烂
- 避免炒作:不跟风,有自己判断
## 结构
- 主文1篇(深度)+ 简讯3-5条(广度)
- 总字数控制在3000-5000字(阅读时间10-15分钟)
- 每段不超过3句话(移动端友好)
## 禁忌
- ❌ 不用"革命性"、"颠覆性"等夸张词
- ❌ 不抄袭,所有观点自己提炼
- ❌ 不带未公开的利益相关(如持股某公司)
所有Agent在写作时都会参考这份指南。
📚 深入学习 想了解团队协作中的知识管理?问AI: “什么是团队知识库(Team Wiki)?有哪些最佳实践?”
步骤5:首次运行与迭代
Week 1:手动触发测试
不要立即设置Cron,先手动测试每个环节:
# 1. Scout扫描
openclaw run scout weekly-scan
# 检查输出
cat workspace/newsletter/scout-report-2024-01-15.md
# 2. Analyst分析
openclaw run analyst deep-analysis
# 检查输出
cat workspace/newsletter/analysis-2024-01-15.md
# 3. Writer撰写
openclaw run writer write-newsletter
# 检查输出
cat workspace/newsletter/draft-2024-01-15.md
# 4. Publisher发布(先发给自己测试)
openclaw run publisher publish-newsletter --test
迭代1:调整筛选标准
Scout可能抓取了太多或太少内容,调整SOUL.md中的筛选标准。
迭代2:优化Analyst提示词
Analyst的分析可能太浅或太长,调整分析框架。
迭代3:统一Writer风格
Writer的语气可能不稳定,强化style-guide.md。
Week 2:半自动运行
Cron只触发前三个Agent,Publisher依然手动:
# cron.yaml
- schedule: "0 8 * * MON"
agent: scout
task: weekly-scan
- schedule: "0 14 * * MON"
agent: analyst
task: deep-analysis
- schedule: "0 10 * * TUE"
agent: writer
task: write-newsletter
# Publisher手动触发(人工审核后发送)
Week 4:全自动运行
经过几周迭代,质量稳定后,开启Publisher自动发布:
- schedule: "0 16 * * TUE"
agent: publisher
task: publish-newsletter
但保留一个安全开关:
# agents/publisher/publish.py
def publish_newsletter():
draft = load_draft()
# 质量检查
if len(draft) < 2000:
notify_human("草稿太短,暂停发布")
return
if "TODO" in draft or "[待补充]" in draft:
notify_human("草稿未完成,暂停发布")
return
# 发送测试邮件
send_test_email(draft)
# 等待人工确认(30分钟窗口)
if not wait_for_approval(timeout=1800):
notify_human("超时未确认,取消发布")
return
# 正式发送
send_to_subscribers(draft)
log_success()
💡 AI辅助提示 不知道如何实现“等待确认“逻辑?问AI: “Python如何实现异步等待用户确认?给我Telegram Bot示例。”
步骤6:监控与优化
关键指标:
# performance-metrics.md
## 生产效率
- Scout扫描时间:~5分钟 ✅
- Analyst分析时间:~15分钟 ✅
- Writer撰写时间:~20分钟 ✅
- Publisher发布时间:~5分钟 ✅
- **总计:45分钟(vs 人工4小时)**
## 内容质量
- 打开率:35%(行业平均25%)✅
- 点击率:8%(行业平均2-3%)✅
- 读者反馈:4.2/5星 ✅
## 成本
- API调用:~$2/周
- 服务器:$5/月
- **总计:~$13/月(vs 人工时薪$50×4小时=$200/周)**
## ROI
- 节省时间:93%
- 节省成本:94%
- 质量提升:读者满意度+20%
持续优化:
- 每月回顾:读取
reader-feedback.md,识别改进点 - A/B测试:标题、结构、发送时间
- 知识积累:将高质量信息源添加到
sources.yaml - 模型优化:Scout用Gemini Flash(便宜),Writer用Claude Sonnet(质量)
本章总结
关键要点
-
单Agent优先原则
- 能用单Agent就不要多Agent
- 复杂性是成本
- 10K token是分界线
-
多Agent的四个信号
- 上下文过载
- 专业化需求
- 并行执行
- 模型优化
-
三种核心模式
- 专业化:不同专业知识,深度协作
- Pipeline:线性工作流,顺序执行
- 并行:独立任务,同时执行
-
实战步骤
- 识别角色(用RACI矩阵)
- 定义人格(SOUL.md)
- 设置通信(Discord/Telegram)
- 共享记忆(文件系统/知识库)
- 迭代优化(从手动到自动)
决策框架速查
简单任务(<5分钟)→ 单Agent
├─ 上下文小(<10K) → 单Agent
└─ 上下文大(>10K) → 考虑多Agent
多Agent选择:
├─ 需要不同专业知识 → 专业化模式
├─ 任务有顺序依赖 → Pipeline模式
├─ 任务完全独立 → 并行模式
└─ 复杂系统 → 混合模式
下一章预告
现在你知道何时以及如何使用多Agent了。但多个Agent如何协调?
第5章《Agent协调模式》将深入:
- 中心化 vs 去中心化协调
- STATE文件模式详解
- 消息传递最佳实践
- 并发控制与冲突解决
💡 AI辅助提示 想复习本章内容?问AI: “总结一下单Agent和多Agent的区别,以及如何选择。” 然后对比AI的答案和本章内容,加深理解。
参考资料
本章引用的案例均来自 awesome-openclaw-usecases 社区仓库:
练习题:
-
场景判断:以下场景该用单Agent还是多Agent?
- 每日生成一份股票投资组合分析报告
- 构建一个AI客服系统(售前咨询+售后支持+投诉处理)
- 自动整理每周的照片到相册
- 运营一个科技博客(选题+写作+SEO+社交媒体推广)
-
架构设计:为“自动化招聘系统“设计Multi-Agent架构
- 需求:简历筛选 → 初步评估 → 安排面试 → 收集反馈
- 画出Agent角色和协作流程
- 说明为什么这样设计
-
成本优化:你有5个Agent,如何选择模型降低成本又不损失质量?
- Agent A:战略规划(需要深度推理)
- Agent B:数据抓取(简单逻辑)
- Agent C:文案创作(需要创意)
- Agent D:代码生成(需要技术准确性)
- Agent E:邮件分类(重复性任务)
提示:把你的答案写下来,然后问AI:“我的设计合理吗?有什么改进建议?“用AI作为学习伙伴。
-
案例来源:Multi-Agent Content Factory,awesome-openclaw-usecases 社区贡献 ↩