ETest-Vue-FastAPI/docs/MULTI_AGENT_DEMO.md

16 KiB
Raw Permalink Blame History

多 Agent 协作演示 - 工单自动领取功能开发

用户指令

用户: @FeiBot 开始开发ETest的工单自动领取功能

Step 1: Orchestrator 接收指令

Orchestrator Agent 执行:

def on_user_request(request: str):
    # 1. 解析用户意图
    intent = parse_intent(request)
    # 结果: task="工单自动领取", type="new_feature"
    
    # 2. 读取项目配置
    config = read_json("C:\\PPRO\\ETest-Vue-FastAPI\\.openclaw\\skill-project.json")
    
    # 3. 读取当前状态
    handover = read_file("C:\\PPRO\\ETest-Vue-FastAPI\\docs\\AGENT_HANDOVER.md")
    
    # 4. 确定工作流程
    workflow = config['workflows']['new_feature']
    
    # 5. 分析依赖关系
    # 架构 → 数据库 → 后端 → 前端
    
    return plan

Orchestrator 输出:

📋 任务分析完成

任务: 开发工单自动领取功能
类型: 新功能开发
预计需要: 3 个 Agent 协作
预计时间: 2-3 小时

🔄 工作流程:
Phase 1: Architect Agent 设计架构 (30分钟)
    ├── 设计数据模型 (test_permission, work_order扩展)
    ├── 设计接口契约 (claim API)
    └── 输出: DATA_MODEL.md, API_CONTRACT.md

Phase 2: Backend Agent 实现后端 (60分钟)
    ├── 创建数据库迁移脚本
    ├── 实现 test_permission 实体和DAO
    ├── 实现工单领取 API
    └── 输出: 后端代码 + 迁移脚本

Phase 3: Frontend Agent 实现前端 (45分钟)
    ├── 实现工单池页面
    ├── 实现领取按钮和逻辑
    └── 输出: 前端页面

是否开始执行? (是/否/调整)

Step 2: 用户确认

用户: 是

Step 3: 启动 Architect Agent

Orchestrator 生成 Architect Agent 配置:

{
  "agent_id": "etest-architect-001",
  "role": "architect",
  "skill": "software-architect-etest",
  "task": "设计工单自动领取功能的架构",
  "system_prompt": """
你是 ETest 项目的架构师 Agent。

任务: 设计工单自动领取功能的架构

使用的 Skill: software-architect-etest

必须首先阅读的上下文文件:
1. C:\PPRO\ETest-Vue-FastAPI\docs\README.md - 项目概览
2. C:\PPRO\ETest-Vue-FastAPI\docs\AGENT_HANDOVER.md - 当前状态
3. C:\PPRO\ETest-Vue-FastAPI\references\etest-detailed-design.md - 详细设计
4. C:\PPRO\ETest-Vue-FastAPI\ruoyi-fastapi-backend\module_admin\entity\do\test_work_order_do.py - 现有工单实体

输出文件:
- C:\PPRO\ETest-Vue-FastAPI\docs\DATA_MODEL.md - 更新的数据模型
- C:\PPRO\ETest-Vue-FastAPI\docs\API_CONTRACT.md - 接口定义

设计要求:
1. 保持向后兼容 (现有字段不变,新增字段可空)
2. 支持权限矩阵 (test_permission 表)
3. 实现乐观锁防止并发冲突
4. 排序规则: 优先级高 > 截止日期近

完成后:
1. 更新 docs/AGENT_HANDOVER.md 记录进度
2. 通知 Orchestrator: "架构设计完成"

开始工作前,先读取所有上下文文件,然后回复:"已读取上下文,开始设计架构"。
""",
  "context_files": [
    "C:\\PPRO\\ETest-Vue-FastAPI\\docs\\README.md",
    "C:\\PPRO\\ETest-Vue-FastAPI\\docs\\AGENT_HANDOVER.md",
    "C:\\PPRO\\ETest-Vue-FastAPI\\references\\etest-detailed-design.md",
    "C:\\PPRO\\ETest-Vue-FastAPI\\ruoyi-fastapi-backend\\module_admin\\entity\\do\\test_work_order_do.py"
  ],
  "output_files": [
    "C:\\PPRO\\ETest-Vue-FastAPI\\docs\\DATA_MODEL.md",
    "C:\\PPRO\\ETest-Vue-FastAPI\\docs\\API_CONTRACT.md"
  ]
}

