文档

多代理(子代理)

多代理(子代理)

子代理让 Memo 将大任务拆分为更小的并行作业,并将结果收集回主会话。

什么是子代理#

子代理是由当前会话创建的进程内子 Memo 运行,用于执行有范围的任务。

子代理工具族:

  • spawn_agent
  • send_message
  • followup_task
  • wait_agent
  • interrupt_agent
  • list_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

生命周期#

典型流程:

  1. spawn_agent 创建代理并开始其第一个任务。
  2. wait_agent 等待活动,直到代理达到最终状态。
  3. followup_task 发送后续工作(代理空闲时启动新的一轮)。
  4. send_message 排队一条消息,不启动新的轮次。
  5. interrupt_agent 中断正在运行的一轮,同时保持代理可用。

行为说明#

spawn_agent

  • 必填 messagetask_name;可选 agent_typefork_turns
  • 立即以 message 开始
  • 如果运行代理计数达到 MEMO_SUBAGENT_MAX_AGENTS 则失败

send_message

  • 向代理排队一条消息,不启动新的轮次

followup_task

  • 发送后续工作,目标代理空闲时启动新的一轮

wait_agent

  • timeout_ms 被限制在 10s300s
  • 默认超时为 30s
  • 子代理结果内容会单独传递到下一次模型请求
  • 如果超时前没有任何活动则返回 timed_out=true

interrupt_agent

  • 中断代理当前正在运行的一轮
  • 保持代理可用于后续工作

list_agents

  • 列出当前代理子树中的活跃子代理
  • 可选 path_prefix 缩小列出范围

状态值#

主要状态:

  • pending_init
  • running
  • interrupted
  • completed
  • errored
  • shutdown

安全性#

子代理工具默认自动批准,因此任务范围很重要。

推荐:

  • 保持提示具体且有边界
  • 为每个子代理设置清晰的交付物
  • 关闭未使用的代理以减少噪音和资源使用