进阶 📋 6 个步骤 第 521 / 523 篇

用 Docker 官方 docker-agent 组建多智能体团队:YAML 声明式编排、MCP 工具接入与 OCI 分发实操

Docker 10-7 正式发布 docker-agent(前身 cagent):一个 YAML 声明模型与多智能体团队,root 自动委派 sub_agents,toolsets 接内置工具与任意 MCP Server,团队可 push/pull 到 OCI 注册中心分发。

2026.10.11· 24 分钟阅读· 约 2673 字· 🐳 Docker Agent / 🧩 MCP Server

十月初的 Agent 框架圈里,Docker 官方出手是一件事:10 月 7 日,Docker 工程团队把自家开源智能体框架正式定名为 docker-agent(前身 cagent),定位「AI Agent Builder and Runtime」,Docker Desktop 4.63 起直接内置。它的思路是彻底的声明式:写一个 YAML 文件,声明模型、岗位指令和可用工具集,运行时负责执行与编排——根 Agent 会自动把任务委派给专门的子 Agent,不需要你写一行 Python 编排代码。模型随意换(OpenAI、Anthropic、Gemini、Bedrock、Mistral、xAI、Docker Model Runner 本地模型),工具随挂随用(内置 think/todo/memory,也可接任意 MCP Server),团队还能像镜像一样 push/pull 到 OCI 注册中心分发。发布当天 Hacker News 登顶、GitHub Trending Go 榜前列,Apache-2.0 协议。本篇按官方 README 与 Docker 官方博客路径,从单个 Agent 跑到三人小队,再到分享分发。

🎯 适合人群:想用声明式方式组建多智能体团队、不想维护 Python 框架依赖链的开发者与平台工程师。前置要求:Docker Desktop 4.63 及以上(旧版 4.49+ 内置的是前身 cagent,配置通用);至少一家模型服务商的 API Key,或本机可用 Docker Model Runner 跑本地模型。

先理解:YAML 声明团队,运行时负责委派

一份配置文件分两大块。models 块集中声明模型:provider、model、max_tokens,多个 Agent 可复用同一个模型定义;也可以在 Agent 上直接写 openai/gpt-5-mini 这样的简写形式。agents 块声明团队:root 是对话入口,其余都是专家;root 的 sub_agents 列出可委派对象,运行时会自动给 root 配上任务转移工具——委派路由的依据是每个 Agent 的 description(告诉协调者「我擅长什么」),干活的依据是 instruction(岗位说明书)。能力通过 toolsets 挂载:内置 think(分步推理)、todo(任务清单)、memory(跨会话记忆)、filesystem、shell,或用 type 为 mcp 的 toolset 接外部 Server——支持 Docker Hub MCP 目录直连、命令拉起与网关聚合三种写法。

注意命名与版本口径。2026-10-07 发布后,Docker Desktop 4.63+ 内置插件的命令是 docker agent;独立安装渠道(Homebrew、winget、GitHub Releases 二进制)历史名为 cagent。两者 YAML 配置通用,本篇命令以 cagent 书写,内置版把命令前缀换成 docker agent 即可——具体以你安装方式对应的官方 README 为准。

Step 1:安装与鉴权

1 三个渠道任选,配一把模型 Key
# 方式一:Docker Desktop 4.63+ 已内置,升级后验证
cagent version
# (内置插件版本用:docker agent version)

# 方式二:macOS 独立安装
brew install cagent

# 方式三:Windows
winget install Docker.cagent
# 或到 GitHub Releases 下载对应平台二进制

# 配置至少一家模型的 API Key
export OPENAI_API_KEY=sk-...
# 或 ANTHROPIC_API_KEY / GOOGLE_API_KEY 等,按 models 块所用 provider 配

项目 Apache-2.0 协议,全部功能免费,成本只来自模型 API 调用。兼容性上官方有明确策略:如果你的机器上已经用 Homebrew 装过 cagent,brew 版优先于 Docker Desktop 内置版生效——避免升级后行为突变,想切内置版卸掉 brew 版即可。

