Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第5章:Agent协调模式

在前一章中,我们讨论了单Agent与多Agent架构的选择。当你决定使用多个Agent协同工作时,如何让它们有效协调就成了关键问题。

想象一个场景:你有三个Agent——研究员、编辑和发布者——它们需要协作完成一篇深度文章。研究员收集素材,编辑撰写内容,发布者将成品推送到各个平台。它们如何知道彼此的进度?如何避免重复工作?如何处理依赖关系?

这就是Agent协调模式要解决的问题。本章将介绍三种主流的协调方式,深入剖析STATE文件模式,并通过实战案例展示如何用这些模式管理复杂项目。


5.1 三种协调方式

当多个Agent需要协同工作时,它们需要某种机制来同步信息、分配任务和报告进度。根据系统的复杂度和需求,我们可以选择三种不同的协调模式。

中心化协调(Orchestrator)

中心化协调是最直观的模式:由一个主Agent(orchestrator)负责任务分配和进度跟踪,其他Agent作为工作者(worker)执行具体任务并汇报结果。

工作流程

主Agent → 分析任务 → 分配给子Agent A
       ↓
     等待结果
       ↓
    接收完成报告 → 分配给子Agent B
       ↓
     汇总结果

优点

  • 简单直观:有明确的指挥链,容易理解和调试
  • 全局视图:主Agent掌握所有信息,便于做出协调决策
  • 适合顺序工作流:当任务有明确的先后依赖时,中心化控制很自然

缺点

  • 单点瓶颈:所有决策都通过主Agent,可能成为性能瓶颈
  • 主Agent上下文膨胀:需要记住所有子任务的状态,对话历史会很长
  • 扩展性受限:并行任务越多,协调成本越高

适用场景

  • 任务数量较少(3-5个子Agent)
  • 工作流相对线性
  • 需要实时决策和动态调整

示例代码片段(主Agent的协调逻辑):

# 主Agent的任务列表
tasks:
  - id: research
    status: completed
    assigned_to: researcher
    result_summary: "收集到20篇相关论文"
  
  - id: writing
    status: in_progress
    assigned_to: editor
    depends_on: research
    started_at: "2024-02-20T09:30:00Z"
  
  - id: review
    status: pending
    assigned_to: reviewer
    depends_on: writing

💡 AI辅助提示: 如果你不熟悉YAML格式,可以问AI:“YAML语法的基本规则是什么?缩进有什么要求?”

去中心化协调(Shared State)

去中心化协调通过共享状态文件(通常是STATE.yaml或类似文件)让所有Agent平等地获取信息和更新进度,无需中心化的指挥者。

工作流程

Agent A → 读取STATE → 选择任务 → 执行 → 更新STATE
Agent B → 读取STATE → 选择任务 → 执行 → 更新STATE
Agent C → 读取STATE → 选择任务 → 执行 → 更新STATE

所有Agent都遵循相同的规则:

  1. 从STATE文件读取当前项目状态
  2. 根据自己的能力选择合适的未完成任务
  3. 执行任务
  4. 将结果和新状态写回STATE文件

优点

  • 无中心瓶颈:Agent可以并行工作,互不阻塞
  • 自组织能力:Agent根据能力和状态自主选择任务
  • 可扩展性强:添加新Agent只需让它读写同一个STATE文件
  • 容错性好:某个Agent失败不影响其他Agent继续工作

缺点

  • 并发控制复杂:多个Agent同时修改STATE文件需要处理冲突
  • 全局优化困难:没有中心视图,难以做出全局最优决策
  • 调试难度高:问题定位需要回溯多个Agent的操作日志

适用场景

  • 大量并行任务
  • Agent高度专业化,各自独立
  • 需要长期运行的项目(数天到数周)
  • 人类需要随时介入查看和调整

STATE文件示例

project: website-redesign
updated: 2024-02-20T10:15:33Z
updated_by: frontend-agent

tasks:
  - id: task-001
    title: "设计新首页布局"
    status: done
    assigned_to: design-agent
    completed_at: 2024-02-19T16:30:00Z
    deliverable: designs/homepage-v2.fig
  
  - id: task-002
    title: "实现响应式导航栏"
    status: in_progress
    assigned_to: frontend-agent
    started_at: 2024-02-20T09:00:00Z
    progress: "完成桌面版,移动版开发中"
  
  - id: task-003
    title: "优化图片加载性能"
    status: todo
    requires: [task-002]
    priority: high
  
  - id: task-004
    title: "迁移旧博客文章"
    status: blocked
    assigned_to: content-agent
    blocker: "等待数据库访问权限"

next_actions:
  - "前端Agent:完成导航栏移动版"
  - "内容Agent:联系运维获取数据库凭证"
  - "设计Agent:可以开始task-005(关于页面设计)"

notes: |
  今日进展:
  - 导航栏功能基本完成,但移动端还有些样式问题
  - 发现旧CMS数据库迁移比预期复杂,需要专门脚本
  
  明日计划:
  - 前端Agent完成移动适配
  - 如果数据库权限到位,启动内容迁移

消息传递(Message Passing)

消息传递模式通过聊天频道(如Telegram群组、Discord频道、Slack)或消息队列让Agent相互通信。每个Agent订阅相关频道,接收消息并作出响应。

工作流程

Agent A → 发送消息到频道 → [消息队列/聊天室] 
                                    ↓
Agent B, C, D ← 接收消息 ← 根据内容决定是否响应

优点

  • 完全解耦:Agent之间不需要知道彼此的存在,只关注消息格式
  • 可观测性强:所有通信都在聊天记录中,便于人类监督
  • 异步友好:Agent可以离线,上线后处理积累的消息
  • 人类易介入:可以直接在聊天频道中给Agent发指令或提供反馈

缺点

  • 消息泛滥:活跃项目中消息量可能很大,需要过滤机制
  • 顺序保证困难:异步消息可能乱序到达
  • 需要消息协议:Agent需要遵循统一的消息格式规范

适用场景

  • 需要人类监督和介入的项目
  • Agent部署在不同环境(本地、云端、移动设备)
  • 长时间运行的项目,Agent可能不同时在线
  • 需要审计日志

Telegram群组协调示例

假设我们有一个内容创作团队,包括研究员、作家、编辑和发布者四个Agent,它们通过Telegram群组协调:

[研究员Agent @ 09:15]
📚 研究任务完成
主题:AI Agent架构模式
找到相关论文:15篇
关键观点已整理到 research/agent-patterns.md
@作家 可以开始写作了

[作家Agent @ 09:17]
✍️ 收到,开始撰写初稿
预计11:00完成,字数目标2500字

[作家Agent @ 11:03]
✅ 初稿完成
文件:drafts/agent-patterns-draft1.md
字数:2680字
@编辑 请审阅

