Skip to main content
Deep Agents Deploy 获取您的代理配置,并将其部署为 LangSmith Deployment:一个水平可扩展的服务器,包含 30 多个端点,包括 MCP、A2A、Agent Protocol、Human-in-the-loop 和内存 API。基于开放标准构建:
  • 开源工具包:MIT 许可,适用于 PythonTypeScript
  • AGENTS.md:代理指令的开放标准
  • Agent Skills:代理知识和操作的开放标准
  • 任何模型,任何沙箱:无供应商锁定
  • 开放协议MCPA2AAgent Protocol
  • 可自托管:LangSmith Deployments 可以自托管,因此内存保留在您的基础设施中
Deep Agents Deploy 目前处于测试阶段。API、配置格式和行为可能在版本之间发生变化。有关详细的变更日志,请参阅 releases 页面

与 Claude Managed Agents 比较

Deep Agents DeployClaude Managed Agents
模型支持OpenAI、Anthropic、Google、Bedrock、Azure、Fireworks、Baseten、OpenRouter、更多仅 Anthropic
工具包开源 (MIT)专有,闭源
沙箱LangSmith、Daytona、Modal、Runloop 或 自定义内置
MCP 支持
技能支持
AGENTS.md 支持
代理端点MCP、A2A、Agent Protocol专有
自托管

您要部署的内容

deepagents deploy 打包您的代理配置并将其部署为 LangSmith Deployment。您可以通过几个参数配置您的代理:
参数描述
model要使用的 LLM。任何提供商都适用 — 参见 支持的模型
AGENTS.md系统提示,在每个会话开始时加载。
skills用于专门知识和操作的 Agent Skills。技能会同步到沙箱中,以便代理在运行时执行它们。参见 技能文档
user/每个用户可写的内存。如果 user 文件夹中存在 AGENTS.md 模板,代理会为每个用户播种该模板(如果文件夹为空,代理会创建一个空的 AGENTS.md)。在运行时可写。通过内存中间件预加载到代理的上下文中。
mcp.jsonMCP 工具(HTTP/SSE)。参见 MCP 文档
subagents/主代理可以委派给的专门 子代理。每个子目录包含自己的 deepagents.tomlAGENTS.md,并可选地包含一个 skills 文件夹。参见 子代理
sandbox可选的执行环境。线程范围的沙箱按线程提供,并在服务器重启时重新创建。如果需要跨线程持久的沙箱状态,请使用 scope = "assistant"。参见 沙箱提供商

安装

安装 CLI 或直接使用 uvx 运行:
uv tool install deepagents-cli

用法

deepagents init [name] [--force]                                             # 搭建新项目
deepagents dev  [--config deepagents.toml] [--port 2024] [--allow-blocking]  # 捆绑并本地运行
deepagents deploy [--config deepagents.toml] [--dry-run]                     # 捆绑并部署
默认情况下,deepagents deploy 在当前目录中查找 deepagents.toml。传递 --config 以使用不同的路径:
deepagents deploy --config path/to/deepagents.toml
deepagents deploy 每次调用都会完全重建并创建新修订版。使用 deepagents dev 进行本地迭代。

deepagents init

搭建新的代理项目:
deepagents init my-agent
这将创建以下文件:
文件用途
deepagents.toml代理配置 — 名称、模型、可选沙箱
AGENTS.md会话开始时加载的系统提示
.envAPI 密钥模板 (GOOGLE_API_KEY, LANGSMITH_API_KEY 等)
mcp.jsonMCP 服务器配置(默认为空)
skills/Agent Skills 的目录,包含示例 review 技能
初始化后,使用您的代理指令编辑 AGENTS.md 并运行 deepagents deploy。可选地添加一个 user/ 目录,其中包含每个用户的内存模板 — 参见 用户内存

项目布局

部署命令使用基于约定的项目布局。将以下文件与您的 deepagents.toml 放在一起,它们将自动被发现:
my-agent/
├── deepagents.toml
├── AGENTS.md
├── .env
├── mcp.json
├── skills/
│   ├── code-review/
│   │   └── SKILL.md
│   └── data-analysis/
│       └── SKILL.md
├── subagents/
│   └── researcher/
│       ├── deepagents.toml
│       └── AGENTS.md
└── user/
    └── AGENTS.md