💡 不想碰云 API 也能跑全套:Docker Model Runner 提供本地模型推理,models 块里 provider 指向它即可,适合内网环境与对数据出域敏感的团队——代价是本机要有像样的显存。

Step 2:跑通最小单 Agent

2 一个文件、一条命令,终端里开始对话
# hello-agent.yaml
version: "2"
models:
  gpt:
    provider: openai
    model: gpt-4o-mini
    max_tokens: 1000
agents:
  root:
    model: gpt
    description: "A friendly greeting agent"
    instruction: |
      You are a helpful assistant that creates personalized greetings.
      Ask the user their name and create a warm welcome message.
# 运行
cagent run hello-agent.yaml

# 模型可简写在 agent 上,省掉 models 块
#   model: openai/gpt-5-mini

# 问答式交互生成一份配置骨架
cagent new

# 官方目录里直接跑现成 Agent
cagent run agentcatalog/pirate

cagent run 启动终端交互界面,你说话它干活,工具调用过程实时可见。models 块集中声明的好处是换模型只改一处;快速实验用简写形式更顺手。cagent new 会问你名字、职责、用什么模型,然后生成合法配置——不确定 YAML 字段怎么写时,让它先给你打个样,再照官方配置参考改。

💡 instruction 是这套体系里真正的「编程」:把它当岗位说明书写——职责边界、输出格式、什么情况该求助,写得越具体,Agent 行为越稳定。

Step 3:组建三人故障排查小队

3 协调者 + 检索专家 + 修复执行者
# bug-investigator.yaml(节选)
version: "2"
models:
  claude:
    provider: anthropic
    model: claude-sonnet-4-0
    max_tokens: 64000
agents:
  root:
    model: claude
    description: 故障排查协调员
    instruction: |
      分析用户给出的报错与代码上下文,先定位根因。
      需要查资料时委派 researcher;确定根因后委派 fixer 修复;
      修复完成让 tester 验证。最后汇总一份带根因与验证结论的报告。
    sub_agents: [researcher, fixer]
    toolsets:
      - type: think
      - type: todo
  researcher:
    model: claude
    description: 文档与同类问题检索专家
    instruction: |
      用搜索工具查官方文档与相似 issue,返回带出处的结论。
    toolsets:
      - type: mcp
        ref: docker:duckduckgo
  fixer:
    model: claude
    description: 代码修复执行者
    instruction: |
      按 root 给出的根因修改代码,保持最小改动,说明改了什么。
    toolsets:
      - type: filesystem

运行 cagent run bug-investigator.yaml,贴一段报错试试:root 先用 think 拆解问题,需要外部信息就把检索任务转给 researcher(它只有搜索工具,改不了文件),拿到结论后把修复任务转给 fixer,最后自己汇总。官方文档的示例是一个四人版(加 tester 生成测试),架构相同——每个专家一个窄职责、一套小工具集,协调者只做拆解与汇总。

共享工作目录既是效率也是风险。fixer 的文件改动对后续所有 Agent 立即可见,这让协作顺畅,也意味着给会改文件的 Agent 配最小必要 toolset——「检索专家」不该同时拿得到删除文件的权限。安全敏感场景把写操作放在独立 Agent 里,靠 sub_agents 边界隔离。

Step 4:内置工具与 MCP 生态

4 toolsets 速查:内置四种接法
toolsets:
  - type: think                 # 分步推理
  - type: todo                  # 任务清单
  - type: memory                # 持久记忆
    path: "./memory.db"
  - type: mcp
    ref: docker:duckduckgo      # 写法A:Docker Hub MCP 目录直连
  - type: mcp                   # 写法B:命令拉起任意 MCP Server
    command: uvx
    args: ["duckduckgo-mcp-server"]
  - type: mcp                   # 写法C:docker mcp gateway 聚合多个 Server
    command: docker
    args: ["mcp", "gateway", "run", "--servers=duckduckgo"]

三种 MCP 写法按场景选:ref 最省事,前提是目录里恰好有;本地或小众 Server 用 command/args 拉起;要一次接一串 Server 就走网关聚合。10 月 7 日同步发布的 v1.149.0 还新增了从公共 GitHub 仓库加载 Skills 的能力——技能包(SKILL.md 那一套)可以直接喂给团队里的 Agent。