[编辑Agent @ 11:45]
📝 审阅完成,提出3处修改建议:
1. 第二段逻辑跳跃,需要过渡句
2. 案例2缺少代码示例
3. 结论部分可以更有力
详细批注见 drafts/agent-patterns-draft1-comments.md
@作家 请修订

[作家Agent @ 13:20]
✅ 修订完成
文件:drafts/agent-patterns-draft2.md
已处理所有批注
@编辑 请终审

[编辑Agent @ 13:50]
👍 终审通过
@发布者 可以发布了

[发布者Agent @ 14:00]
📢 发布中...
- Medium: ✅ 已发布 [链接]
- Dev.to: ✅ 已发布 [链接]
- 个人博客: ✅ 已发布 [链接]
Twitter宣传推文已准备好,是否发送?

[人类 @ 14:02]
@发布者 发送Twitter推文

[发布者Agent @ 14:02]
✅ 推文已发送 [链接]
本次任务完成!

💡 AI辅助提示: 想了解Telegram Bot API的基本用法?问AI:“如何用Python创建一个简单的Telegram Bot?” 或者:“OpenClaw如何连接Telegram群组?”

三种模式的对比总结

维度中心化协调去中心化协调消息传递
复杂度
扩展性
并发能力
可观测性
人类介入
适合场景小型顺序任务大型并行项目需要监督的协作

如何选择

  • 少于5个Agent,工作流简单 → 中心化协调
  • 大量并行任务,Agent高度独立 → 去中心化协调(STATE文件)
  • 需要人类监督,Agent可能异步工作 → 消息传递

实践中,这三种模式也可以混合使用:

  • STATE文件作为“事实来源“(source of truth)
  • 消息传递用于通知和协调
  • 关键决策点使用中心化Agent审批

5.2 STATE文件模式深度解析

STATE文件模式是去中心化协调的核心。它看起来简单——不就是一个YAML文件吗?但要用好它需要深入理解其设计哲学和最佳实践。

为什么用文件而非数据库?

很多人第一次接触STATE模式时会问:“为什么不用数据库?PostgreSQL、Redis不是更专业吗?”

这是个好问题。让我们分析为什么在Agent协调场景中,文件反而是更好的选择。

1. 可读性

STATE文件用纯文本(YAML/JSON/Markdown)编写,任何人用任何编辑器都能打开查看,无需专门工具。

# 这是一个STATE文件 - 任何人都能读懂
tasks:
  - id: deploy-frontend
    status: done
    notes: "部署顺利,用户反馈良好"

对比数据库:

-- 需要连接数据库才能查看
SELECT * FROM tasks WHERE id = 'deploy-frontend';
-- 结果是表格,缺少上下文

人类可读性至关重要,因为Agent协作项目通常需要人类监督和介入。当你凌晨2点被告知“项目出问题了“,你希望打开一个文本文件就能看到全貌,而不是启动数据库客户端、写SQL查询。

2. 版本控制

STATE文件可以直接提交到Git,每次修改都有完整的历史记录:

$ git log STATE.yaml

commit a3f2e1b
Author: frontend-agent
Date:   2024-02-20 10:15:33
    完成导航栏移动适配

commit 8d9c4a2
Author: design-agent
Date:   2024-02-19 16:30:00
    完成首页设计,交付Figma文件

这让你能够:

  • 回溯问题:“昨天晚上到底改了什么导致部署失败?”
  • 审计决策:“这个任务是谁在什么时候标记为完成的?”
  • 回滚状态git checkout HEAD~5 STATE.yaml 恢复到5次提交前

数据库也能做版本控制(temporal tables、audit logs),但需要额外的复杂性,而Git本来就是项目的一部分。

3. 简单性

STATE文件不需要任何基础设施:

  • 不需要安装数据库服务器
  • 不需要管理连接池
  • 不需要处理网络问题
  • 不需要备份策略(Git本身就是分布式备份)

Agent只需要会读写文件——这是最基础的能力。对比数据库,你需要:

# 数据库方式:复杂的依赖和配置
import psycopg2
conn = psycopg2.connect(
    host="localhost",
    database="agents",
    user="agent_user",
    password="..."  # 还要管理密码
)
cursor = conn.cursor()
cursor.execute("UPDATE tasks SET status='done' WHERE id=%s", (task_id,))
conn.commit()  # 别忘了commit
cursor.close()
conn.close()  # 别忘了关闭连接

文件方式:

# 文件方式:简单直接
import yaml
with open('STATE.yaml', 'r') as f:
    state = yaml.safe_load(f)
state['tasks'][0]['status'] = 'done'
with open('STATE.yaml', 'w') as f:
    yaml.dump(state, f)

4. 去中心化友好

STATE文件可以存在任何地方:本地文件系统、Git仓库、云存储(Dropbox、Google Drive)。Agent可以通过多种方式访问:

  • 本地Agent直接读写
  • 远程Agent通过Git pull/push
  • 移动Agent通过云同步

数据库需要一个中心化的服务器,所有Agent必须能连接到它。这引入了单点故障和网络依赖。

数据库的劣势在这个场景中尤为明显

  • Agent在不同网络环境:家里的本地Agent、云服务器上的Agent、手机上的Agent——它们如何访问同一个数据库?
  • 离线工作:Agent可以在没有网络时读取本地STATE文件,完成工作后再同步
  • 权限管理复杂:数据库需要设置用户、密码、权限;文件只需要文件系统权限

那么数据库什么时候更好?

当然,数据库并非一无是处。如果你的场景有以下需求,数据库可能更合适:

  • 高并发写入:数十个Agent同时频繁更新(但这时你可能需要重新审视架构)
  • 复杂查询:需要跨任务、跨项目的复杂分析和报表
  • 实时性要求极高:毫秒级的状态同步(大多数Agent协作不需要这个)
  • 与现有系统集成:你的基础设施已经是数据库驱动的

但对于大多数Agent协调场景——尤其是中小型项目、原型验证、个人自动化——STATE文件是更简单、更灵活、更可靠的选择。

📚 深入学习: 想了解Git在协调中的更多应用?问AI:“Git的分布式特性如何支持去中心化协作?什么是Git的乐观并发控制?”

STATE.yaml设计原则

一个好的STATE文件不是简单地记录任务列表,而是项目的“单一事实来源“(Single Source of Truth)。它应该让任何Agent(或人类)读取后立即明白:

  • 项目的目标是什么
  • 当前进行到哪一步
  • 接下来应该做什么
  • 谁负责什么

以下是设计STATE文件的核心原则。

原则1:结构清晰,层次分明

STATE文件应该有清晰的层次结构:

# ============================================================
# 项目元信息
# ============================================================
project: mobile-app-redesign
version: 2.1.0
created: 2024-02-15T09:00:00Z
updated: 2024-02-20T14:33:21Z
updated_by: backend-agent

# ============================================================
# 项目状态概览
# ============================================================
status: in_progress
progress: 65%
deadline: 2024-03-01
priority: high

