""" 示例使用脚本 演示如何使用多智能体系统生成代码和文档 """ import asyncio import json from pathlib import Path from datetime import datetime from crew_factory import CrewFactory, run_multi_agent_task from stream_manager import stream_manager async def save_generated_content(task_id: str, output_dir: str = "generated_output"): """ 订阅 SSE 流并保存生成的内容到文件 Args: task_id: 任务 ID output_dir: 输出目录 """ output_path = Path(output_dir) output_path.mkdir(exist_ok=True) # 创建时间戳目录 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") task_output_dir = output_path / f"task_{timestamp}" task_output_dir.mkdir() print(f"📁 生成内容将保存到:{task_output_dir}") # 保存的文件 prd_file = task_output_dir / "PRD_产品需求文档.md" qa_file = task_output_dir / "QA_测试计划.md" dev_file = task_output_dir / "Dev_技术方案.md" final_file = task_output_dir / "Final_交付报告.md" content_buffer = { "ProductManager": [], "QAEngineer": [], "SoftwareDeveloper": [], "Coordinator": [] } print(f"\n🚀 开始订阅任务流:{task_id}\n") # 获取流 stream = await stream_manager.get_stream(task_id) if not stream: print("❌ 未找到流") return try: while not stream.is_closed or not stream.queue.empty(): try: event = await asyncio.wait_for(stream.get(), timeout=5.0) if not event: break # 打印事件 agent = event.agent content = event.content event_type = event.event_type print(f"[{agent}] {event_type}: {content[:100]}...") # 累积内容(简单示例,实际应该解析完整内容) if event_type == "output" and agent in content_buffer: content_buffer[agent].append(content) # 检测任务完成 if event_type == "end": print("\n✅ 任务完成!正在保存文件...\n") # 保存各角色的输出 for role, contents in content_buffer.items(): if contents: filename = None if role == "ProductManager": filename = prd_file elif role == "QAEngineer": filename = qa_file elif role == "SoftwareDeveloper": filename = dev_file elif role == "Coordinator": filename = final_file if filename: with open(filename, 'w', encoding='utf-8') as f: f.write(f"# {role} 输出\n\n") f.write(f"生成时间:{datetime.now().isoformat()}\n\n") f.write('\n'.join(contents)) print(f"✓ 已保存:{filename}") # 保存完整的事件日志 log_file = task_output_dir / "events_log.json" print(f"✓ 已保存完整日志:{log_file}") break except asyncio.TimeoutError: if stream.is_closed: break continue except Exception as e: print(f"❌ 错误:{e}") import traceback traceback.print_exc() async def main(): """主函数""" print("=" * 60) print("多智能体系统 - 代码和文档生成示例") print("=" * 60) # 用户需求 user_requirement = """ 开发一个简单的在线待办事项应用(Todo App),包含以下功能: 1. 用户可以注册和登录 2. 创建、编辑、删除待办事项 3. 标记事项为完成/未完成 4. 按优先级和截止日期排序 5. 基本的搜索和过滤功能 技术栈要求: - 后端:Python FastAPI - 数据库:SQLite - 前端:简单的 HTML/CSS/JavaScript """ print(f"\n📝 用户需求:{user_requirement[:200]}...\n") print("⏳ 启动多智能体系统,请稍候...\n") try: # 启动任务 task_id = await run_multi_agent_task( user_requirement=user_requirement, skip_confirmation=True ) print(f"✅ 任务已启动,Task ID: {task_id}\n") # 订阅并保存生成的内容 await save_generated_content(task_id) print("\n" + "=" * 60) print("✨ 生成完成!请查看 generated_output/ 目录") print("=" * 60) except Exception as e: print(f"\n❌ 执行失败:{e}") import traceback traceback.print_exc() if __name__ == "__main__": # 加载环境变量 try: from dotenv import load_dotenv load_dotenv() except ImportError: pass asyncio.run(main())