---
type: study
created: 2026-08-11
updated: 2026-08-11
sensitivity: standard
status: verified
tags:
  - study
  - langchain
  - typescript
  - integrations
  - sandbox
  - deepagents
  - security
topic: LangChain JavaScript Provider Sandbox 运行时与隔离
sources:
  - https://docs.langchain.com/oss/javascript/integrations/providers/daytona
  - https://docs.langchain.com/oss/javascript/integrations/providers/deno
  - https://docs.langchain.com/oss/javascript/integrations/providers/modal
  - https://docs.langchain.com/oss/javascript/integrations/providers/node-vfs
last_verified: 2026-08-11
---
# Provider Sandbox：运行时与隔离

## 选型矩阵

| Backend | 包 / 认证 | 生命周期与资源 | 适用场景 | 生产边界 |
|---|---|---|---|---|
| Daytona | `@langchain/daytona`；`DAYTONA_API_KEY` | TypeScript/Python/JS；默认命令超时 300 秒；US/EU；支持 image/snapshot、stop/start/reconnect | 多语言开发，快速冷启动 | `close()` 永久删除；自定义 CPU/内存/盘要求 image；必须管控 image 来源与 egress |
| Deno Deploy | `@langchain/deno`；`DENO_DEPLOY_TOKEN` | Linux microVM；768–4096 MB、10 GB、2 vCPU；session 或 duration lifetime；AMS/ORD | Deno/JavaScript，HTTP/SSH/JS runtime | 默认网络完全开放；只有 duration lifetime 可重连；要显式关闭端口和限制出口 |
| Modal | `@langchain/modal`；token ID + secret | 容器、CPU/内存/GPU、volume、secret；默认 300000 ms；可按 ID/name 重连 | Python/ML/GPU | `blockNetwork` 应按需启用；volume 和 secret 是独立持久权限面；GPU 成本需限额 |
| Node VFS | `@langchain/node-vfs`；无认证 | 内存 VFS，执行时同步到 temp；默认 30 秒；无持久化和资源限额 | 本地开发、测试、无 Docker CI | **不是真正容器隔离**，文档明确不适合生产不可信代码或重计算 |

## 初始化与清理模式

四个 backend 都可作为 `createDeepAgent({ backend })` 的执行环境，也可独立 `execute()`。远程 sandbox 统一采用结构化资源管理：

```ts
const sandbox = await ProviderSandbox.create(options);
try {
  return await sandbox.execute(command);
} finally {
  await sandbox.close();
}
```

但生命周期语义不同：Daytona 的 `stop()` 可恢复、`close()` 永久删除；Deno duration sandbox 在关闭连接后仍可重连；Modal 可从 ID/name 恢复；Node VFS 使用 `stop()`，没有跨 session 持久化。不能用一个通用 `close` 假设覆盖所有 provider。

## 错误模型

远程 backend 共享的主要错误包括未初始化、重复初始化、认证失败、创建失败、sandbox 不存在、命令超时、命令失败、文件操作失败和资源超限。Daytona 另有未启动状态；Modal 另有 volume error；Node VFS 另有初始化失败和 runtime 不支持。

处理原则：

- 认证失败、无权限、无效 image 与输入错误不自动重试；
- 创建失败、429、短暂网络错误只做有界退避，并以 invocation id 去重；
- 命令超时后不能假定进程已终止，要查询或销毁 sandbox；
- 文件上传失败要校验远端哈希，不能仅以 API 200 判断完整；
- 资源超限应归类为配额/容量问题，不通过无限提高 timeout 掩盖。

## 生产隔离清单

1. 每个请求或租户使用独立 sandbox；若复用，必须清空文件、进程、环境变量和网络状态。
2. 不把宿主 secret 自动复制进 agent 环境；按工具、租户和时限注入最小凭据。
3. 默认禁网或只允许域名白名单。Deno 文档的默认 full network 尤其需要额外策略。
4. 固定受信 image digest，不运行任意用户 image；禁用特权、宿主挂载和容器 socket。
5. 同时限制 wall time、CPU、内存、磁盘、进程数、输出字节与下载大小。
6. agent 生成的 shell 视为不可信输入；记录命令摘要、sandbox id、退出码和资源使用，但脱敏 stdout/stderr。
7. 为异常退出设置后台回收器，按 sandbox id 幂等清理泄漏资源。
8. 暴露 HTTP/SSH 端口要短期授权、随机地址、到期回收，不能依赖“难猜 URL”作为认证。

## Node VFS 的准确定位

Node VFS 通过内存文件系统与临时目录同步来兼容 shell；polyfill 不可用时还会完全回退到 temp directory。它能隔离测试文件视图，却没有容器级进程、网络或资源隔离。适合 deterministic fixture、CI 和快速原型；任何来自用户或模型的任意代码都应转到真实 sandbox。