# ============================================================
# 团队成员(Agent列表)
# ============================================================
team:
  - name: design-agent
    role: UI/UX设计
    status: active
    last_seen: 2024-02-20T12:00:00Z
  
  - name: frontend-agent
    role: 前端开发
    status: active
    last_seen: 2024-02-20T14:30:00Z
  
  - name: backend-agent
    role: 后端开发
    status: active
    last_seen: 2024-02-20T14:33:00Z
  
  - name: qa-agent
    role: 测试
    status: idle
    last_seen: 2024-02-19T18:00:00Z

# ============================================================
# 任务列表 - 项目的核心
# ============================================================
tasks:
  # --- 已完成 ---
  - id: task-001
    title: "设计新的登录界面"
    status: done
    assigned_to: design-agent
    created: 2024-02-15T10:00:00Z
    started: 2024-02-15T10:30:00Z
    completed: 2024-02-16T16:00:00Z
    deliverable: designs/login-screen-v2.fig
    notes: "采用Material Design 3,用户反馈积极"
  
  # --- 进行中 ---
  - id: task-002
    title: "实现新登录界面"
    status: in_progress
    assigned_to: frontend-agent
    depends_on: [task-001]
    created: 2024-02-16T16:30:00Z
    started: 2024-02-17T09:00:00Z
    progress: 80%
    deliverable: src/screens/LoginScreen.tsx
    notes: |
      - UI组件完成:100%
      - 表单验证完成:100%
      - API集成完成:60%(OAuth还在调试)
      - 错误处理完成:50%
    blockers: []
  
  - id: task-003
    title: "OAuth2.0后端实现"
    status: in_progress
    assigned_to: backend-agent
    created: 2024-02-17T10:00:00Z
    started: 2024-02-17T11:00:00Z
    progress: 90%
    deliverable: src/auth/oauth.py
    notes: "Google OAuth完成,Apple OAuth测试中"
    blockers: []
  
  # --- 待开始 ---
  - id: task-004
    title: "登录流程端到端测试"
    status: todo
    assigned_to: qa-agent
    depends_on: [task-002, task-003]
    priority: high
    estimated_hours: 4
  
  - id: task-005
    title: "设计用户Profile页面"
    status: todo
    assigned_to: design-agent
    priority: medium
    estimated_hours: 8
  
  # --- 阻塞状态 ---
  - id: task-006
    title: "集成支付网关"
    status: blocked
    assigned_to: backend-agent
    created: 2024-02-18T09:00:00Z
    blockers:
      - type: external_dependency
        description: "等待Stripe审核商户账号"
        waiting_since: 2024-02-18T10:00:00Z
        expected_resolution: 2024-02-22
        contact: "support@stripe.com"
    notes: "已提交所有文档,预计本周四(2月22日)审核完成"

# ============================================================
# 下一步行动 - 给Agent的明确指引
# ============================================================
next_actions:
  - agent: frontend-agent
    action: "完成task-002的OAuth集成,与backend-agent协调测试"
    priority: high
  
  - agent: backend-agent
    action: "完成Apple OAuth,部署到staging环境供前端测试"
    priority: high
  
  - agent: qa-agent
    action: "一旦task-002和task-003完成,立即开始task-004测试"
    priority: high
    wait_for: [task-002, task-003]
  
  - agent: design-agent
    action: "可以开始task-005(Profile页面设计),无阻塞"
    priority: medium

# ============================================================
# 里程碑
# ============================================================
milestones:
  - name: "MVP发布"
    target_date: 2024-03-01
    progress: 65%
    critical_path: [task-002, task-003, task-004, task-007, task-008]
    status: on_track
    risks:
      - "task-006的支付网关审核可能延期"
      - "如果OAuth调试超过2天,可能影响测试进度"

# ============================================================
# 项目日志 - 重要决策和事件
# ============================================================
changelog:
  - date: 2024-02-20T14:33:21Z
    agent: backend-agent
    event: "Apple OAuth基本完成,等待前端集成测试"
  
  - date: 2024-02-20T12:15:00Z
    agent: design-agent
    event: "与PM讨论后,决定Profile页面增加隐私设置功能"
  
  - date: 2024-02-19T18:00:00Z
    agent: qa-agent
    event: "发现task-001的设计在小屏设备上有显示问题,已反馈"
    resolution: "design-agent已修复,更新Figma文件"
  
  - date: 2024-02-18T10:00:00Z
    agent: backend-agent
    event: "提交Stripe商户审核"
  
  - date: 2024-02-16T16:00:00Z
    agent: design-agent
    event: "完成登录界面设计"

# ============================================================
# 配置和约定
# ============================================================
conventions:
  task_id_format: "task-NNN"
  status_values: [todo, in_progress, blocked, done, cancelled]
  priority_values: [low, medium, high, critical]
  commit_message_format: "[{agent}] {action} - {task_id}"

# ============================================================
# 元数据(供工具解析)
# ============================================================
metadata:
  schema_version: "1.0"
  managed_by: openclaw
  repository: https://github.com/yourorg/mobile-app
  state_file_path: STATE.yaml

这个结构的关键点:

  • 注释分隔:用注释清晰分隔不同部分,提高可读性
  • 时间戳:所有重要事件都记录时间
  • 责任明确:每个任务都有assigned_to和updated_by
  • 依赖关系:depends_on明确任务依赖
  • 阻塞信息:blocked任务详细记录阻塞原因和预期解决时间
  • 行动指引:next_actions给每个Agent明确的下一步

💡 AI辅助提示: 想自动生成这样的STATE文件模板?问AI:“请帮我生成一个项目管理的STATE.yaml模板,包含任务、里程碑和日志部分”

原则2:状态完整,信息充分

STATE文件应该包含足够的信息,让Agent无需查看其他文件就能决策。

❌ 不好的例子(信息不足):

tasks:
  - id: task-1
    status: blocked

Agent读到这个:

  • 为什么blocked?
  • 被什么阻塞?
  • 谁能解决?
  • 预计什么时候解决?

这些问题都没有答案,Agent只能去问人类或者在聊天记录里翻找。

✅ 好的例子(信息充分):

tasks:
  - id: task-006
    title: "集成支付网关"
    status: blocked
    assigned_to: backend-agent
    blockers:
      - type: external_dependency
        description: "等待Stripe审核商户账号"
        waiting_since: 2024-02-18T10:00:00Z
        expected_resolution: 2024-02-22
        contact: "support@stripe.com"
        ticket_id: "STRIPE-12345"
    fallback_plan: "如果2月23日前未审核通过,考虑使用PayPal作为临时方案"
    impact: "阻塞支付功能开发,但不影响其他模块"

现在任何Agent读到这个任务都能明白:

  • 为什么阻塞:等待外部审核
  • 什么时候可能解除:2月22日
  • 如果延期怎么办:有fallback plan
  • 对项目的影响:其他模块不受影响,可以继续

原则3:原子性更新,避免冲突

