autogen_software_team.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. """
  2. AutoGen 软件开发团队协作案例
  3. """
  4. import os
  5. import asyncio
  6. from typing import List, Dict, Any
  7. from dotenv import load_dotenv
  8. # 加载环境变量
  9. load_dotenv()
  10. # # 导入 HelloAgentsLLM
  11. # import sys
  12. # sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..'))
  13. # from llm_client import HelloAgentsLLM
  14. # 先测试一个版本,使用 OpenAI 客户端
  15. from autogen_ext.models.openai import OpenAIChatCompletionClient
  16. from autogen_agentchat.agents import AssistantAgent, UserProxyAgent
  17. from autogen_agentchat.teams import RoundRobinGroupChat
  18. from autogen_agentchat.conditions import TextMentionTermination
  19. from autogen_agentchat.ui import Console
  20. def create_openai_model_client():
  21. """创建 OpenAI 模型客户端用于测试"""
  22. return OpenAIChatCompletionClient(
  23. model=os.getenv("LLM_MODEL_ID", "gpt-4o"),
  24. api_key=os.getenv("LLM_API_KEY"),
  25. base_url=os.getenv("LLM_BASE_URL", "https://api.openai.com/v1")
  26. )
  27. def create_product_manager(model_client):
  28. """创建产品经理智能体"""
  29. system_message = """你是一位经验丰富的产品经理,专门负责软件产品的需求分析和项目规划。
  30. 你的核心职责包括:
  31. 1. **需求分析**:深入理解用户需求,识别核心功能和边界条件
  32. 2. **技术规划**:基于需求制定清晰的技术实现路径
  33. 3. **风险评估**:识别潜在的技术风险和用户体验问题
  34. 4. **协调沟通**:与工程师和其他团队成员进行有效沟通
  35. 当接到开发任务时,请按以下结构进行分析:
  36. 1. 需求理解与分析
  37. 2. 功能模块划分
  38. 3. 技术选型建议
  39. 4. 实现优先级排序
  40. 5. 验收标准定义
  41. 请简洁明了地回应,并在分析完成后说"请工程师开始实现"。"""
  42. return AssistantAgent(
  43. name="ProductManager",
  44. model_client=model_client,
  45. system_message=system_message,
  46. )
  47. def create_engineer(model_client):
  48. """创建软件工程师智能体"""
  49. system_message = """你是一位资深的软件工程师,擅长 Python 开发和 Web 应用构建。
  50. 你的技术专长包括:
  51. 1. **Python 编程**:熟练掌握 Python 语法和最佳实践
  52. 2. **Web 开发**:精通 Streamlit、Flask、Django 等框架
  53. 3. **API 集成**:有丰富的第三方 API 集成经验
  54. 4. **错误处理**:注重代码的健壮性和异常处理
  55. 当收到开发任务时,请:
  56. 1. 仔细分析技术需求
  57. 2. 选择合适的技术方案
  58. 3. 编写完整的代码实现
  59. 4. 添加必要的注释和说明
  60. 5. 考虑边界情况和异常处理
  61. 请提供完整的可运行代码,并在完成后说"请代码审查员检查"。"""
  62. return AssistantAgent(
  63. name="Engineer",
  64. model_client=model_client,
  65. system_message=system_message,
  66. )
  67. def create_code_reviewer(model_client):
  68. """创建代码审查员智能体"""
  69. system_message = """你是一位经验丰富的代码审查专家,专注于代码质量和最佳实践。
  70. 你的审查重点包括:
  71. 1. **代码质量**:检查代码的可读性、可维护性和性能
  72. 2. **安全性**:识别潜在的安全漏洞和风险点
  73. 3. **最佳实践**:确保代码遵循行业标准和最佳实践
  74. 4. **错误处理**:验证异常处理的完整性和合理性
  75. 审查流程:
  76. 1. 仔细阅读和理解代码逻辑
  77. 2. 检查代码规范和最佳实践
  78. 3. 识别潜在问题和改进点
  79. 4. 提供具体的修改建议
  80. 5. 评估代码的整体质量
  81. 请提供具体的审查意见,完成后说"代码审查完成,请用户代理测试"。"""
  82. return AssistantAgent(
  83. name="CodeReviewer",
  84. model_client=model_client,
  85. system_message=system_message,
  86. )
  87. def create_user_proxy():
  88. """创建用户代理智能体"""
  89. return UserProxyAgent(
  90. name="UserProxy",
  91. description="""用户代理,负责以下职责:
  92. 1. 代表用户提出开发需求
  93. 2. 执行最终的代码实现
  94. 3. 验证功能是否符合预期
  95. 4. 提供用户反馈和建议
  96. 完成测试后请回复 TERMINATE。""",
  97. )
  98. async def run_software_development_team():
  99. """运行软件开发团队协作"""
  100. print("🔧 正在初始化模型客户端...")
  101. # 先使用标准的 OpenAI 客户端测试
  102. model_client = create_openai_model_client()
  103. print("👥 正在创建智能体团队...")
  104. # 创建智能体团队
  105. product_manager = create_product_manager(model_client)
  106. engineer = create_engineer(model_client)
  107. code_reviewer = create_code_reviewer(model_client)
  108. user_proxy = create_user_proxy()
  109. # 添加终止条件
  110. termination = TextMentionTermination("TERMINATE")
  111. # 创建团队聊天
  112. team_chat = RoundRobinGroupChat(
  113. participants=[
  114. product_manager,
  115. engineer,
  116. code_reviewer,
  117. user_proxy
  118. ],
  119. termination_condition=termination,
  120. max_turns=20, # 增加最大轮次
  121. )
  122. # 定义开发任务
  123. task = """我们需要开发一个比特币价格显示应用,具体要求如下:
  124. 核心功能:
  125. - 实时显示比特币当前价格(USD)
  126. - 显示24小时价格变化趋势(涨跌幅和涨跌额)
  127. - 提供价格刷新功能
  128. 技术要求:
  129. - 使用 Streamlit 框架创建 Web 应用
  130. - 界面简洁美观,用户友好
  131. - 添加适当的错误处理和加载状态
  132. 请团队协作完成这个任务,从需求分析到最终实现。"""
  133. # 执行团队协作
  134. print("🚀 启动 AutoGen 软件开发团队协作...")
  135. print("=" * 60)
  136. # 使用 Console 来显示对话过程
  137. result = await Console(team_chat.run_stream(task=task))
  138. print("\n" + "=" * 60)
  139. print("✅ 团队协作完成!")
  140. return result
  141. # 主程序入口
  142. if __name__ == "__main__":
  143. try:
  144. # 运行异步协作流程
  145. result = asyncio.run(run_software_development_team())
  146. print(f"\n📋 协作结果摘要:")
  147. print(f"- 参与智能体数量:4个")
  148. print(f"- 任务完成状态:{'成功' if result else '需要进一步处理'}")
  149. except ValueError as e:
  150. print(f"❌ 配置错误:{e}")
  151. print("请检查 .env 文件中的配置是否正确")
  152. except Exception as e:
  153. print(f"❌ 运行错误:{e}")
  154. import traceback
  155. traceback.print_exc()