传统的多智能体框架(如MetaGPT、AutoGen、CrewAI等)普遍存在一些核心挑战,一篇来自字节跳动的研究论文《AIME》将这些挑战归纳为“规划-执行”框架的三大缺陷。
痛点一:僵化的执行计划
在传统框架中,计划一旦由规划器制定,执行器便会机械地按顺序执行,即使中途遇到新情况或发现更优解,也难以动态调整。
用户请求 → 规划器制定计划 → 执行器逐个执行 → 返回结果
↓
(规划器在首次执行后便处于闲置状态)
典型场景:若要研究“2024年AI领域十大突破”,规划器可能分解出5个搜索子任务。若第一个任务就找到了完整的年度报告,其余4个任务已无必要,但传统框架仍会继续执行。
痛点二:静态的智能体能力
多数框架预定义了一组固定角色的智能体(如研究员、程序员)。当任务需要“金融分析师+法律顾问”这类复合能力时,系统便显得僵化,难以灵活应对。
痛点三:低效的信息传递
在多智能体协作中,上下文信息通过消息在智能体间传递,容易像“传话游戏”一样失真或遗漏。每个智能体缺乏全局视野,无法了解整体进度和其他智能体的工作成果。
高效的信息传递机制应满足:
- 高保真:信息不丢失、不失真。
- 全局共享:所有智能体都能访问统一状态。
- 低开销:避免占用大量Token进行信息复制。
AIME多智能体方案解读
其架构核心流程如下:
- 分解任务:动态规划器(主智能体)将用户请求分解为层级子任务。
- 分发任务:规划器选择下一个可执行的子任务,发送给执行工厂。
- 代理实例化:执行工厂根据任务需求创建定制化的动态执行者(子智能体)。
- 执行子任务:子智能体通过“推理-行动-观测”(ReAct)循环完成任务。
- 进度更新:子智能体通过特定工具向进度管理模块报告进度。
- 评估迭代:任务完成后,规划器更新全局状态并循环至步骤2。
该方案的核心特点是动态规划和以文件作为协作桥梁。
我的Multi-Agent实现:基于共享工作区的ReAct范式
我的实现方案与AIME理念相似,核心思想是:让共享的文件工作区成为多智能体协作的中枢,文件作为高保真、低开销的信息传递载体。
为何选择文件?
- 天然持久化:上下文不因智能体重启而丢失。
- 高效压缩:一个文件路径即可索引海量内容,避免提示词爆炸。
- 异步友好:不同智能体可在不同时间读写同一文件。
- 人类可读:便于调试和审查。
架构总览
Multi-Agent系统
┌─────────────────────────────────────────────────────────────────┐
│ 主智能体 (Planner) │
│ ┌──────────────┐ │
│ │ SubAgent池 │ │
│ │ - 深度研究员 │ │
│ │ - 数据分析师 │◄─►┌──────────────────────┐ │
│ │ - 代码工程师 │ │ 共享沙箱工作区 │ │
│ │ - ... │ │ • TODO.md │ │
│ └──────────────┘ │ • FILE_INDEX.json │ │
│ │ │ • outputs/ │ │
│ ▼ │ • research/ │ │
│ ┌──────────────────┐ │ • data/ │ │
│ │ 基础工具层 │ └──────────────────────┘ │
│ │ - 网络搜索 │ │
│ │ - 打开链接 │ │
│ │ - 代码解释器 │ │
│ └──────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
核心工作流程(四步法)
Step 1: 初始化工作区
收到任务后,主智能体首先创建标准化的工作区结构。
import os
from datetime import datetime
os.makedirs("outputs", exist_ok=True)
os.makedirs("research", exist_ok=True)
os.makedirs("data", exist_ok=True)
os.makedirs("temp", exist_ok=True)
todo_content = f"""
# 任务进度日志
## 原始任务
分析2024年全球AI投资趋势,生成可视化报告
## 任务计划
待规划...
"""
with open("TODO.md", "w") as f:
f.write(todo_content)
生成结构:
/
├── TODO.md # 核心进度跟踪文件
├── FILE_INDEX.json # 文件索引
├── outputs/ # 最终交付物
├── research/ # 研究文档
├── data/ # 数据文件
└── temp/ # 临时文件
Step 2: 动态规划
主智能体分析需求,将详细计划写入TODO.md。
Step 3: 分步执行与委托
- 简单任务:主智能体直接使用基础工具(搜索、写代码等)完成。这些工具的实现通常依赖于高效的Python脚本。
- 复杂任务:委托给相应的子智能体。子智能体会:
- 读取
TODO.md和文件索引了解上下文。
- 访问工作区中的相关文件。
- 执行任务并将结果保存到工作区。
- 更新
TODO.md中的进度。
Step 4: 汇总与交付
主智能体从工作区读取所有产出,整合成最终答案交付给用户。
示例:分析“2024年AI领域主要趋势”
- 初始化 & 规划:创建计划,委派
深度研究员搜索、数据分析师可视化、总结者生成摘要。
- 执行:
深度研究员生成报告存入research/,更新TODO.md。
数据分析师制作图表存入outputs/,更新TODO.md。
总结者生成摘要,更新TODO.md。
- 汇总:主智能体整合所有文件,生成最终报告。
核心组件详解
组件一:全局动态规划器(主智能体)
这是一个持续监控和动态调整的“指挥官”,而非一次性计划制定者。它能根据子任务执行结果的反馈,实时重新评估并调整全局计划。
组件二:SubAgent工厂
通过预定义的角色模板,实现按需实例化。每个子智能体定义包括名称、描述、系统提示词、可用工具集等。
@dataclass
class SubAgentDefinition:
name: str
description: str
system_prompt: str
available_tools: List[str]
auto_read_todo: bool = True
子智能体实例化时,会自动注入当前工作区状态(TODO.md摘要、文件列表)和具体任务描述,构成完整的执行上下文。
组件三:共享工作区(中枢神经)
所有智能体共享同一沙箱文件系统,这是实现高效AI协作的关键。其中,TODO.md是系统的“单一事实来源”,其结构示例如下:
# 任务进度日志
## 原始任务
分析2024年AI领域主要趋势...
## 执行进度
| # | 步骤描述 | 执行者 | 状态 | 产出文件 |
|---|----------|--------|------|----------|
| 1 | 搜索AI趋势报告 | 深度研究员 | ✅完成 | research/ai_trends.md |
| 2 | 数据提取与清洗 | 数据分析师 | 🔄进行中 | - |
组件四:工作区管理器
一个封装了所有工作区操作逻辑的Python类,负责生成初始化、更新进度、注册文件等代码片段。
组件五:基础工具集
- web_search:基于Tavily API进行网络搜索。
- open_link:打开URL并提取页面内容。
- code_interpreter:在e2b沙箱中执行Python代码,这是处理数据和生成文件的核心。
关键设计细节
1. 增量写入策略
对于长文档生成,引导模型分多次增量写入文件,避免因单次输出长度限制而截断。
2. 递归文件变化检测与云存储上传
代码解释器执行前后,递归扫描工作区文件变化,自动将新增或修改的文件上传至云存储(如OSS),并返回可访问的URL,实现产出物的持久化和易分享。这种文件管理和持久化机制,与云原生应用中对状态和配置的管理有异曲同工之思。
# 伪代码示例
async def code_interpreter_async(sbx, code):
original_files = await scan_all_files(sbx) # 执行前扫描
results = await execute(code) # 执行代码
new_files = await scan_all_files(sbx) # 执行后扫描
for changed_file in detect_changes(original_files, new_files):
url = await upload_to_cloud(changed_file) # 上传到云存储
results['generated_files_urls'][changed_file] = url
return results
3. XML格式的工具调用
采用XML而非JSON格式进行工具调用,以更好地处理包含复杂格式(如代码块)的参数。
<tool_call>
<function>code_interpreter</function>
<code>
import pandas as pd
df = pd.read_csv("data/trends.csv")
print(df.head())
</code>
</tool_call>
当前局限与未来方向
- 串行执行效率:当前为串行执行。未来可分析任务依赖,对独立子任务实现并行执行,需解决文件锁和冲突问题。
- 自动错误恢复:子智能体执行失败时,可引入重试机制,并根据错误信息自动调整任务。
- 缺乏跨会话记忆:工作区随会话结束而销毁。未来可持久化关键产出,支持沙箱状态重加载。
案例展示
使用本系统完成了一个端到端的复杂任务:自动编写一整本《RAG课程的教学课件》。详细执行过程与结果展示了从任务分解、多智能体协作到最终产出的完整流程。
参考资料
- Aime: Towards Fully-Autonomous Multi-Agent Framework
- ReAct: Synergizing Reasoning and Acting in Language Models
- MetaGPT: Meta Programming for Multi-Agent Collaborative Framework
- Why do multi-agent LLM systems fail?
- e2b - Code Interpreter Sandbox