
Day 52AutoGen 嵌套对话与工具共享 迷你软件公司项目复盘欢迎来到第五十二天这是第四阶段多智能体协作的最后一天。昨天我们为迷你软件公司加入了代码评审和迭代修复闭环项目已经基本完整。今天我们将学习 AutoGen 的两个高级特性——嵌套对话Nested Chat和工具共享并探讨如何将 CrewAI 与 AutoGen 结合使用、取长补短。最后我们将对迷你软件公司项目进行最终复盘整理代码与文档为第四阶段画上圆满句号。一、今日学习目标理解 AutoGen 嵌套对话的概念与使用场景学会用register_nested_chats封装子对话。掌握 AutoGen 中多 Agent 共享工具代码执行器的机制。了解 CrewAI 与 AutoGen 结合使用的两种模式CrewAI 编排流程 AutoGen 处理辩论/代码执行。完成迷你软件公司项目的最终复盘整理代码结构、补充 README、总结迭代经验。回顾第四阶段核心知识建立多智能体框架选型与组合的能力。二、详细实现步骤步骤 1理解 AutoGen 嵌套对话Nested Chat什么是嵌套对话嵌套对话允许一个 Agent 在需要时“发起一个子对话”子对话由一个或多个其他 Agent 参与完成后将结果返回给主对话。它适合封装可复用的多步协作流程。典型场景主对话中当需要“代码审查”时触发一个由“审查员”和“程序员”组成的子对话审查完成后将结论返回主对话。主对话中当需要“事实核查”时触发一个由“核查员”和“搜索助手”组成的子对话。核心 APIConversableAgent.register_nested_chats(chat_queue, trigger)chat_queue子对话的配置列表每个配置包含recipient子对话的对方 Agent、message触发消息模板、summary_method如何总结子对话结果等。trigger触发条件可以是消息内容判断函数或另一个 Agent当该 Agent 收到消息时触发。示例主助手在遇到“需要审查”时自动触发子对话importautogen# 配置略同前# 创建主助手main_assistantautogen.AssistantAgent(name主助手,llm_configllm_config,system_message你是一个项目协调员。当用户要求审查代码时你会触发代码审查子对话。)# 创建审查员和程序员子对话参与者reviewerautogen.AssistantAgent(name审查员,llm_configllm_config,system_message你负责审查代码指出问题。)programmerautogen.AssistantAgent(name程序员,llm_configllm_config,system_message你根据审查意见修改代码。)# 创建用户代理userautogen.UserProxyAgent(name用户,human_input_modeNEVER,code_execution_configFalse,)# 定义子对话队列chat_queue[{recipient:reviewer,message:请审查以下代码\n{input},summary_method:last_msg,# 用子对话最后一条消息作为摘要max_turns:2,},{recipient:programmer,message:请根据审查意见修改代码。,summary_method:last_msg,max_turns:2,}]# 注册嵌套对话当主助手收到包含“审查”的消息时触发main_assistant.register_nested_chats(chat_queue,triggerlambdasender:审查insender.message.get(content,))# 发起主对话user.initiate_chat(main_assistant,message请审查这段代码def add(a,b): return a-b)运行后主助手会检测到“审查”关键词自动触发与审查员、程序员的子对话完成后将结果返回给用户。关键参数说明summary_method子对话结果的总结方式常用last_msg最后一条消息、reflection_with_llm用 LLM 总结。max_turns子对话最大轮数防止无限循环。trigger可以是函数接收 sender 消息返回 bool也可以是 Agent 列表当这些 Agent 发言时触发。适用场景将复杂的多步协作封装成“子流程”主对话保持简洁按需调用。步骤 2AutoGen 工具共享机制在 AutoGen 中工具如代码执行、函数调用通常绑定在UserProxyAgent上。多个 Agent 可以通过共享同一个UserProxyAgent来使用工具。共享代码执行器# 创建一个共享的执行器executorautogen.UserProxyAgent(name执行器,human_input_modeNEVER,code_execution_config{work_dir:coding,use_docker:False,},)# 多个 AssistantAgent 都可以请求执行器执行代码assistant1autogen.AssistantAgent(name助手1,llm_configllm_config)assistant2autogen.AssistantAgent(name助手2,llm_configllm_config)# 助手1 请求执行executor.initiate_chat(assistant1,message请计算 11用代码执行。)# 助手2 也可以复用同一个执行器但注意initiate_chat 会重置对话实际共享需在 GroupChat 中在 GroupChat 中共享工具将执行器作为群聊成员任何 Agent 都可以在发言中请求执行代码执行器会响应。groupchatautogen.GroupChat(agents[user_proxy,executor,assistant1,assistant2],messages[],max_round10,)managerautogen.GroupChatManager(groupchatgroupchat,llm_configllm_config)user_proxy.initiate_chat(manager,message请助手1 计算 11助手2 计算 2*3用代码执行。)执行器会依次执行两个助手生成的代码并将结果返回群聊。安全提示共享执行器意味着所有 Agent 都能执行代码生产环境务必使用 Docker 沙箱。步骤 3CrewAI 与 AutoGen 结合使用两种框架各有优势可以组合使用模式一CrewAI 编排流程AutoGen 处理子任务用 CrewAI 定义整体流程需求→设计→编码→测试其中“编码”任务交给一个 AutoGen 子对话完成程序员 代码执行器。在 CrewAI 的 Task 中通过工具或自定义函数调用 AutoGen 的对话流程。模式二AutoGen 做辩论/评审CrewAI 做执行用 AutoGen GroupChat 进行“方案辩论”或“代码评审”得出结论后将结论作为 CrewAI 任务的输入。示例在 CrewAI 的测试任务中嵌入 AutoGen 代码执行子对话# 伪代码思路defautogen_code_review(code:str)-str:# 创建 AutoGen 的审查员和执行器进行子对话# 返回审查结论pass# 在 CrewAI 的 Task 中调用task_testingTask(description请审查代码可以使用 autogen_code_review 工具。,agenttester,tools[autogen_code_review_tool],)实际组合需要较多适配代码今天先建立概念CrewAI 适合流程编排AutoGen 适合需要对话/辩论/代码执行的子任务。步骤 4迷你软件公司项目最终复盘4.1 整理项目目录将项目整理成规范的仓库结构mini_software_company/ ├── crew.py # CrewAI 多智能体定义与执行 ├── agents.py # 各 Agent 定义 ├── tasks.py # Task 定义与依赖 ├── models.py # Pydantic 结构化模型 ├── tools.py # 代码执行等工具 ├── config.py # 配置API Key、路径 ├── main.py # 入口 ├── output/ # 生成的需求、设计、代码、测试报告 │ ├── requirements.md │ ├── architecture.md │ ├── todo.py │ ├── code_review.md │ └── test_report.md ├── requirements.txt └── README.md4.2 补充 READMEREADME 应包含项目简介基于 CrewAI 的多智能体软件开发模拟系统。角色说明产品经理、架构师、程序员、代码评审员、测试员。流程图需求→设计→编码→评审→测试→迭代修复。运行方式安装依赖、配置.env、执行python main.py。示例输出展示一次完整迭代的生成结果。技术栈CrewAI、DeepSeek、Pydantic。4.3 总结迭代经验记录最大迭代次数设置为 3 次是否合理哪些 Bug 是测试员发现的哪些是评审员发现的代码执行工具是否有效有没有因为input()导致超时修复轮次中程序员是否一次修复了所有问题4.4 增加测试用例文件让测试员除了生成报告还将测试用例保存为output/test_cases.md便于人工复用。步骤 5第四阶段知识回顾主题关键点多智能体协作模式顺序执行、层级管理、辩论CrewAIAgentrole/goal/backstory、Taskcontext/output_file/output_pydantic、Processsequential/hierarchicalAutoGenConversableAgent、AssistantAgent、UserProxyAgent、GroupChat、GroupChatManager、human_input_modeHuman-in-the-Loop人类审批、代码执行前确认、input_func 自定义嵌套对话register_nested_chats封装子流程工具共享共享 UserProxyAgent 执行器GroupChat 中协作项目实战内容创作团队、市场调研团队、投资辩论赛、迷你软件公司框架选型建议流程明确、角色分工固定 → CrewAI。需要多轮讨论、辩论、代码执行、人类介入 → AutoGen。复杂系统 → 两者结合CrewAI 做编排AutoGen 做子任务。三、常见问题与调试Q1register_nested_chats的trigger函数不生效。→ 检查trigger的签名。它接收sender一个ConversableAgent对象通过sender.message获取最后一条消息。确保消息内容包含触发关键词。也可以直接用 Agent 列表作为 trigger。Q2嵌套对话的结果没有返回主对话。→ 检查summary_method设置。last_msg只取最后一条消息可能不够全面。可以改用reflection_with_llm让 LLM 总结子对话。Q3GroupChat 中多个 Agent 同时请求执行代码执行器混乱。→ 在system_message中约定“每次只允许一个 Agent 请求执行”或在发言选择函数中控制顺序。Q4CrewAI 和 AutoGen 结合时依赖冲突。→ 两个框架都依赖openai等库通常兼容。如果版本冲突可以在独立虚拟环境中分别运行通过 API 或子进程通信。Q5迷你软件公司项目的代码执行工具在 Windows 下报错。→subprocess在 Windows 下路径分隔符不同确保使用sys.executable和正确的cwd。如果代码包含中文设置encodingutf-8。Q6迭代修复后测试仍然不通过达到最大次数。→ 检查测试报告是否具体是否指出了具体函数和行号。可以在修复任务中要求程序员“逐条回应测试报告中的每个问题”。也可以增加一轮“人工介入”让人类决定是否接受当前版本。四、今日总结与作业今天你完成了✅ 理解了 AutoGen 嵌套对话的机制学会了register_nested_chats的用法。✅ 掌握了 AutoGen 中工具共享的机制了解了 GroupChat 中共享执行器的方法。✅ 了解了 CrewAI 与 AutoGen 结合使用的两种模式。✅ 完成了迷你软件公司项目的最终复盘整理了代码结构和 README。✅ 系统回顾了第四阶段的核心知识点建立了框架选型能力。今日作业必做运行迷你软件公司项目将最大迭代次数设为 2记录每轮测试结果统计最终代码的 Bug 数量。与迭代 3 次的结果对比分析迭代次数对代码质量的影响。为迷你软件公司项目编写一个完整的 README包含架构图、运行指南、示例输出推送到 GitHub。实现一个简单的 AutoGen 嵌套对话示例主助手在收到“翻译并审查”请求时触发一个由“翻译员”和“审查员”组成的子对话完成后返回结果。思考题在什么场景下你会选择“CrewAI 编排 AutoGen 子对话”的混合架构请举一个具体例子并说明两部分如何分工。明日预告我们将进入第五阶段——综合实战与求职准备。首先学习如何将前四个阶段的项目整合成一份有竞争力的作品集并准备 AI Agent 开发岗位的面试。请整理好你的所有项目代码和笔记我们明天见有任何问题欢迎随时提问