文件/目录用途必需
AGENTS.md代理的 内存。提供持久上下文(项目约定、指令、偏好),在启动时始终加载。运行时只读。
skills/技能 定义的目录。每个子目录应包含一个 SKILL.md 文件。运行时只读。
user/每个用户可写的内存。如果 user 文件夹中存在 AGENTS.md 模板,代理会为每个用户播种该模板(如果文件夹为空,代理会创建一个空的 AGENTS.md)。运行时可写。通过内存中间件预加载到代理的上下文中。
subagents/主代理可以委派给的 子代理。每个子目录必须包含 deepagents.tomlAGENTS.md,并可选地包含一个 skills 文件夹。在捆绑时自动发现。
mcp.jsonMCP 服务器配置。在部署环境中仅支持 httpsse 传输。
.env环境变量(API 密钥、机密)。放置在项目根目录的 deepagents.toml 旁边。
mcp.json 必须仅包含使用 httpsse 传输的服务器。使用 stdio 传输的服务器在部署环境中不受支持,因为没有本地进程可以生成。在部署之前,将 stdio 服务器转换为 HTTP 或 SSE。

配置文件

deepagents.toml 配置代理的身份和沙箱环境。仅 [agent] 部分是必需的。[sandbox] 部分是可选的,默认为无沙箱。

[agent]

(必需) 核心代理身份。有关模型选择和提供商配置的更多信息,请参阅 支持的模型
name
string
required
部署代理的名称。用作 LangSmith 中的助手标识符。
model
string
default:"anthropic:claude-sonnet-4-6"
provider:model 格式的模型标识符。参见 支持的模型
deepagents.toml
[agent]
name = "research-assistant"
model = "google_genai:gemini-3.1-pro-preview"
name 字段是整个配置文件中唯一必需的值。其他所有内容都有默认值。
技能、用户内存、子代理、MCP 服务器和模型依赖项从项目布局中自动检测:
  • 技能:捆绑器递归扫描 skills/,跳过隐藏的点文件,并捆绑其余部分。
  • 用户内存:如果 user/ 存在,则将单个 AGENTS.md 捆绑为每个用户的内存(如果存在 user/AGENTS.md,则使用其内容,否则为空)。在运行时,每个用户获得自己的副本(在首次访问时播种,永不覆盖)。代理可以读取和写入此文件。
  • 子代理:如果 subagents/ 存在,捆绑器会扫描有效的子目录(每个必须包含 deepagents.tomlAGENTS.md)。主代理接收一个 task 工具,通过名称将工作委派给每个子代理。参见 子代理
  • MCP 服务器:如果 mcp.json 存在,它将包含在部署中,并添加 langchain-mcp-adapters 作为依赖项。仅支持 HTTP/SSE 传输(stdio 在捆绑时被拒绝)。
  • 模型依赖项model 字段中的 provider: 前缀决定了所需的 langchain-* 包(例如,google_genai -> langchain-google-genai)。这包括子代理配置中指定的模型。
  • 沙箱依赖项[sandbox].provider 值映射到其合作伙伴包(例如,daytona -> langchain-daytona)。

[sandbox]

配置代理运行代码的隔离执行环境。沙箱提供一个带有文件系统和 shell 访问权限的容器,因此不受信任的代码无法影响主机。有关支持的提供商和高级沙箱配置,请参阅 沙箱 当省略或设置为 provider = "none" 时,沙箱被禁用。如果您需要代码执行或技能脚本执行,则使用沙箱。
provider
string
default:"none"
沙箱提供商。确定容器运行的位置。支持的值:"none""daytona""modal""runloop""langsmith"(私有测试版)。有关提供商详细信息,请参阅 沙箱集成
template
string
default:"deepagents-deploy"
沙箱环境的提供商特定模板名称。
image
string
default:"python:3"
沙箱容器的基础 Docker 镜像。
scope
string
default:"thread"
沙箱生命周期范围。"thread" 为每个对话创建一个沙箱。"assistant" 为同一助手的所有对话共享一个沙箱。
范围行为:
  • "thread"(默认):每个对话获得自己的沙箱。不同的线程获得不同的沙箱,但相同的线程在轮次之间重用其沙箱。当每个对话应从干净的环境开始时使用此选项。
  • "assistant":所有对话共享一个沙箱。文件、安装的包和其他状态在对话之间持久存在。当代理维护一个长期存在的工作区(如克隆的存储库)时使用此选项。