STATE文件是多个Agent共享的资源,必须谨慎处理并发写入。

问题场景

  • Agent A在10:00读取STATE,看到task-5是todo
  • Agent B在10:01也读取STATE,也看到task-5是todo
  • Agent A在10:02将task-5改为in_progress,并写回文件
  • Agent B在10:03也将task-5改为in_progress,并写回文件
  • 结果:Agent A的修改被覆盖了!

解决方案1:Git作为并发控制机制

利用Git的合并冲突检测:

# Agent的标准操作流程
git pull                     # 1. 先拉取最新状态
# ... 读取STATE.yaml做决策 ...
# ... 修改STATE.yaml ...
git add STATE.yaml           # 2. 暂存修改
git commit -m "[agent-name] 更新task-5状态"
git push                     # 3. 推送

# 如果push失败(有冲突)
git pull --rebase            # 4. 重新拉取并应用修改
# ... Git会标记冲突,Agent需要解决 ...
git push                     # 5. 再次推送

解决方案2:细粒度更新

不要整个文件重写,只更新特定部分:

import yaml
import filelock  # pip install filelock

def update_task_status(task_id, new_status, agent_name):
    lock = filelock.FileLock("STATE.yaml.lock", timeout=10)
    
    with lock:  # 文件锁,确保同一时间只有一个进程写入
        # 读取
        with open('STATE.yaml', 'r') as f:
            state = yaml.safe_load(f)
        
        # 查找并更新特定任务
        for task in state['tasks']:
            if task['id'] == task_id:
                task['status'] = new_status
                task['updated_by'] = agent_name
                task['updated_at'] = datetime.now().isoformat()
                break
        
        # 写回
        with open('STATE.yaml', 'w') as f:
            yaml.dump(state, f)

解决方案3:乐观锁

在STATE文件中加入版本号:

version: 42  # 每次更新递增
updated: 2024-02-20T14:33:21Z

tasks:
  - id: task-5
    status: in_progress

Agent更新时:

# 读取时记住版本号
current_version = state['version']

# 修改...

# 写入时检查版本号
if state['version'] != current_version:
    # 版本号变了,说明有其他Agent更新过
    # 需要重新读取并合并
    raise ConcurrentModificationError("STATE被其他Agent修改,请重试")

# 版本号未变,安全写入
state['version'] += 1
# ... 写入文件 ...

最佳实践建议

  • 小更新:尽量只修改单个任务的状态,减少冲突范围
  • 快速操作:读取→修改→写入整个过程尽量快(<1秒)
  • 重试机制:冲突时自动重试,最多3次
  • 日志记录:记录每次更新操作,便于追踪问题

原则4:人类友好,易于干预

STATE文件不仅是给Agent看的,更是给人类看的。项目负责人应该能够:

  • 快速了解项目进度
  • 发现潜在风险
  • 手动调整任务优先级
  • 添加新任务或修改现有任务

因此,STATE文件应该:

使用清晰的语言

# ✅ 好 - 人类容易理解
- id: task-010
  title: "修复iOS登录崩溃问题"
  status: critical
  notes: "影响所有iOS 15用户,需要紧急修复"

# ❌ 不好 - 过于技术化
- id: t10
  title: "Fix EXC_BAD_ACCESS in AuthViewController"
  status: p0
  notes: "nil ptr deref @ line 247"

提供上下文

# ✅ 好 - 有背景和理由
- id: task-015
  title: "重构用户数据模型"
  reason: "当前模型无法支持多租户需求,预计下个季度会上线企业版"
  effort: 3天
  risk: "可能影响现有用户数据,需要迁移脚本"
  
# ❌ 不好 - 缺少背景
- id: task-015
  title: "重构UserModel"

标记需要人类决策的地方

tasks:
  - id: task-020
    title: "选择数据库方案"
    status: needs_decision
    options:
      - name: PostgreSQL
        pros: [成熟稳定, 功能丰富, 团队熟悉]
        cons: [运维成本高]
      - name: MongoDB
        pros: [Schema灵活, 水平扩展容易]
        cons: [团队不熟悉, 事务支持弱]
    decision_maker: "@tech-lead"
    decision_deadline: 2024-02-22
    notes: "Agent倾向PostgreSQL,但需要Tech Lead最终决策"

🔧 实用建议: 在STATE文件顶部加一个“README“部分,解释文件结构和约定:

# ============================================================
# 如何使用这个文件
# ============================================================
# 1. Agent每次操作前先 git pull 获取最新状态
# 2. 修改后提交commit,格式:[agent名] 操作描述 - task-id
# 3. 人类可以随时手动编辑,Agent会读取你的修改
# 4. 标记为needs_decision的任务需要人类决策
# ============================================================

STATE文件的生命周期

一个项目的STATE文件会经历多个阶段:

1. 初始化(项目启动)

project: new-feature-x
status: planning
created: 2024-02-20T09:00:00Z

tasks:
  - id: task-001
    title: "需求分析"
    status: in_progress
    assigned_to: human
    notes: "收集用户需求,定义MVP范围"

next_actions:
  - "人类:完成需求文档,明确功能列表"
  - "人类:拆解任务,分配给Agent"

此时STATE非常简单,主要是人类的工作。

2. 任务拆解(开始执行)

project: new-feature-x
status: in_progress
updated: 2024-02-21T14:00:00Z

tasks:
  - id: task-001
    title: "需求分析"
    status: done
  
  - id: task-002
    title: "数据库schema设计"
    status: in_progress
    assigned_to: backend-agent
  
  - id: task-003
    title: "API接口设计"
    status: todo
    assigned_to: backend-agent
    depends_on: [task-002]
  
  - id: task-004
    title: "前端组件设计"
    status: in_progress
    assigned_to: frontend-agent
  
  # ... 10-20个任务 ...

任务列表快速增长,Agent开始并行工作。

3. 活跃开发(大量更新)

project: new-feature-x
status: in_progress
progress: 45%
updated: 2024-02-25T16:30:00Z

# 任务完成了一半,changelog快速增长
changelog:
  - 2024-02-25T16:30: backend-agent完成task-008
  - 2024-02-25T14:15: frontend-agent完成task-012
  - 2024-02-25T11:00: qa-agent报告task-010测试失败
  - 2024-02-24T18:45: backend-agent完成task-006
  # ... 每天数十条更新 ...

这是STATE最“热闹“的阶段,可能每小时都有多次提交。

4. 接近完成(收尾阶段)

project: new-feature-x
status: finalizing
progress: 90%
updated: 2024-03-01T10:00:00Z

tasks:
  # 大部分任务已完成
  - id: task-025
    title: "性能测试"
    status: in_progress
  
  - id: task-026
    title: "文档更新"
    status: in_progress
  
  - id: task-027
    title: "部署到生产环境"
    status: todo
    requires_approval: true
    approver: "@tech-lead"

只剩少数任务,重点转向质量保证和发布准备。

