- 开源工具包:MIT 许可,适用于 Python 和 TypeScript
- AGENTS.md:代理指令的开放标准
- Agent Skills:代理知识和操作的开放标准
- 任何模型,任何沙箱:无供应商锁定
- 开放协议:MCP、A2A、Agent Protocol
- 可自托管:LangSmith Deployments 可以自托管,因此内存保留在您的基础设施中
与 Claude Managed Agents 比较
您要部署的内容
deepagents deploy 打包您的代理配置并将其部署为 LangSmith Deployment。您可以通过几个参数配置您的代理:
| 参数 | 描述 |
|---|---|
model | 要使用的 LLM。任何提供商都适用 — 参见 支持的模型。 |
AGENTS.md | 系统提示,在每个会话开始时加载。 |
skills | 用于专门知识和操作的 Agent Skills。技能会同步到沙箱中,以便代理在运行时执行它们。参见 技能文档。 |
user/ | 每个用户可写的内存。如果 user 文件夹中存在 AGENTS.md 模板,代理会为每个用户播种该模板(如果文件夹为空,代理会创建一个空的 AGENTS.md)。在运行时可写。通过内存中间件预加载到代理的上下文中。 |
mcp.json | MCP 工具(HTTP/SSE)。参见 MCP 文档。 |
subagents/ | 主代理可以委派给的专门 子代理。每个子目录包含自己的 deepagents.toml、AGENTS.md,并可选地包含一个 skills 文件夹。参见 子代理。 |
sandbox | 可选的执行环境。线程范围的沙箱按线程提供,并在服务器重启时重新创建。如果需要跨线程持久的沙箱状态,请使用 scope = "assistant"。参见 沙箱提供商。 |
安装
安装 CLI 或直接使用uvx 运行:
用法
deepagents deploy 在当前目录中查找 deepagents.toml。传递 --config 以使用不同的路径:
deepagents deploy 每次调用都会完全重建并创建新修订版。使用 deepagents dev 进行本地迭代。
deepagents init
搭建新的代理项目:
| 文件 | 用途 |
|---|---|
deepagents.toml | 代理配置 — 名称、模型、可选沙箱 |
AGENTS.md | 会话开始时加载的系统提示 |
.env | API 密钥模板 (GOOGLE_API_KEY, LANGSMITH_API_KEY 等) |
mcp.json | MCP 服务器配置(默认为空) |
skills/ | Agent Skills 的目录,包含示例 review 技能 |
AGENTS.md 并运行 deepagents deploy。可选地添加一个 user/ 目录,其中包含每个用户的内存模板 — 参见 用户内存。
项目布局
部署命令使用基于约定的项目布局。将以下文件与您的deepagents.toml 放在一起,它们将自动被发现:
| 文件/目录 | 用途 | 必需 |
|---|---|---|
AGENTS.md | 代理的 内存。提供持久上下文(项目约定、指令、偏好),在启动时始终加载。运行时只读。 | 是 |
skills/ | 技能 定义的目录。每个子目录应包含一个 SKILL.md 文件。运行时只读。 | 否 |
user/ | 每个用户可写的内存。如果 user 文件夹中存在 AGENTS.md 模板,代理会为每个用户播种该模板(如果文件夹为空,代理会创建一个空的 AGENTS.md)。运行时可写。通过内存中间件预加载到代理的上下文中。 | 否 |
subagents/ | 主代理可以委派给的 子代理。每个子目录必须包含 deepagents.toml、AGENTS.md,并可选地包含一个 skills 文件夹。在捆绑时自动发现。 | 否 |
mcp.json | MCP 服务器配置。在部署环境中仅支持 http 和 sse 传输。 | 否 |
.env | 环境变量(API 密钥、机密)。放置在项目根目录的 deepagents.toml 旁边。 | 否 |
配置文件
deepagents.toml 配置代理的身份和沙箱环境。仅 [agent] 部分是必需的。[sandbox] 部分是可选的,默认为无沙箱。
[agent]
(必需)
核心代理身份。有关模型选择和提供商配置的更多信息,请参阅 支持的模型。
部署代理的名称。用作 LangSmith 中的助手标识符。
deepagents.toml
name 字段是整个配置文件中唯一必需的值。其他所有内容都有默认值。- 技能:捆绑器递归扫描
skills/,跳过隐藏的点文件,并捆绑其余部分。 - 用户内存:如果
user/存在,则将单个AGENTS.md捆绑为每个用户的内存(如果存在user/AGENTS.md,则使用其内容,否则为空)。在运行时,每个用户获得自己的副本(在首次访问时播种,永不覆盖)。代理可以读取和写入此文件。 - 子代理:如果
subagents/存在,捆绑器会扫描有效的子目录(每个必须包含deepagents.toml和AGENTS.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" 时,沙箱被禁用。如果您需要代码执行或技能脚本执行,则使用沙箱。
沙箱提供商。确定容器运行的位置。支持的值:
"none"、"daytona"、"modal"、"runloop"、"langsmith"(私有测试版)。有关提供商详细信息,请参阅 沙箱集成。沙箱环境的提供商特定模板名称。
沙箱容器的基础 Docker 镜像。
沙箱生命周期范围。
"thread" 为每个对话创建一个沙箱。"assistant" 为同一助手的所有对话共享一个沙箱。"thread"(默认):每个对话获得自己的沙箱。不同的线程获得不同的沙箱,但相同的线程在轮次之间重用其沙箱。当每个对话应从干净的环境开始时使用此选项。"assistant":所有对话共享一个沙箱。文件、安装的包和其他状态在对话之间持久存在。当代理维护一个长期存在的工作区(如克隆的存储库)时使用此选项。
.env
在 deepagents.toml 旁边放置一个 .env 文件,其中包含您的 API 密钥:
沙箱提供商
在deepagents.toml 中设置 [sandbox].provider,并将所需的环境变量添加到 .env。有关可用提供商,请参阅 沙箱集成。有关生命周期模式和 SDK 用法,请参阅 沙箱。
部署端点
部署的服务器公开:- MCP:从其他代理将您的代理作为工具调用
- A2A:通过 A2A 协议进行多代理编排
- Agent Protocol:用于构建 UI 的标准 API
- Human-in-the-loop:敏感操作的批准门
- Memory:短期和长期内存访问
示例
一个具有每个用户偏好的内容撰写代理,代理可以更新这些偏好:deepagents.toml
deepagents.toml
用户内存
用户内存为每个用户提供他们自己可写的AGENTS.md,该文件在对话之间持久存在。要启用它,请在项目根目录创建一个 user/ 目录:
user/ 目录存在(即使为空),每个用户都会在 /memories/user/AGENTS.md 处获得自己的 AGENTS.md。如果提供了 user/AGENTS.md,则其内容用作初始模板;否则播种一个空文件。
在运行时,用户内存通过自定义身份验证(runtime.server_info.user.identity)按用户范围限定。当用户首次与代理交互时,其命名空间会使用模板进行播种。后续交互会重用现有文件 — 代理的编辑会持久存在,重新部署永远不会覆盖用户数据。
工作原理
- 捆绑时间 — 捆绑器读取
user/AGENTS.md(或使用空字符串)并将其包含在种子有效负载中。 - 运行时(首次访问) — 当代理首次看到
user_id时,它会将AGENTS.md模板写入该用户命名空间下的存储。现有条目永远不会被覆盖。 - 预加载 — 用户
AGENTS.md被传递给内存中间件,因此代理在每次对话开始时都能在上下文中看到其内容。 - 可写 — 代理可以使用
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/ 目录。每个子目录都是一个子代理:
| 文件 | 用途 |
|---|---|
deepagents.toml | 包含 [agent].name 和 [agent].description 的子代理配置 |
AGENTS.md | 子代理的系统提示 |
| 文件 | 用途 |
|---|---|
skills/ | 子代理特定技能(带有 SKILL.md 文件) |
mcp.json | MCP 服务器配置(仅 HTTP/SSE;stdio 被拒绝) |
子代理配置
子代理的唯一标识符。必须在所有子代理中唯一。
此子代理的功能。主代理使用此信息来决定何时委派。必须非空。
provider:model 格式的模型覆盖。省略以继承主代理的模型。subagents/researcher/deepagents.toml
继承
子代理默认继承主代理的一些属性:| 属性 | 继承 | 说明 |
|---|---|---|
| 模型 | 是 | 在子代理的 deepagents.toml 中使用 model 覆盖 |
| 工具 | 是 | 通过向子代理目录添加 mcp.json 来覆盖 |
| 技能 | 否 | 在子代理自己的 skills/ 目录中显式声明 |
内存隔离
每个子代理在/memories/subagents/<name>/ 处获得一个专用的、隔离的内存命名空间。子代理的 AGENTS.md 和技能在部署时播种到此命名空间中。
| 路径 | 主代理 | 子代理 |
|---|---|---|
/memories/AGENTS.md | 读取 | 无访问权限 |
/memories/skills/** | 读取 | 无访问权限 |
/memories/user/** | 读取 + 写入 | 无访问权限 |
/memories/subagents/<name>/** | 读取 | 读取 + 写入 |
示例
一个将研究委派给专门子代理的上市策略代理:deepagents.toml
subagents/researcher/deepagents.toml
subagents/researcher/AGENTS.md
限制
- MCP:仅 HTTP/SSE。 Stdio 传输在捆绑时被拒绝。
- 无自定义 Python 工具。 使用 MCP 服务器公开自定义工具逻辑。
通过 MCP 将这些文档 连接到 Claude、VSCode 等,以获取实时答案。