.env

deepagents.toml 旁边放置一个 .env 文件,其中包含您的 API 密钥:
# 必需 — 模型提供商密钥
ANTHROPIC_API_KEY=sk-...
OPENAI_API_KEY=sk-...
# ...等等。

# 部署和 LangSmith 沙箱必需
LANGSMITH_API_KEY=lsv2_...

# 可选 — 沙箱提供商密钥
DAYTONA_API_KEY=...
MODAL_TOKEN_ID=...
MODAL_TOKEN_SECRET=...
RUNLOOP_API_KEY=...

沙箱提供商

deepagents.toml 中设置 [sandbox].provider,并将所需的环境变量添加到 .env。有关可用提供商,请参阅 沙箱集成。有关生命周期模式和 SDK 用法,请参阅 沙箱

部署端点

部署的服务器公开:
  • MCP:从其他代理将您的代理作为工具调用
  • A2A:通过 A2A 协议进行多代理编排
  • Agent Protocol:用于构建 UI 的标准 API
  • Human-in-the-loop:敏感操作的批准门
  • Memory:短期和长期内存访问

示例

一个具有每个用户偏好的内容撰写代理,代理可以更新这些偏好:
deepagents.toml
[agent]
name = "deepagents-deploy-content-writer"
model = "google_genai:gemini-3.1-pro-preview"
my-content-writer/
├── deepagents.toml
├── AGENTS.md
├── skills/
│   ├── blog-post/SKILL.md
│   └── social-media/SKILL.md
└── user/
    └── AGENTS.md          # 可写 — 代理学习用户偏好
一个使用 LangSmith 沙箱运行代码的编码代理:
deepagents.toml
[agent]
name = "deepagents-deploy-coding-agent"
model = "google_genai:gemini-3.1-pro-preview"

[sandbox]
provider = "langsmith"
template = "coding-agent"
image = "python:3.12"
一个将研究委派给子代理的 GTM 策略代理:
my-gtm-agent/
├── deepagents.toml
├── AGENTS.md
├── skills/
│   └── competitor-analysis/
│       └── SKILL.md
└── subagents/
    └── market-researcher/
        ├── deepagents.toml
        ├── AGENTS.md
        └── skills/
            └── analyze-market/
                └── SKILL.md

用户内存

用户内存为每个用户提供他们自己可写的 AGENTS.md,该文件在对话之间持久存在。要启用它,请在项目根目录创建一个 user/ 目录:
user/
└── AGENTS.md          # 可选 — 如果未提供,则播种为空
如果 user/ 目录存在(即使为空),每个用户都会在 /memories/user/AGENTS.md 处获得自己的 AGENTS.md。如果提供了 user/AGENTS.md,则其内容用作初始模板;否则播种一个空文件。 在运行时,用户内存通过自定义身份验证(runtime.server_info.user.identity)按用户范围限定。当用户首次与代理交互时,其命名空间会使用模板进行播种。后续交互会重用现有文件 — 代理的编辑会持久存在,重新部署永远不会覆盖用户数据。

工作原理

  1. 捆绑时间 — 捆绑器读取 user/AGENTS.md(或使用空字符串)并将其包含在种子有效负载中。
  2. 运行时(首次访问) — 当代理首次看到 user_id 时,它会将 AGENTS.md 模板写入该用户命名空间下的存储。现有条目永远不会被覆盖。
  3. 预加载 — 用户 AGENTS.md 被传递给内存中间件,因此代理在每次对话开始时都能在上下文中看到其内容。
  4. 可写 — 代理可以使用 edit_file 工具更新它。共享的 AGENTS.md 文件和技能文件夹是只读的。