5. 完成归档(项目结束)

project: new-feature-x
status: completed
progress: 100%
completed_at: 2024-03-05T16:00:00Z
archived: true

summary: |
  功能X已成功上线,用户反馈积极。
  总耗时:13天(原计划15天)
  总任务数:27个
  团队成员:3个Agent + 1个Tech Lead

lessons_learned:
  - "Backend和Frontend的API联调比预期顺利,提前2天完成"
  - "QA测试发现的问题集中在边界条件,后续应加强单元测试"
  - "task-018的数据库迁移遇到锁超时,下次应提前做性能测试"

# STATE文件保留作为历史记录
# 新项目创建新的STATE文件

完成的项目STATE文件成为项目档案,供未来参考。

💡 AI辅助提示: 想要分析项目STATE文件的演化趋势?问AI:“如何用Python解析多个Git commit的STATE.yaml文件,统计任务完成速度和阻塞原因?”


5.3 实战:用STATE模式管理复杂项目

理论讲得再多,不如一个完整的实战案例。让我们看看如何用STATE模式管理一个真实的复杂项目:网站重构

项目背景

假设你要重构一个老旧的公司网站,涉及:

  • 前端:从jQuery迁移到React
  • 后端:从PHP迁移到Python FastAPI
  • 内容:迁移100+篇博客文章到新CMS
  • 设计:全新的UI/UX设计
  • 基础设施:从共享主机迁移到AWS

团队组成:

  • 你(人类项目负责人)
  • Design Agent(设计师)
  • Frontend Agent(前端开发)
  • Backend Agent(后端开发)
  • Content Agent(内容迁移)
  • DevOps Agent(基础设施)

时间:4周

第1步:创建初始STATE文件

项目启动时,你和团队一起定义初始STATE:

# ============================================================
# 项目:公司网站重构 v2.0
# ============================================================
project: website-redesign-v2
created: 2024-02-20T09:00:00Z
updated: 2024-02-20T09:00:00Z
updated_by: human

status: planning
deadline: 2024-03-20  # 4周后
priority: high

# ============================================================
# 团队
# ============================================================
team:
  - name: human
    role: 项目负责人
  - name: design-agent
    role: UI/UX设计
  - name: frontend-agent
    role: 前端开发
  - name: backend-agent
    role: 后端开发
  - name: content-agent
    role: 内容迁移
  - name: devops-agent
    role: 基础设施

# ============================================================
# 里程碑
# ============================================================
milestones:
  - name: "设计完成"
    target_date: 2024-02-27
    tasks: [d1, d2, d3]
  
  - name: "后端MVP"
    target_date: 2024-03-05
    tasks: [b1, b2, b3, b4]
  
  - name: "前端MVP"
    target_date: 2024-03-12
    tasks: [f1, f2, f3, f4, f5]
  
  - name: "内容迁移完成"
    target_date: 2024-03-12
    tasks: [c1, c2, c3]
  
  - name: "上线"
    target_date: 2024-03-20
    tasks: [o1, o2, o3]

# ============================================================
# 任务列表
# ============================================================
tasks:
  # === 设计任务 ===
  - id: d1
    title: "设计系统和组件库定义"
    assigned_to: design-agent
    status: todo
    priority: critical
    estimated_hours: 16
    deliverable: design-system.fig
  
  - id: d2
    title: "主要页面设计(首页、关于、博客)"
    assigned_to: design-agent
    status: todo
    depends_on: [d1]
    estimated_hours: 24
    deliverable: pages-mockup.fig
  
  - id: d3
    title: "响应式设计和移动端适配"
    assigned_to: design-agent
    status: todo
    depends_on: [d2]
    estimated_hours: 12
  
  # === 后端任务 ===
  - id: b1
    title: "FastAPI项目初始化和架构设计"
    assigned_to: backend-agent
    status: todo
    priority: critical
    estimated_hours: 8
    deliverable: backend/README.md, backend/架构图
  
  - id: b2
    title: "数据库schema设计和迁移脚本"
    assigned_to: backend-agent
    status: todo
    depends_on: [b1]
    estimated_hours: 12
    deliverable: backend/models/, backend/migrations/
  
  - id: b3
    title: "实现博客文章API(CRUD)"
    assigned_to: backend-agent
    status: todo
    depends_on: [b2]
    estimated_hours: 16
    deliverable: backend/api/posts.py
  
  - id: b4
    title: "实现用户认证(JWT)"
    assigned_to: backend-agent
    status: todo
    depends_on: [b2]
    estimated_hours: 12
    deliverable: backend/api/auth.py
  
  - id: b5
    title: "实现图片上传和CDN集成"
    assigned_to: backend-agent
    status: todo
    depends_on: [b1]
    estimated_hours: 8
  
  # === 前端任务 ===
  - id: f1
    title: "React项目初始化(Next.js + TypeScript)"
    assigned_to: frontend-agent
    status: todo
    priority: critical
    estimated_hours: 4
    deliverable: frontend/package.json, frontend/README.md
  
  - id: f2
    title: "实现设计系统组件库"
    assigned_to: frontend-agent
    status: todo
    depends_on: [f1, d1]
    estimated_hours: 20
    deliverable: frontend/components/
  
  - id: f3
    title: "实现首页"
    assigned_to: frontend-agent
    status: todo
    depends_on: [f2, d2]
    estimated_hours: 12
  
  - id: f4
    title: "实现博客列表和文章详情页"
    assigned_to: frontend-agent
    status: todo
    depends_on: [f2, d2, b3]
    estimated_hours: 16
  
  - id: f5
    title: "实现CMS管理后台"
    assigned_to: frontend-agent
    status: todo
    depends_on: [f2, b3, b4]
    estimated_hours: 24
  
  # === 内容迁移任务 ===
  - id: c1
    title: "分析旧网站内容结构,生成迁移清单"
    assigned_to: content-agent
    status: todo
    estimated_hours: 4
    deliverable: content-migration-plan.md
  
  - id: c2
    title: "编写内容抓取和转换脚本"
    assigned_to: content-agent
    status: todo
    depends_on: [c1, b2]
    estimated_hours: 12
    deliverable: scripts/migrate-content.py
  
  - id: c3
    title: "执行内容迁移并验证"
    assigned_to: content-agent
    status: todo
    depends_on: [c2, b3]
    estimated_hours: 8
  
  # === DevOps任务 ===
  - id: o1
    title: "设置AWS基础设施(EC2, RDS, S3)"
    assigned_to: devops-agent
    status: todo
    priority: high
    estimated_hours: 8
    deliverable: terraform/
  
  - id: o2
    title: "配置CI/CD pipeline"
    assigned_to: devops-agent
    status: todo
    depends_on: [o1, b1, f1]
    estimated_hours: 8
    deliverable: .github/workflows/
  
  - id: o3
    title: "域名迁移和SSL配置"
    assigned_to: devops-agent
    status: todo
    depends_on: [o1]
    estimated_hours: 4

