Deep Agents Code 使用 沙箱作为工具 模式: dcode 进程(LLM 循环、内存、工具调度)在您的机器上运行,但代理工具调用(read_file, write_file, execute等)指向远程沙箱,而不是您的本地文件系统。要将文件放入沙箱,请使用 设置脚本 或提供商的文件传输 API(请参阅 使用文件).
要深入了解沙箱架构、集成模式和安全性最佳实践,请参阅 沙箱.
Install provider dependency
每个提供商都作为可选扩展提供。在会话中使用 /install安装,或从 shell 使用 dcode --install:
LangSmith
安装时默认包含 deepagents-code。无需额外安装。
AgentCore
/install agentcore
dcode --install agentcore
Daytona
/install daytona
dcode --install daytona
Modal
/install modal
dcode --install modal
Runloop
/install runloop
dcode --install runloop
Vercel
/install vercel
dcode --install vercel
要一次性安装所有沙箱提供商的支持,请在会话中使用 all-sandboxes extra: /install all-sandboxes ,或 dcode --install all-sandboxes 从 shell。
Set provider credentials
LangSmith
AgentCore
# Only when using temporary/STS credentials:
Daytona
Modal
modal setup
Runloop
Vercel
在 Vercel 上运行时, OIDC 凭据会自动使用。
Run Deep Agents Code with a sandbox
LangSmith
dcode --sandbox langsmith
AgentCore
dcode --sandbox agentcore
Daytona
dcode --sandbox daytona
Modal
dcode --sandbox modal
Runloop
dcode --sandbox runloop
Vercel
dcode --sandbox vercel
沙箱标志和示例
| 标志 | 描述 |
|---|---|
--sandbox TYPE | 要使用的沙箱提供商。内置: langsmith, agentcore, daytona, modal, runloop, vercel (默认: none). Third-party 和 config-declared 也接受提供商。传递 --sandbox 不带值以使用 [sandboxes].default 来自您的配置 |
--sandbox-id ID | 按 ID 重用现有沙箱,而不是创建新的。跳过创建和清理。仅适用于支持按 ID 重新连接的提供商。请参阅您的沙箱文档了解更多 |
--sandbox-snapshot-name NAME | 使用或创建沙箱快照。支持 langsmith 和 runloop (以及任何宣传快照支持的第三方提供商)。不能与 --sandbox-id |
--sandbox-setup PATH | 创建时在沙箱内运行的设置脚本路径 |
每个提供商都在沙箱中公开一个默认工作目录。设置脚本和 execute 命令从该目录运行,除非被覆盖:
| 提供商 | 工作目录 |
|---|---|
| LangSmith | /root |
| AgentCore | /tmp |
| Daytona | /home/daytona |
| Modal | /workspace |
| Runloop | /home/user |
| Vercel | /vercel/sandbox |
Examples:
# Create a new LangSmith sandbox
dcode --sandbox langsmith
# Reuse an existing sandbox (skips creation and cleanup)
dcode --sandbox runloop --sandbox-id dbx_abc123
# Run a setup script after sandbox creation
dcode --sandbox modal --sandbox-setup ./setup.sh
# Use the provider set as [sandboxes].default in config
dcode --sandbox
可插拔提供商
上述六个内置提供商并非唯一选项。Deep Agents Code 从三个来源发现沙盒提供商,因此您可以使用其他软件包提供的提供商,或声明您自己的提供商而无需更改 Deep Agents Code:
- **内置提供商** — 上述精选集合,安装为
deepagents-codeextras. - **第三方提供商** — 通过 Python 入口点由其他已安装的包发布。
- **配置声明的提供商** — 在您的中定义
~/.deepagents/config.toml.
当两个来源定义相同的提供商名称时, **配置优先于第三方入口点,第三方入口点优先于内置**,因此您的配置文件始终可以覆盖发现。
第三方提供商
包可以在 deepagents_code.sandbox_providers 入口点组下发布沙盒提供商。安装这样的包后,其提供商可供 --sandbox 自动使用——无需配置:
# Install the package that publishes the provider, then use it
dcode --sandbox acme
例如, langchain-e2b 包发布了一个 e2b 提供商(参见 沙盒集成)。将其作为包安装,设置您的凭证,然后选择它:
dcode --install langchain-e2b --package
dcode --sandbox e2b
如果您传递的 --sandbox 名称未安装或未声明,Deep Agents Code 会列出可用的提供商并解释如何安装或配置缺失的提供商。
Publishing a sandbox provider
要分发提供商以便用户安装您的包后可以运行 dcode --sandbox <name> ,请实现一个 SandboxProvider 子类并将其注册到 deepagents_code.sandbox_providers 入口点组下。
重写 metadata 属性,以便 Deep Agents Code 可以在不实例化提供商的情况下显示您的工作目录和功能标志:
from deepagents_code.integrations.sandbox_provider import (
SandboxInstallHint,
SandboxProvider,
SandboxProviderMetadata,
)
class AcmeProvider(SandboxProvider):
@property
def metadata(self) -> SandboxProviderMetadata:
return SandboxProviderMetadata(
name="acme",
working_dir="/workspace",
install=SandboxInstallHint(kind="package", name="acme-dcode-sandbox"),
supports_sandbox_id=True,
supports_snapshot_name=False,
)
def get_or_create(self, *, sandbox_id=None, **kwargs):
... # return a SandboxBackendProtocol
def delete(self, *, sandbox_id, **kwargs):
...
实现 get_or_create 和 delete;异步调用者由基类处理。然后在您包的 pyproject.toml:
[project.entry-points."deepagents_code.sandbox_providers"]
acme = "acme_sandbox.provider:AcmeProvider"
中注册入口点 metadata 属性被省略时,使用通用默认值(/workspace,不支持快照)。
配置声明的提供商
对于您不想打包的内部或本地提供商,请在 [sandboxes.providers] in ~/.deepagents/config.toml下声明它。这类似于 任意模型提供商 并使用相同的 class_path 信任模型。
[sandboxes]
# Used when you run `dcode --sandbox` with no value.
default = "acme"
[sandboxes.providers.acme]
# Required: the provider class to import, in module.path:ClassName format.
class_path = "acme_sandbox.provider:AcmeProvider"
# Default working directory inside the sandbox.
working_dir = "/workspace"
# Package suggested when the provider's dependencies are missing.
package = "acme-dcode-sandbox"
# Capability flags (defaults: supports_sandbox_id = true, supports_snapshot_name = false).
supports_sandbox_id = true
supports_snapshot_name = false
# Extra keyword arguments forwarded to the provider's get_or_create().
[sandboxes.providers.acme.params]
region = "us-east-1"
格式的完全限定提供商类名。Deep Agents Code 导入并实例化此类作为提供商。 module.path:ClassName 沙盒内的默认工作目录。默认为
沙盒内的默认工作目录。默认为 /workspace.
当提供商的依赖缺失时,在错误消息中建议的包名。
是否 --sandbox-id 允许此提供商的重新附加。默认为 true.
是否 --sandbox-snapshot-name 允许此提供商。默认为 false.
转发到提供商的额外关键字参数 get_or_create().
重复使用内置提供程序名称的配置项 **会覆盖** 该内置提供程序,同时保留其依赖项预检。格式错误的条目会跳过并发出警告,而不是导致启动崩溃。
设置脚本
使用 --sandbox-setup 可在沙箱创建后在其中运行 shell 脚本。这对于克隆仓库、安装依赖项和配置环境变量很有用。
#!/bin/bash
set -e
# Clone repository using GitHub token
git clone https://x-access-token:${GITHUB_TOKEN}@github.com/username/repo.git $HOME/workspace
cd $HOME/workspace
# Make environment variables persistent
cat >> ~/.bashrc <<'EOF'
cd $HOME/workspace
EOF
source ~/.bashrc
Deep Agents Code 使用本地环境变量展开 ${VAR} 在设置脚本中的引用。请将密钥存储在本地 .env 文件中,以便设置脚本访问。