# 多 Agent 协作演示 - 工单自动领取功能开发 ## 用户指令 ``` 用户: @FeiBot 开始开发ETest的工单自动领取功能 ``` --- ## Step 1: Orchestrator 接收指令 **Orchestrator Agent 执行:** ```python 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 配置:** ```json { "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:** ```python 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 自动执行:** ```python 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 完成通知后:** ```python 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 自动执行:** ```python 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 ```python 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 自动执行:** ```python 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 汇总完成 ```python 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" - 确认是否开始 - 等待完成通知