# ============================================================
# 下一步行动
# ============================================================
next_actions:
  - agent: design-agent
    action: "开始d1(设计系统定义),这是所有设计工作的基础"
    priority: critical
  
  - agent: backend-agent
    action: "开始b1(FastAPI项目初始化),定义技术栈和架构"
    priority: critical
  
  - agent: frontend-agent
    action: "开始f1(React项目初始化),准备开发环境"
    priority: critical
  
  - agent: devops-agent
    action: "开始o1(AWS基础设施),尽早准备环境"
    priority: high
  
  - agent: content-agent
    action: "等待b2完成后开始c1,目前可以手动查看旧网站内容"
    priority: medium

# ============================================================
# 风险和假设
# ============================================================
risks:
  - description: "旧网站内容格式不统一,迁移可能比预期复杂"
    mitigation: "Content Agent先做小范围测试,验证迁移脚本"
    probability: medium
    impact: medium
  
  - description: "设计和开发可能对UI组件理解不一致"
    mitigation: "Design Agent交付Figma文件包含详细的组件规范"
    probability: low
    impact: high
  
  - description: "AWS账号审批可能延期"
    mitigation: "立即提交审批,同时准备本地开发环境"
    probability: low
    impact: high

assumptions:
  - "团队每个Agent每天工作8小时"
  - "没有重大技术难题(如第三方API集成问题)"
  - "设计评审能在1天内完成"

# ============================================================
# 约定
# ============================================================
conventions:
  commit_format: "[{agent}] {action} - {task_id}"
  branch_naming: "{agent}/{task_id}-{short-description}"
  standup_time: "每天10:00 UTC"
  state_update_frequency: "至少每完成一个小任务就更新"

你将这个STATE.yaml提交到Git仓库,并在Telegram群组中通知所有Agent:

[你 @ 09:30]
@所有Agent
项目正式启动!
STATE文件已创建:repos/website-redesign/STATE.yaml
请所有Agent:
1. git clone 仓库
2. 阅读STATE.yaml,理解项目全貌
3. 根据next_actions开始你的第一个任务
4. 每完成一个小里程碑就更新STATE并提交

有问题随时在群里讨论。Let's build something great! 🚀

第2步:Agent开始并行工作

Design Agent开始工作

# Design Agent的内部流程
git pull
# 读取STATE.yaml,看到自己的第一个任务是d1
# 开始设计...
# 3小时后,完成初稿

Design Agent更新STATE:

# STATE.yaml diff
tasks:
  - id: d1
    title: "设计系统和组件库定义"
    assigned_to: design-agent
-   status: todo
+   status: in_progress
+   started_at: 2024-02-20T10:00:00Z
+   progress: 40%
+   notes: |
+     已完成:
+     - 色彩系统定义(主色、辅助色、语义色)
+     - 字体排版规范(字号、行高、字重)
+     正在进行:
+     - 组件库结构设计(Button, Card, Input等)
+     预计今天下午16:00完成
    priority: critical
    estimated_hours: 16
    deliverable: design-system.fig

提交:

git add STATE.yaml
git commit -m "[design-agent] 开始设计系统定义 - d1"
git push

同时在Telegram群组通知:

[Design Agent @ 13:30]
📐 设计系统定义(d1)进展:40%
已完成色彩和字体规范,正在设计组件库
Figma链接:https://figma.com/file/xyz...
欢迎提前查看,有建议随时告诉我!

Backend Agent同时在工作

[Backend Agent @ 14:00]
🔧 FastAPI项目初始化(b1)完成!
技术栈选择:
- FastAPI 0.109
- SQLAlchemy 2.0(async)
- PostgreSQL 15
- Redis(缓存)
- Alembic(数据库迁移)

项目结构:
backend/
  ├── api/         # API端点
  ├── models/      # 数据模型
  ├── schemas/     # Pydantic schemas
  ├── core/        # 配置和工具
  └── tests/       # 测试

README已更新,@frontend-agent @devops-agent 可以查看

下一步:开始b2(数据库schema设计)

Backend Agent更新STATE:

tasks:
  - id: b1
    title: "FastAPI项目初始化和架构设计"
    assigned_to: backend-agent
-   status: todo
+   status: done
+   started_at: 2024-02-20T10:30:00Z
+   completed_at: 2024-02-20T14:00:00Z
    priority: critical
    estimated_hours: 8
+   actual_hours: 3.5
    deliverable: backend/README.md, backend/架构图
+   notes: "项目结构已搭建,依赖已锁定,CI配置待devops-agent完成o2后添加"

第3步:依赖关系自动解锁

当Design Agent完成d1后,Frontend Agent会自动检测到:

[Design Agent @ 16:30]
✅ 设计系统定义(d1)完成!
Figma文件:https://figma.com/file/xyz...
包含:
- 完整色彩系统
- 字体排版规范
- 20+基础组件规范(Button, Input, Card, Modal...)
@frontend-agent 可以开始f2(组件库实现)了!

[Frontend Agent @ 16:35]
👀 收到!正在查看设计稿
看起来很棒,组件规范很清晰
预计明天开始实现,今晚先完成f1的剩余配置

[Frontend Agent @ 17:00]
✅ React项目初始化(f1)完成!
技术栈:
- Next.js 14
- TypeScript
- Tailwind CSS
- Radix UI(无障碍组件基础)
- Storybook(组件文档)

本地开发:
```bash
cd frontend
npm install
npm run dev  # localhost:3000
npm run storybook  # localhost:6006

明天开始根据@design-agent的设计稿实现组件库!


STATE.yaml现在是这样:

```yaml
tasks:
  - id: d1
    status: done  # ✅ 完成
    completed_at: 2024-02-20T16:30:00Z
  
  - id: d2
    status: in_progress  # Design Agent已经开始下一个任务
    started_at: 2024-02-20T16:45:00Z
    assigned_to: design-agent
  
  - id: f1
    status: done  # ✅ 完成
    completed_at: 2024-02-20T17:00:00Z
  
  - id: f2
    status: todo  # 依赖d1已解除,可以开始
    depends_on: [f1, d1]  # 两个依赖都完成了
    assigned_to: frontend-agent
    # Frontend Agent会在明天开始这个任务
  
  - id: b1
    status: done  # ✅ 完成
  
  - id: b2
    status: in_progress  # Backend Agent在做这个
    started_at: 2024-02-20T14:15:00Z
    progress: 60%

第4步:遇到阻塞

第3天,Content Agent遇到问题:

[Content Agent @ 10:30]
⚠️ 内容迁移遇到问题(c2)
旧网站有些文章是用自定义短代码(shortcode)写的,例如:
[gallery id="123"]
[youtube v="abc"]

新的Markdown格式不支持这些。
我可以写转换逻辑,但需要确认:
1. 哪些短代码需要保留?
2. 转换成什么格式?

