多代理架构

OpenClaw 系统中多个 Agent 之间的任务派发、消息路由和协作机制,包括 DELEGATE 标签和子代理(subagent)两种跨代理通信方式。

概述

OpenClaw 平台支持多个独立 Agent(main、researcher、misse、nexora-docs、nexora-ops 等),每个 Agent 拥有独立的工作区、session 和模型配置。多代理架构的核心问题是:如何让一个 Agent 代理用户向另一个 Agent 派发任务并获取结果。

跨代理任务派发机制

方式一:DELEGATE 标签(推荐)

在回复中使用 DELEGATE 标签,由 Clawline 服务端自动解析并路由消息到目标 Agent:

<<DELEGATE:target-agent-name>>消息内容<</DELEGATE>>

特性:

  • Clawline 服务端自动解析,把消息路由给目标 Agent
  • 用户侧显示 [Delegated task to **xxx**] 占位符
  • 最大嵌套 3 层防无限循环
  • 一条回复里可以放多个 DELEGATE 标签,同时派发给多个 Agent
  • 消息以原始发送者(如 cobra)的身份到达目标 Agent,回复也回到该用户的 DM

示例:

<<DELEGATE:researcher>>帮我调研一下 xxx<</DELEGATE>>
<<DELEGATE:nexora-docs>>文档工作做得怎么样了?<</DELEGATE>>
<<DELEGATE:nexora-ops>>运维工作进展如何?<</DELEGATE>>

方式二:子代理模式(sessions_spawn)

通过程序化调用 sessions_spawn 创建子代理会话,适用于需要程序化控制的场景。与标签方式相比,这是底层调用方式。

实现演进(2026-04-09 ~ 04-10)

04-09:初次测试与问题发现

  • Main agent 测试 DELEGATE 标签向 researcher 发送消息
  • 发现重复发送问题:一条消息被发送了六遍,原因为前端 DELEGATE 标签解析重复触发
  • Clawline 插件从 GitHub 更新(f9027ca37b4c65),关键提交:
    • Revert 旧的 message.inject 方式
    • 新增 delegate.ts,改进 reply-dispatcher.ts,实现服务端侧 DELEGATE 派发

04-10:功能验证与消息路由调试

  • 测试 DELEGATE 标签向 researcher 发送消息,确认标签方式可正常工作
  • 发现消息路由问题:DELEGATE 以 senderId=cobra 发出,目标 Agent 的回复发到了 cobra 的 DM 而非发起者(main)的对话中
  • 确认这是预期行为:DELEGATE 是”代理用户发消息”,所以回复也回到用户与目标 Agent 的 DM 对话中
  • 成功通过 DELEGATE 同时给 nexora-docs 和 nexora-ops 派发任务,两个 Agent 均在各自的 DM 中正常回复

代理提供商(Model Provider)矩阵

04-09 main agent /models 命令显示系统支持 24 个 provider,共计 800+ 模型:

Provider模型数说明
openrouter250最大聚合
vercel-ai-gateway157Vercel 聚合
amazon-bedrock86AWS
openai40直连
azure-openai-responses40Azure
github-copilot24GitHub
google25Google AI
xai24Grok
anthropic22Claude
其他 15 个~130含 groq、mistral、huggingface 等

多用户 Session 隔离

Main agent 为不同用户维护独立 session:

  • agent:main:clawline:dm:levis — Levis 用户(使用 claude-opus-4.6)
  • agent:main:clawline:default:dm:flamingo — Flamingo 用户(使用 azure-foundry/gpt-5.4)
  • agent:main:clawline:dm:cobra — Cobra 用户(使用 claude-opus-4.6)

不同用户看到的 Agent 人设也不同(Levis 看到”小小薯条”,Flamingo 看到”Owl 🦉”),实现了完整的多租户隔离。

相关页面