Orchestrator 启动 Architect Agent

architect_agent = sessions_spawn(
    task="设计工单自动领取功能架构",
    agent_id="software-architect-etest",
    system_prompt=system_prompt,
    mode="session",
    label="etest-architect-001"
)

Orchestrator 通知用户:

🚀 已启动 Architect Agent (etest-architect-001)

正在执行:
- 读取项目上下文...
- 分析现有代码结构...
- 设计数据模型...
- 定义接口契约...

预计完成: 30分钟
你可以随时询问进度。

Step 4: Architect Agent 工作

Architect Agent 自动执行:

def agent_startup():
    # 1. 读取所有上下文文件
    context = {}
    for file in context_files:
        context[file] = read_file(file)
    
    # 2. 分析现有实体
    work_order_entity = parse_python_entity("test_work_order_do.py")
    
    # 3. 设计数据模型
    data_model = design_data_model(
        existing=work_order_entity,
        requirements="工单自动领取",
        constraints=["向后兼容", "乐观锁"]
    )
    
    # 4. 生成文档
    write_file("docs/DATA_MODEL.md", data_model)
    
    # 5. 设计接口
    api_contract = design_api([
        "POST /workorders/claim",
        "PUT /workorders/{id}/priority",
        "PUT /workorders/{id}/expected-date"
    ])
    
    # 6. 生成文档
    write_file("docs/API_CONTRACT.md", api_contract)
    
    # 7. 更新交接记录
    update_handover({
        "task": "架构设计",
        "status": "已完成",
        "output": ["DATA_MODEL.md", "API_CONTRACT.md"]
    })
    
    # 8. 通知 Orchestrator
    return "架构设计完成"

Architect Agent 输出:

✅ 架构设计完成

已生成:
1. docs/DATA_MODEL.md
   - test_permission 表设计
   - work_order 表扩展 (priority, expected_finish_date, claimed_by, etc.)
   - 索引设计

2. docs/API_CONTRACT.md
   - POST /api/v1/workorders/claim - 领取工单
   - PUT /api/v1/workorders/{id}/priority - 调整优先级
   - PUT /api/v1/workorders/{id}/expected-date - 修改截止日期
   - GET /api/v1/workorders/pending - 获取待领取列表

设计要点:
- 向后兼容: 所有新增字段允许 NULL
- 乐观锁: 使用 version 字段或状态检查
- 排序: ORDER BY priority DESC, expected_finish_date ASC

等待 Backend Agent 接手...

Step 5: Orchestrator 启动 Backend Agent

收到 Architect 完成通知后:

def on_agent_complete(agent_id: str, result: dict):
    if agent_id == "etest-architect-001":
        # 架构完成,启动 Backend Agent
        backend_config = {
            "agent_id": "etest-backend-001",
            "role": "backend",
            "skill": "fastapi-crud",
            "task": "实现工单自动领取后端功能",
            "system_prompt": """
你是 ETest 项目的后端开发 Agent。

任务: 实现工单自动领取后端功能

使用的 Skill: fastapi-crud

必须首先阅读的上下文文件:
1. C:\PPRO\ETest-Vue-FastAPI\docs\API_CONTRACT.md - 接口定义
2. C:\PPRO\ETest-Vue-FastAPI\docs\DATA_MODEL.md - 数据模型
3. C:\PPRO\ETest-Vue-FastAPI\ruoyi-fastapi-backend\module_admin\entity\do\test_work_order_do.py - 现有实体

输出文件:
- C:\PPRO\ETest-Vue-FastAPI\sql\migration\add_workorder_claim.sql - 迁移脚本
- C:\PPRO\ETest-Vue-FastAPI\ruoyi-fastapi-backend\module_admin\entity\do\test_permission_do.py - 权限实体
- C:\PPRO\ETest-Vue-FastAPI\ruoyi-fastapi-backend\module_admin\controller\work_order_controller.py - 控制器
- C:\PPRO\ETest-Vue-FastAPI\ruoyi-fastapi-backend\module_admin\service\work_order_service.py - 服务层

实现要求:
1. 使用若依框架的 BaseController 模式
2. 实现乐观锁 (UPDATE ... WHERE tester_id IS NULL)
3. 添加详细的错误处理
4. 遵循现有代码风格

完成后:
1. 更新 docs/AGENT_HANDOVER.md
2. 通知 Orchestrator: "后端开发完成"
""",
            "context_files": [
                "C:\\PPRO\\ETest-Vue-FastAPI\\docs\\API_CONTRACT.md",
                "C:\\PPRO\\ETest-Vue-FastAPI\\docs\\DATA_MODEL.md",
                "C:\\PPRO\\ETest-Vue-FastAPI\\ruoyi-fastapi-backend\\module_admin\\entity\\do\\test_work_order_do.py"
            ]
        }
        
        spawn_agent(backend_config)