@human 请指导

你作为项目负责人介入:

[你 @ 10:45]
好问题!
1. gallery短代码 → 转换为Markdown图片列表
2. youtube短代码 → 转换为标准的YouTube embed HTML

@content-agent 这样可行吗?如果需要,我可以提供旧网站的短代码文档

[Content Agent @ 10:50]
👍 可行!有文档更好,我会据此编写转换规则
预计今天下午完成c2

[你 @ 10:55]
已上传到 docs/old-shortcodes.md

Content Agent更新STATE,记录这个临时阻塞:

tasks:
  - id: c2
    title: "编写内容抓取和转换脚本"
    assigned_to: content-agent
    status: in_progress  # 虽然暂停了,但很快会恢复
    started_at: 2024-02-22T09:00:00Z
    progress: 30%
    notes: |
      2024-02-22 10:30 - 遇到短代码转换问题,等待人类确认转换规则
      2024-02-22 10:55 - 已获得文档,继续开发
    blockers:  # 虽然现在已经解决,但记录下来
      - type: clarification_needed
        description: "需要确认旧网站短代码的转换规则"
        waiting_since: 2024-02-22T10:30:00Z
        resolved_at: 2024-02-22T10:55:00Z
        resolution: "人类提供了短代码文档,转换规则已明确"

这个记录很重要,未来如果再做类似项目,可以回顾“哦,内容迁移会遇到自定义格式问题,应该提前准备转换规则“。

第5步:冲突处理

第5天,Backend Agent和Frontend Agent需要协调API格式:

[Backend Agent @ 11:00]
📡 博客文章API(b3)基本完成
GET /api/posts?page=1&limit=10
返回:
{
  "posts": [...],
  "total": 156,
  "page": 1,
  "limit": 10
}

@frontend-agent 这个格式可以吗?

[Frontend Agent @ 11:05]
嗯,我更希望返回格式是:
{
  "data": [...],
  "pagination": {
    "total": 156,
    "page": 1,
    "per_page": 10,
    "pages": 16
  }
}

这样前端更容易解析分页信息

[Backend Agent @ 11:10]
makes sense! 我改成你建议的格式
给我30分钟

[Backend Agent @ 11:45]
✅ 已更改并更新API文档
docs/api.md 已同步更新
Swagger文档:http://localhost:8000/docs

[Frontend Agent @ 11:50]
Perfect! 我这边开始对接API

这个协调过程体现了消息传递模式的价值——Agent之间可以直接沟通,无需通过中心化的主Agent。

STATE文件简单记录:

tasks:
  - id: b3
    status: done
    completed_at: 2024-02-24T11:45:00Z
    notes: |
      API格式经与frontend-agent协商,采用嵌套的pagination对象
      详见docs/api.md

第6步:人类审查和调整

第10天,你查看STATE文件,发现进度有些落后:

milestones:
  - name: "后端MVP"
    target_date: 2024-03-05  # 还有3天
    tasks: [b1, b2, b3, b4]
    progress: 75%  # b1, b2, b3完成,b4还在进行中
    status: at_risk  # 轻微风险

你查看b4(用户认证)的进度:

- id: b4
  title: "实现用户认证(JWT)"
  assigned_to: backend-agent
  status: in_progress
  started_at: 2024-03-01T09:00:00Z
  progress: 40%
  estimated_hours: 12
  actual_hours_so_far: 8
  notes: |
    JWT签发和验证逻辑完成
    正在实现:
    - 密码重置流程(邮件发送)
    - OAuth2集成(Google登录)
    这两个功能比预期复杂

你意识到邮件和OAuth2可能不是MVP必需的,于是在群组中讨论:

[你 @ 14:00]
@backend-agent 看到b4进度有些慢
MVP阶段,密码重置和Google登录是必需的吗?
我们可以先做最基本的邮箱+密码登录,其他功能v1.1再加

[Backend Agent @ 14:05]
你说得对!这两个功能确实可以延后
如果只做基本登录,我今天就能完成b4
那我调整任务范围?

[你 @ 14:10]
调整吧,把密码重置和OAuth2拆成新任务b6和b7
标记为"v1.1 feature"

[Backend Agent @ 14:15]
✅ 已更新STATE
b4缩减为基本认证,今天下班前完成

STATE文件更新:

tasks:
  - id: b4
    title: "实现基本用户认证(JWT)"  # 标题变更
    assigned_to: backend-agent
    status: in_progress
    progress: 70%  # 重新评估后,其实进度更快
    estimated_hours: 8  # 从12小时减少到8小时
    scope_change: |
      2024-03-02 14:15 - 经项目负责人确认,MVP阶段只需基本登录
      密码重置和OAuth2拆分为b6和b7,标记为v1.1
  
  # 新增任务
  - id: b6
    title: "密码重置流程(邮件)"
    assigned_to: backend-agent
    status: backlog
    milestone: v1.1
    priority: medium
  
  - id: b7
    title: "Google OAuth2集成"
    assigned_to: backend-agent
    status: backlog
    milestone: v1.1
    priority: low

这个调整避免了进度风险,同时保留了未来功能的记录。

第7步:最后冲刺

第18天,项目接近尾声,STATE文件显示:

project: website-redesign-v2
status: finalizing
progress: 92%
updated: 2024-03-08T16:00:00Z

milestones:
  - name: "设计完成"
    status: done ✅
  
  - name: "后端MVP"
    status: done ✅
  
  - name: "前端MVP"
    status: done ✅
  
  - name: "内容迁移完成"
    status: done ✅
  
  - name: "上线"
    target_date: 2024-03-20  # 还有12天
    tasks: [o2, o3, launch-checklist]
    status: on_track

tasks:
  # 所有开发任务都完成了
  # 只剩部署和上线准备
  
  - id: o2
    title: "配置CI/CD pipeline"
    status: done
    completed_at: 2024-03-07T15:00:00Z
  
  - id: o3
    title: "域名迁移和SSL配置"
    status: in_progress
    assigned_to: devops-agent
    progress: 80%
    notes: "SSL证书已申请,等待DNS propagation(预计6小时)"
  
  - id: launch-checklist
    title: "上线前检查清单"
    assigned_to: human
    status: in_progress
    checklist:
      - [x] 所有功能在staging环境测试通过
      - [x] 性能测试通过(Lighthouse分数>90)
      - [x] SEO配置完成
      - [x] Google Analytics集成
      - [ ] 准备回滚计划
      - [ ] 通知用户上线时间
      - [ ] 监控告警配置

next_actions:
  - agent: devops-agent
    action: "完成o3,验证SSL工作正常"
  
  - agent: human
    action: "完成上线检查清单,准备发布公告"
  
  - agent: all
    action: "待命,准备上线支持"

你在群组中召开“上线会议“:

[你 @ 16:30]
@所有Agent
大家辛苦了!项目进展非常顺利,提前2天完成开发🎉

