使用 Docker 构建和运行智能体 AI 应用程序
了解如何使用 Docker Model Runner 和 MCP Toolkit 创建 AI 智能体应用程序。
Tip本指南使用熟悉的 Docker Compose 工作流来编排智能体 AI 应用程序。为了更顺畅的开发体验,请查看 Docker Agent,这是一个专为简化运行和管理 AI 智能体而构建的智能体运行时。
简介
智能体应用程序正在改变软件的构建方式。这些应用不仅仅是响应,它们还能决策、规划和行动。它们由模型驱动,由智能体编排,并与 API、工具和服务实时集成。
所有这些新型智能体应用程序,无论其功能如何,都共享一个共同的架构。这是一个由三个核心组件构建而成的新型技术栈:
- 模型 (Models):这些是您的 GPT、CodeLlama、Mistral 等模型。它们负责推理、编写和规划。它们是智能背后的引擎。
- 智能体 (Agent):这是逻辑所在之处。智能体接收目标,将其分解,并找出如何完成它。它们编排一切。它们与 UI、工具、模型和网关进行通信。
- MCP 网关 (MCP gateway):这是将您的智能体与外部世界(包括 API、工具和服务)连接起来的桥梁。它提供了一种标准方式,让智能体通过模型上下文协议 (MCP) 调用能力。
Docker 通过将模型、工具网关统一到使用 Docker Compose 的开发者友好型工作流中,使这个 AI 驱动的技术栈更简单、更快速、更安全。
本指南将引导您了解智能体开发的核心组件,并展示 Docker 如何通过以下工具将它们全部连接在一起:
- Docker Model Runner 让您可以通过简单的命令和兼容 OpenAI 的 API 在本地运行 LLM。
- Docker MCP Catalog and Toolkit 帮助您发现并安全地运行外部工具,如 API 和数据库,使用模型上下文协议 (MCP)。
- Docker MCP Gateway 让您编排和管理 MCP 服务器。
- Docker Compose 是将所有内容连接在一起的工具,让您可以用一个文件定义和运行多容器应用程序。
在本指南中,您将使用您已经熟悉的相同 Compose 工作流。然后,您将深入研究 Compose 文件、Dockerfile 和应用程序,了解它们是如何协同工作的。
先决条件
要遵循本指南,您需要:
- 安装 Docker Desktop 4.43 或更高版本
- 启用 Docker Model Runner
- 至少满足以下硬件规格:
- 显存 (VRAM):3.5 GB
- 存储空间:2.31 GB
步骤 1:克隆示例应用程序
您将使用一个现有的示例应用程序,该程序演示了如何使用 Docker 的 AI 功能将模型连接到外部工具。
$ git clone https://github.com/docker/compose-for-agents.git
$ cd compose-for-agents/adk/
步骤 2:在本地运行应用程序
您的机器必须满足必要的硬件要求才能使用 Docker Compose 在本地运行整个应用程序堆栈。这使您可以端到端地测试应用程序,包括模型和 MCP 网关,而无需在云中运行。这个特定的示例使用 Gemma 3 4B 模型,上下文大小为 10000。
硬件要求:
- 显存 (VRAM):3.5 GB
- 存储空间:2.31 GB
如果您的机器超过这些要求,可以考虑使用更大的上下文大小或更大的模型来运行应用程序,以提高智能体的性能。您可以轻松地在 compose.yaml 文件中更新模型和上下文大小。
要在本地运行应用程序,请按照以下步骤操作:
-
在克隆的仓库的
adk/目录中,在终端中运行以下命令来构建并运行应用程序:$ docker compose up第一次运行此命令时,Docker 会从 Docker Hub 拉取模型,这可能需要一些时间。
-
访问 http://localhost:8080。在提示符中输入一个正确或不正确的事实,然后按回车键。一个智能体会搜索 DuckDuckGo 来验证它,另一个智能体会修改输出。
-
完成后,在终端中按
ctrl-c停止应用程序。
步骤 3:审查应用程序环境
您可以在 adk/ 目录中找到 compose.yaml 文件。在文本编辑器中打开它以查看服务是如何定义的。
services:
adk:
build:
context: .
ports:
# 暴露 web 界面的端口
- "8080:8080"
environment:
# 将 adk 指向 MCP 网关
- MCPGATEWAY_ENDPOINT=http://mcp-gateway:8811/sse
depends_on:
- mcp-gateway
models:
gemma3:
endpoint_var: MODEL_RUNNER_URL
model_var: MODEL_RUNNER_MODEL
mcp-gateway:
# mcp-gateway 保护您的 MCP 服务器
image: docker/mcp-gateway:latest
use_api_socket: true
command:
- --transport=sse
# 添加您想使用的任何 MCP 服务器
- --servers=duckduckgo
models:
gemma3:
# 启动 Docker Model Runner 时预拉取模型
model: ai/gemma3:4B-Q4_0
context_size: 10000 # 3.5 GB VRAM
# 增加上下文大小以处理搜索结果
# context_size: 131000 # 7.6 GB VRAM该应用程序包含三个主要组件:
adk服务,这是运行智能体 AI 应用程序的 Web 应用程序。此服务与 MCP 网关和模型通信。mcp-gateway服务,这是将应用程序连接到外部工具和服务的 MCP 网关。models块,定义了应用程序要使用的模型。
当您检查 compose.yaml 文件时,您会注意到模型有两个显著的元素:
adk服务中的服务级models块- 顶级的
models块
这两个块 together 让 Docker Compose 自动启动您的 ADK Web 应用并将其连接到指定的 LLM。
Tip在寻找更多模型吗?查看 Docker AI 模型目录。
当检查 compose.yaml 文件时,您会注意到网关服务是一个 Docker 维护的镜像,docker/mcp-gateway:latest。此镜像是 Docker 的开源 MCP Gateway,它使您的应用程序能够连接到 MCP 服务器,这些服务器暴露了模型可以调用的工具。在此示例中,它使用 duckduckgo MCP 服务器 来执行网络搜索。
Tip在寻找更多 MCP 服务器吗?查看 Docker MCP 目录。
只需在 Compose 文件中几行指令,您就能够运行并连接智能体 AI 应用程序的所有必要服务。
除了 Compose 文件之外,Dockerfile 和它创建的 entrypoint.sh 脚本在构建和运行时连接 AI 技术栈方面也扮演着重要角色。您可以在 adk/ 目录中找到 Dockerfile。在文本编辑器中打开它。
# 使用 Python 3.11 slim 镜像作为基础
FROM python:3.13-slim
ENV PYTHONUNBUFFERED=1
RUN pip install uv
WORKDIR /app
# 安装系统依赖
COPY pyproject.toml uv.lock ./
RUN --mount=type=cache,target=/root/.cache/uv \
UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy \
uv pip install --system .
# 复制应用程序代码
COPY agents/ ./agents/
RUN python -m compileall -q .
COPY <<EOF /entrypoint.sh
#!/bin/sh
set -e
if test -f /run/secrets/openai-api-key; then
export OPENAI_API_KEY=$(cat /run/secrets/openai-api-key)
fi
if test -n "${OPENAI_API_KEY}"; then
echo "Using OpenAI with ${OPENAI_MODEL_NAME}"
else
echo "Using Docker Model Runner with ${MODEL_RUNNER_MODEL}"
export OPENAI_BASE_URL=${MODEL_RUNNER_URL}
export OPENAI_MODEL_NAME=openai/${MODEL_RUNNER_MODEL}
export OPENAI_API_KEY=cannot_be_empty
fi
exec adk web --host 0.0.0.0 --port 8080 --log_level DEBUG
EOF
RUN chmod +x /entrypoint.sh
# 创建非 root 用户
RUN useradd --create-home --shell /bin/bash app \
&& chown -R app:app /app
USER app
ENTRYPOINT [ "/entrypoint.sh" ]entrypoint.sh 有五个关键的环境变量:
MODEL_RUNNER_URL:由 Compose 注入(通过服务级models:块),指向您的 Docker Model Runner HTTP 端点。MODEL_RUNNER_MODEL:由 Compose 注入,用于选择在 Model Runner 中启动哪个模型。OPENAI_API_KEY:如果您在 Compose 文件中定义了openai-api-key密钥,Compose 会将其挂载到/run/secrets/openai-api-key。入口点脚本读取该文件并将其导出为OPENAI_API_KEY,导致应用程序使用托管的 OpenAI 而不是 Model Runner。OPENAI_BASE_URL:当没有真实密钥存在时,此变量被设置为MODEL_RUNNER_URL,以便 ADK 的兼容 OpenAI 的客户端将请求发送到 Docker Model Runner。OPENAI_MODEL_NAME:当回退到 Model Runner 时,模型会加上openai/前缀,以便客户端选择正确的模型别名。
这些变量 together 让相同的 ADK Web 服务器代码能够无缝地针对以下两种情况进行目标定位:
- 托管的 OpenAI:如果您提供了
OPENAI_API_KEY(以及可选的OPENAI_MODEL_NAME) - Model Runner:通过将
MODEL_RUNNER_URL和MODEL_RUNNER_MODEL重新映射到 OpenAI 客户端期望的变量中
步骤 4:审查应用程序
adk Web 应用程序是一个智能体实现,它通过环境变量和 API 调用连接到 MCP 网关和模型。它使用 ADK (Agent Development Kit) 来定义一个名为 Auditor 的根智能体,该智能体协调两个子智能体 Critic 和 Reviser 来验证和优化模型生成的答案。
这三个智能体是:
- Critic:使用工具集(如 DuckDuckGo)验证事实性声明。
- Reviser:根据 Critic 提供的验证结果编辑答案。
- Auditor:一个更高级别的智能体,它对 Critic 和 Reviser 进行排序。它作为入口点,评估 LLM 生成的答案,验证它们,并优化最终输出。
应用程序的所有行为都在 agents/ 目录下的 Python 中定义。以下是重要文件的细分:
agents/agent.py:定义了 Auditor,一个 SequentialAgent,它将 Critic 和 Reviser 智能体链接在一起。该智能体是应用程序的主入口点,负责使用真实世界的验证工具审核 LLM 生成的内容。agents/sub_agents/critic/agent.py:定义了 Critic 智能体。它加载语言模型(通过 Docker Model Runner),设置智能体的名称和行为,并连接到 MCP 工具(如 DuckDuckGo)。agents/sub_agents/critic/prompt.py:包含 Critic 提示,该提示指示智能体使用外部工具提取和验证声明。agents/sub_agents/critic/tools.py:定义了 MCP 工具集配置,包括解析mcp/字符串、创建工具连接以及处理 MCP 网关通信。agents/sub_agents/reviser/agent.py:定义了 Reviser 智能体,它接收 Critic 的发现并最小程度地重写原始答案。它还包括回调以清理 LLM 输出并确保其格式正确。agents/sub_agents/reviser/prompt.py:包含 Reviser 提示,该提示指示智能体根据已验证的声明结果修改答案文本。
MCP 网关通过 MCPGATEWAY_ENDPOINT 环境变量进行配置。在本例中,是 http://mcp-gateway:8811/sse。这允许应用程序使用服务器发送事件 (SSE) 与 MCP 网关容器通信,该容器本身充当中介,访问像 DuckDuckGo 这样的外部工具服务。
总结
基于智能体的 AI 应用程序正在成为一种强大的新型软件架构。在本指南中,您探索了一个模块化的、思维链系统,其中 Auditor 智能体协调 Critic 和 Reviser 的工作,以事实核查和优化模型生成的答案。这种架构展示了如何以结构化、模块化的方式将本地模型推理与外部工具集成相结合。
您还了解了 Docker 如何通过提供一套支持智能体 AI 开发的工具来简化这一过程:
- Docker Model Runner:通过兼容 OpenAI 的 API 在本地运行和服务开源模型。
- Docker MCP Catalog and Toolkit:启动和管理遵循模型上下文协议 (MCP) 标准的工具集成。
- Docker MCP Gateway:编排和管理 MCP 服务器,以将智能体连接到外部工具和服务。
- Docker Compose:使用单个文件定义和运行多容器智能体 AI 应用程序,使用相同的工作流。
借助这些工具,您可以在整个过程中使用相同的一致工作流高效地开发和测试智能体 AI 应用程序。