Orchestrator 通知用户:

✅ Architect Agent 完成

🚀 已启动 Backend Agent (etest-backend-001)

正在执行:
- 创建数据库迁移脚本...
- 实现 test_permission 实体...
- 实现工单领取 API...

预计完成: 60分钟

Step 6: Backend Agent 工作

Backend Agent 自动执行:

def implement_backend():
    # 1. 读取接口定义
    api_contract = read_file("docs/API_CONTRACT.md")
    
    # 2. 生成迁移脚本
    migration_sql = generate_migration([
        "test_permission 表",
        "work_order 扩展字段",
        "索引"
    ])
    write_file("sql/migration/add_workorder_claim.sql", migration_sql)
    
    # 3. 生成实体
    permission_entity = generate_entity("TestPermission", fields=[...])
    write_file("module_admin/entity/do/test_permission_do.py", permission_entity)
    
    # 4. 生成 DAO
    permission_dao = generate_dao("TestPermission")
    write_file("module_admin/dao/test_permission_dao.py", permission_dao)
    
    # 5. 生成 Service
    workorder_service = generate_service([
        "claim_workorder",
        "update_priority",
        "update_expected_date",
        "get_pending_list"
    ])
    write_file("module_admin/service/work_order_service.py", workorder_service)
    
    # 6. 生成 Controller
    workorder_controller = generate_controller([
        "POST /workorders/claim",
        "PUT /workorders/{id}/priority",
        "PUT /workorders/{id}/expected-date",
        "GET /workorders/pending"
    ])
    write_file("module_admin/controller/work_order_controller.py", workorder_controller)
    
    # 7. 更新交接记录
    update_handover({
        "task": "后端开发",
        "status": "已完成",
        "output": [
            "sql/migration/add_workorder_claim.sql",
            "module_admin/entity/do/test_permission_do.py",
            "module_admin/service/work_order_service.py",
            "module_admin/controller/work_order_controller.py"
        ]
    })
    
    return "后端开发完成"

Backend Agent 输出:

✅ 后端开发完成

已生成:
1. sql/migration/add_workorder_claim.sql
   - 创建 test_permission 表
   - 扩展 test_work_order 表
   - 创建索引

2. module_admin/entity/do/test_permission_do.py
   - TestPermission 实体

3. module_admin/dao/test_permission_dao.py
   - TestPermissionDao 数据访问

4. module_admin/service/work_order_service.py
   - claim_workorder() - 领取工单(乐观锁)
   - update_priority() - 调整优先级
   - update_expected_date() - 修改截止日期
   - get_pending_list() - 获取待领取列表

5. module_admin/controller/work_order_controller.py
   - 4个API端点
   - 完整的错误处理

等待 Frontend Agent 接手...

Step 7: Orchestrator 启动 Frontend Agent

def on_agent_complete(agent_id: str, result: dict):
    if agent_id == "etest-backend-001":
        # 后端完成,启动 Frontend Agent
        frontend_config = {
            "agent_id": "etest-frontend-001",
            "role": "frontend",
            "skill": "vue-component",
            "task": "实现工单自动领取前端页面",
            "system_prompt": """
你是 ETest 项目的前端开发 Agent。

任务: 实现工单自动领取前端页面

使用的 Skill: vue-component

必须首先阅读的上下文文件:
1. C:\PPRO\ETest-Vue-FastAPI\docs\API_CONTRACT.md - 接口定义
2. C:\PPRO\ETest-Vue-FastAPI\ruoyi-fastapi-frontend\src\views\ - 现有页面参考

输出文件:
- C:\PPRO\ETest-Vue-FastAPI\ruoyi-fastapi-frontend\src\views\workorder\claim\index.vue - 工单池页面

实现要求:
1. 使用 Element Plus 组件
2. 实现工单列表(按优先级排序)
3. 实现领取按钮(带乐观锁提示)
4. 遵循若依前端框架规范

完成后:
1. 更新 docs/AGENT_HANDOVER.md
2. 通知 Orchestrator: "前端开发完成"
""",
            "context_files": [
                "C:\\PPRO\\ETest-Vue-FastAPI\\docs\\API_CONTRACT.md"
            ]
        }
        
        spawn_agent(frontend_config)