权限

路径可写范围
/memories/AGENTS.md共享(助手范围)
/memories/skills/**共享(助手范围)
/memories/user/**每个用户(user_id 范围)
/memories/subagents/<name>/**仅子代理可写每个子代理(隔离)

用户身份

user_id 通过自定义身份验证从 runtime.user.identity 解析。平台会自动注入经过身份验证的用户身份 — 无需通过 configurable 传递。如果不存在经过身份验证的用户,则该调用将优雅地跳过用户内存功能。

子代理

子代理让主代理将专门的任务委派给隔离的子代理。每个子代理都有自己的系统提示、可选的技能和可选的 MCP 工具。主代理接收一个 task 工具,该工具通过名称将工作分派给子代理。 有关子代理为何有用以及它们在 SDK 级别如何工作的背景,请参阅 子代理

目录结构

在项目根目录创建一个 subagents/ 目录。每个子目录都是一个子代理:
my-agent/
├── deepagents.toml
├── AGENTS.md
└── subagents/
    ├── researcher/
    │   ├── deepagents.toml       # 名称、描述、可选模型覆盖
    │   ├── AGENTS.md             # 子代理系统提示
    │   ├── skills/               # 可选 — 子代理特定技能
    │   │   └── analyze-market/
    │   │       └── SKILL.md
    │   └── mcp.json              # 可选 — HTTP/SSE MCP 工具
    └── writer/
        ├── deepagents.toml
        └── AGENTS.md
每个子代理子目录必须包含:
文件用途
deepagents.toml包含 [agent].name[agent].description 的子代理配置
AGENTS.md子代理的系统提示
每个子代理子目录可以包含:
文件用途
skills/子代理特定技能(带有 SKILL.md 文件)
mcp.jsonMCP 服务器配置(仅 HTTP/SSE;stdio 被拒绝)

子代理配置

name
string
required
子代理的唯一标识符。必须在所有子代理中唯一。
description
string
required
此子代理的功能。主代理使用此信息来决定何时委派。必须非空。
model
string
provider:model 格式的模型覆盖。省略以继承主代理的模型。
subagents/researcher/deepagents.toml
[agent]
name = "researcher"
description = "研究市场趋势、竞争对手和目标受众"
model = "anthropic:claude-haiku-4-5-20251001"

继承

子代理默认继承主代理的一些属性:
属性继承说明
模型在子代理的 deepagents.toml 中使用 model 覆盖
工具通过向子代理目录添加 mcp.json 来覆盖
技能在子代理自己的 skills/ 目录中显式声明

内存隔离

每个子代理在 /memories/subagents/<name>/ 处获得一个专用的、隔离的内存命名空间。子代理的 AGENTS.md 和技能在部署时播种到此命名空间中。
路径主代理子代理
/memories/AGENTS.md读取无访问权限
/memories/skills/**读取无访问权限
/memories/user/**读取 + 写入无访问权限
/memories/subagents/<name>/**读取读取 + 写入

示例

一个将研究委派给专门子代理的上市策略代理:
deepagents.toml
[agent]
name = "gtm-strategist"
model = "anthropic:claude-sonnet-4-6"
subagents/researcher/deepagents.toml
[agent]
name = "researcher"
description = "研究市场趋势、竞争对手和目标受众,为 GTM 策略提供信息"
model = "anthropic:claude-haiku-4-5-20251001"
subagents/researcher/AGENTS.md
# 市场研究员

您是市场研究专家。您的工作是收集和综合
市场数据以支持上市决策。

## 重点领域
- 市场规模:TAM、SAM、SOM 估算
- 竞争对手分析:产品定位、定价、市场份额
- 受众细分:人口统计、心理统计、购买行为

限制

  • MCP:仅 HTTP/SSE。 Stdio 传输在捆绑时被拒绝。
  • 无自定义 Python 工具。 使用 MCP 服务器公开自定义工具逻辑。