多代理(子代理)
多代理(子代理)
子代理让 Memo 将大任务拆分为更小的并行作业,并将结果收集回主会话。
什么是子代理#
子代理是由当前会话创建的进程内子 Memo 运行,用于执行有范围的任务。
子代理工具族:
spawn_agentsend_messagefollowup_taskwait_agentinterrupt_agentlist_agents
何时使用#
良好的用例:
- 跨多个文件夹的并行审计
- 独立调查(错误、测试、日志)
- 可以清晰分解的大任务
不太理想:
- 微小的单文件编辑
- 需要严格逐步依赖的任务
启用/禁用#
默认启用。
禁用所有子代理工具:
export MEMO_ENABLE_COLLAB_TOOLS=0
常见调优:
export MEMO_SUBAGENT_COMMAND="memo --dangerous"
export MEMO_SUBAGENT_MAX_AGENTS=4
默认值:
- 最大并发运行子代理数:
4 - 生成命令:
- 如果设置了
MEMO_SUBAGENT_COMMAND - 否则如果
dist/index.js存在则为node <cwd>/dist/index.js --dangerous - 否则为
memo --dangerous
- 如果设置了
生命周期#
典型流程:
spawn_agent创建代理并开始其第一个任务。wait_agent等待活动,直到代理达到最终状态。followup_task发送后续工作(代理空闲时启动新的一轮)。send_message排队一条消息,不启动新的轮次。interrupt_agent中断正在运行的一轮,同时保持代理可用。
行为说明#
spawn_agent
- 必填
message和task_name;可选agent_type和fork_turns - 立即以
message开始 - 如果运行代理计数达到
MEMO_SUBAGENT_MAX_AGENTS则失败
send_message
- 向代理排队一条消息,不启动新的轮次
followup_task
- 发送后续工作,目标代理空闲时启动新的一轮
wait_agent
timeout_ms被限制在10s到300s- 默认超时为
30s - 子代理结果内容会单独传递到下一次模型请求
- 如果超时前没有任何活动则返回
timed_out=true
interrupt_agent
- 中断代理当前正在运行的一轮
- 保持代理可用于后续工作
list_agents
- 列出当前代理子树中的活跃子代理
- 可选
path_prefix缩小列出范围
状态值#
主要状态:
pending_initrunninginterruptedcompletederroredshutdown
安全性#
子代理工具默认自动批准,因此任务范围很重要。
推荐:
- 保持提示具体且有边界
- 为每个子代理设置清晰的交付物
- 关闭未使用的代理以减少噪音和资源使用