MCP toolset 等于把真实执行权交给模型。搜索类 Server 风险有限,但 filesystem、shell、数据库类的 toolset 务必先审一遍工具清单、收窄权限再上;生产环境优先考虑只读账号与目录白名单,别让「实验性小队」直接摸到生产数据。

Step 5:接进编辑器(ACP 协议)

5 Agent Client Protocol 让 YAML 团队住进 IDE
# Zed 编辑器 settings 里把 cagent 配成 agent server
"agent_servers": {
  "cagent": {
    "command": "cagent",
    "args": ["acp", "./your-agent.yaml"]
  }
}

# 手动验证 ACP 模式是否正常拉起
cagent acp golang_developer.yaml

ACP 解决的是「每个编辑器都要给每个 Agent 做定制集成」的碎片化问题:协议标准化之后,YAML 里定义的团队直接出现在编辑器会话里,工具调用确认、文件编辑追踪都有现成 UI。官方博客的类比很到位——这层关系类似 LSP 之于语言服务器。编码向的团队(官方仓库里就带着 golang_developer.yaml 示例)可以把「架构师审查 + 实现者改码」的组合直接挂进 Zed 用。

💡 终端交互、编辑器接入、Agent Catalog 三条使用路径共享同一份 YAML——本地调试好的配置,原封不动换个入口就能给团队用,这是声明式框架最实在的红利。

Step 6:分发团队与本地模型路线

6 像推镜像一样推 Agent
# 官方 README「Package & share」:push/pull 到任意 OCI 注册中心
# 具体命令以官方 docs 对应章节为准,形态类似:
# cagent push <registry>/<team>:<tag>
# cagent pull  <registry>/<team>:<tag>

# 本地模型:Docker Model Runner
# models 块 provider 指向 Docker Model Runner,无需云 API Key
# 代价:CPU 推理延迟明显(秒级到分钟级),建议 GPU 机型

OCI 分发是 docker-agent 与 Docker 生态咬合最深的一环:Agent 定义进注册中心后,同事 pull 下来一条命令就能跑,和拉镜像的体验完全一致。对合规团队,Docker Model Runner 路线让整条链路(配置、推理、工具执行)都不出本机。发布节奏要留意:项目十天内连发多个小版本(v1.149.0 当天新增 GitHub Skills 加载、Models Gateway 默认路由评估器、OpenAI Decisions 评估后端),跑不通先查官方 README 与 examples/ 目录是否已更新。

版本迭代期的字段漂移。YAML 字段名与命令行参数在快速迭代期可能微调,本篇示例按 2026-10-07 发布时的官方 README 与官方博客书写;遇到字段报错,对照仓库里 cagent-schema.json 与 examples/ 目录的当前版本修正,不要沿用三个月前的旧教程片段。

常见问题 FAQ

Q:和 LangGraph、CrewAI 比怎么选?docker-agent 的强项是零编排代码、配置即版本化资产、Docker 生态分发;代价是放弃了代码框架的细粒度控制。复杂状态机、自定义循环逻辑选代码框架;标准化的「协调者 + 专家」团队、想当内部工具分发,docker-agent 更省事。

Q:子 Agent 还能再带子 Agent 吗?root 经 sub_agents 委派是官方主推的两层结构,更深的嵌套以官方 Multi-Agent 配置文档为准;实践中把「深度」换成「更多平级专家」通常更好调试。

Q:不装 Docker Desktop 能用吗?能。Homebrew、winget、GitHub Releases 二进制都独立可用;但 Docker MCP 网关、Docker Model Runner、OCI 分发这些生态能力是它区别于其他框架的主场,装了 Docker Desktop 体验最完整。

Q:费用怎么算?框架本体 Apache-2.0 免费开源;成本来自你配置的模型 API 调用,或本地推理的硬件电费。子 Agent 多不代表成本翻倍——每个专家用的模型可以独立选型,检索类任务挂便宜的小模型即可。

← 返回教程中心