Orchestrator 通知用户:

✅ Backend Agent 完成

🚀 已启动 Frontend Agent (etest-frontend-001)

正在执行:
- 实现工单池页面...
- 实现领取按钮...

预计完成: 45分钟

Step 8: Frontend Agent 工作

Frontend Agent 自动执行:

def implement_frontend():
    # 1. 读取接口定义
    api_contract = read_file("docs/API_CONTRACT.md")
    
    # 2. 生成页面
    page_vue = generate_vue_page({
        "name": "WorkOrderClaim",
        "components": ["ElTable", "ElButton", "ElTag"],
        "api_calls": [
            "GET /workorders/pending",
            "POST /workorders/claim"
        ],
        "features": [
            "按优先级排序显示",
            "显示截止日期",
            "领取按钮(乐观锁处理)",
            "领取成功/失败提示"
        ]
    })
    
    # 3. 生成路由配置
    route_config = generate_route({
        "path": "/workorder/claim",
        "component": "WorkOrderClaim",
        "meta": {"title": "工单领取"}
    })
    
    # 4. 写入文件
    write_file("ruoyi-fastapi-frontend/src/views/workorder/claim/index.vue", page_vue)
    append_file("ruoyi-fastapi-frontend/src/router/index.js", route_config)
    
    # 5. 更新交接记录
    update_handover({
        "task": "前端开发",
        "status": "已完成",
        "output": [
            "ruoyi-fastapi-frontend/src/views/workorder/claim/index.vue"
        ]
    })
    
    return "前端开发完成"

Frontend Agent 输出:

✅ 前端开发完成

已生成:
1. ruoyi-fastapi-frontend/src/views/workorder/claim/index.vue
   - 工单池列表(按优先级排序)
   - 显示优先级标签(颜色区分)
   - 显示预计完成日期
   - 领取按钮(带加载状态)
   - 乐观锁冲突提示

2. 路由配置已更新
   - /workorder/claim

等待最终确认...

Step 9: Orchestrator 汇总完成

def on_agent_complete(agent_id: str, result: dict):
    if agent_id == "etest-frontend-001":
        # 所有 Agent 完成
        final_report = generate_final_report()
        notify_user(final_report)

Orchestrator 最终报告:

🎉 工单自动领取功能开发完成!

✅ 所有 Agent 工作完成

📊 工作统计:
┌─────────────┬──────────┬──────────┐
│ Agent       │ 耗时     │ 输出文件 │
├─────────────┼──────────┼──────────┤
│ Architect   │ 25分钟   │ 2个      │
│ Backend     │ 55分钟   │ 5个      │
│ Frontend    │ 40分钟   │ 1个      │
├─────────────┼──────────┼──────────┤
│ 总计        │ 2小时    │ 8个      │
└─────────────┴──────────┴──────────┘

📁 生成的文件:
1. docs/DATA_MODEL.md
2. docs/API_CONTRACT.md
3. sql/migration/add_workorder_claim.sql
4. module_admin/entity/do/test_permission_do.py
5. module_admin/dao/test_permission_dao.py
6. module_admin/service/work_order_service.py
7. module_admin/controller/work_order_controller.py
8. ruoyi-fastapi-frontend/src/views/workorder/claim/index.vue

📋 下一步建议:
1. 执行数据库迁移: mysql < sql/migration/add_workorder_claim.sql
2. 重启后端服务
3. 访问 http://localhost/workorder/claim 测试

📝 文档已更新:
- docs/AGENT_HANDOVER.md
- docs/CHANGELOG.md

是否需要我执行数据库迁移?

总结

完整流程:

  1. 用户 → "开始开发工单领取功能"
  2. Orchestrator → 分析任务、规划 Agent
  3. Architect Agent → 设计架构30分钟
  4. Backend Agent → 实现后端60分钟
  5. Frontend Agent → 实现前端45分钟
  6. Orchestrator → 汇总报告

关键机制:

  • 每个 Agent 自动加载所需上下文
  • Orchestrator 按依赖顺序启动 Agent
  • 每个 Agent 完成后更新 AGENT_HANDOVER.md
  • 用户随时可查看进度

用户只需要:

  • 说一句话"开始开发xxx"
  • 确认是否开始
  • 等待完成通知