第一次提交
This commit is contained in:
167
example_usage.py
Normal file
167
example_usage.py
Normal file
@@ -0,0 +1,167 @@
|
||||
"""
|
||||
示例使用脚本
|
||||
演示如何使用多智能体系统生成代码和文档
|
||||
"""
|
||||
|
||||
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())
|
||||
Reference in New Issue
Block a user