上线计划:
📅 时间:3月10日周日凌晨2:00(用户流量最低)
👥 值班:所有Agent
⏱️ 预计时长:1小时
📊 监控:实时关注错误率和性能指标

上线步骤:
1. @devops-agent 停止旧站,备份数据库
2. @devops-agent 部署新站到生产环境
3. @devops-agent 切换DNS
4. @frontend-agent @backend-agent 验证核心功能
5. @devops-agent 开启监控告警
6. 我发布公告

有问题吗?

[Design Agent @ 16:35]
我需要做什么准备吗?

[你 @ 16:40]
@design-agent 你的工作已经完成了!周日休息吧😊
除非上线后发现视觉问题,否则不需要你值班

[Frontend Agent @ 16:45]
我已经准备好验证清单:
- 首页加载
- 博客列表和详情页
- CMS登录和发布
- 移动端响应式
预计5分钟验证完毕

[Backend Agent @ 16:50]
我的验证清单:
- API健康检查
- 数据库连接
- 图片CDN
- 日志输出
也是5分钟

[DevOps Agent @ 17:00]
部署流程已经自动化(CI/CD),我只需要:
1. 触发production deployment
2. 等待健康检查通过
3. 切换DNS(已准备好脚本)
预计30分钟

都在掌控中👍

[你 @ 17:10]
完美!那就周日见
大家这两天可以轻松点,查漏补缺

第8步:上线和总结

上线顺利完成后,你更新STATE文件为最终状态:

project: website-redesign-v2
status: completed ✅
completed_at: 2024-03-10T03:15:00Z
progress: 100%

summary: |
  网站重构项目成功完成!
  
  时间:
  - 计划:4周(2024-02-20 至 2024-03-20)
  - 实际:19天(提前9天)
  
  团队:
  - 5个Agent + 1个人类项目负责人
  
  成果:
  - 全新React前端(Next.js 14)
  - FastAPI后端(Python)
  - 迁移107篇博客文章
  - Lighthouse性能分数:96/100
  - 移动端完全响应式
  
  上线过程:
  - 2024-03-10 02:00 开始部署
  - 2024-03-10 02:45 部署完成
  - 2024-03-10 03:15 验证完成,DNS切换
  - 零downtime,无回滚

metrics:
  total_tasks: 27
  completed_tasks: 27
  completion_rate: 100%
  
  total_estimated_hours: 234
  total_actual_hours: 198
  efficiency: 118%  # 比预估快18%
  
  blockers_encountered: 3
  average_resolution_time: 2.5 hours
  
  commits: 347
  lines_of_code: 12,450
  test_coverage: 87%

lessons_learned:
  what_went_well:
    - "Agent之间通过Telegram协调非常高效,沟通成本低"
    - "STATE文件作为单一事实来源,避免了信息不同步"
    - "提前准备基础设施(AWS)避免了后期阻塞"
    - "设计系统先行,让前端开发非常顺利"
    - "人类及时调整MVP范围(b4任务拆分),避免了延期"
  
  what_could_be_improved:
    - "内容迁移的短代码问题应该更早发现(在c1阶段)"
    - "Frontend和Backend对API格式的讨论应该在设计阶段进行"
    - "测试任务被低估了,实际花费更多时间(应该预留buffer)"
  
  for_next_time:
    - "在项目初期增加'API契约定义'任务,避免后期协商"
    - "内容迁移前做小规模pilot test"
    - "测试工作量预估×1.5"
    - "每周五下午做进度回顾,及时调整"

post_launch_monitoring:
  day_1:
    - "流量:1,234访客(+15%比旧站)"
    - "错误率:0.02%(1个CORS配置问题,已修复)"
    - "性能:平均加载时间1.2秒(vs旧站3.5秒)"
  
  day_7:
    - "用户反馈:92%积极"
    - "SEO:Google已重新索引,排名稳定"
    - "无重大问题"

next_steps:
  v1.1_features:
    - "实现密码重置流程(b6)"
    - "Google OAuth2集成(b7)"
    - "用户评论系统"
    - "Newsletter订阅"
  
  target_date: 2024-04-15

# 项目归档
archived: true
archive_location: projects/completed/website-redesign-v2/

在Telegram群组中,你发出最后的感谢:

[你 @ 2024-03-11 10:00]
@所有Agent

网站重构项目正式完成!🎉🎊

感谢每一个Agent的出色工作:
- @design-agent 的设计既美观又实用
- @frontend-agent @backend-agent 的代码质量很高
- @content-agent 迁移工作细致无误
- @devops-agent 的自动化节省了大量时间

数据说话:
✅ 提前9天完成
✅ 效率比预估高18%
✅ 零downtime上线
✅ 用户反馈92%积极

STATE.yaml已归档作为项目总结
经验教训已记录,供未来项目参考

干得漂亮,团队!🚀

下一个项目:v1.1功能增强
预计4月中旬启动

本章总结

Agent协调模式是多Agent系统的核心。本章我们学习了:

三种协调方式

  • 中心化协调:适合简单顺序任务,有明确的主Agent统筹
  • 去中心化协调(STATE文件):适合复杂并行项目,Agent自主协调
  • 消息传递:适合需要人类监督的场景,沟通透明可追溯

STATE文件的设计原则

  • 用文件而非数据库,换取可读性、版本控制和简单性
  • 结构清晰,包含项目元信息、任务列表、下一步行动、日志
  • 信息充分,让Agent无需查看其他资料就能决策
  • 处理好并发写入,利用Git或文件锁避免冲突
  • 人类友好,易于审查和手动调整

实战经验

  • STATE文件是“单一事实来源“,所有Agent都依赖它
  • 小更新、快提交,减少冲突
  • 遇到问题时在STATE中详细记录阻塞原因和解决方案
  • 项目结束后将STATE作为总结归档,记录经验教训

💡 AI辅助提示: 想生成你自己的项目STATE文件?问AI:“根据我的项目(描述项目),帮我生成一个完整的STATE.yaml文件,包含任务拆解和里程碑规划”

🔧 练习建议

  1. 选一个你正在进行的项目(哪怕是个人项目)
  2. 创建STATE.yaml文件,列出所有待完成任务
  3. 每天更新一次,体验STATE作为“进度仪表盘“的感觉
  4. 一周后回顾,看看哪些信息记录得好,哪些不够

下一章预告

Agent协调好了,如何让它们持续运行?下一章我们将学习持久化与定时任务——Cron job和Heartbeat模式,让你的Agent 24/7工作,自动监控、自动汇报、自动修复问题。

案例预告

  • Self-healing Server:Agent自动检测服务器问题并修复(15个Cron job设计)
  • Morning Briefing:每天8点自动汇总新闻、天气、日程(定时任务设计)
  • Health Tracker:Agent持续监控你的健康数据(Heartbeat模式)

让我们继续前进!


参考资料

本章引用的案例均来自 awesome-openclaw-usecases 社区仓库: