Deno Deploy 提供 Linux microVM 用于隔离代码执行。最适合 Deno 和 JavaScript 工作负载。
设置
npm install @langchain/deno
yarn add @langchain/deno
pnpm add @langchain/deno
身份验证
从以下位置获取您的令牌 app.deno.com → 设置 → 组织令牌。
或直接传递凭证:
const sandbox = await DenoSandbox.create({
auth: { token: "your-token-here" },
});
与 deepagents 配合使用
const sandbox = await DenoSandbox.create({
memoryMb: 1024,
lifetime: "10m",
});
try {
const agent = createDeepAgent({
model: new ChatAnthropic({ model: "claude-sonnet-4-20250514" }),
systemPrompt: "You are a coding assistant with sandbox access.",
backend: sandbox,
});
const result = await agent.invoke({
messages: [{ role: "user", content: "Create a hello world Deno app and run it" }],
});
} finally {
await sandbox.close();
}
独立使用
const sandbox = await DenoSandbox.create({
memoryMb: 1024,
lifetime: "10m",
});
const result = await sandbox.execute("deno --version");
console.log(result.output);
await sandbox.close();
配置
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
memoryMb | number | 768 | 内存(MB)(768-4096) |
lifetime | `"session" \ | string` | "session" |
region | string | - | 区域。选项: `"ams" \ |
可用区域
| 区域代码 | 位置 |
|---|---|
ams | 阿姆斯特丹 |
ord | 芝加哥 |
生命周期选项
- -
"session"(default): Sandbox shuts down when you close/dispose the client - - 时长字符串:保持沙箱存活特定时间(例如,
"5m","30s")
访问 Deno SDK
如需高级功能,请访问底层 Deno SDK:
const denoSandbox = await DenoSandbox.create();
const sdk = denoSandbox.sandbox;
// Expose HTTP port
const url = await sdk.exposeHttp({ port: 3000 });
// Expose SSH
const ssh = await sdk.exposeSsh();
// Evaluate JavaScript
const result = await sdk.eval("1 + 2");
// Set environment variables
await sdk.env.set("API_KEY", "secret");
// Shell template literals
const output = await sdk.sh`echo "Hello from Deno!"`.text();
// Start a JavaScript runtime
const runtime = await sdk.createJsRuntime({ entrypoint: "server.ts" });
重新连接到现有沙箱
重新连接需要基于时长的生命周期(不是 "session"):
// Create with duration lifetime
const sandbox = await DenoSandbox.create({
memoryMb: 1024,
lifetime: "30m",
});
const sandboxId = sandbox.id;
await sandbox.close(); // Close connection, sandbox keeps running
// Later: reconnect
const reconnected = await DenoSandbox.connect(sandboxId);
const result = await reconnected.execute("ls -la");
工厂函数
// Create new sandbox per invocation
const factory = createDenoSandboxFactory({ memoryMb: 1024 });
// Or reuse an existing sandbox across invocations
const sandbox = await DenoSandbox.create();
const reuseFactory = createDenoSandboxFactoryFromSandbox(sandbox);
错误处理
try {
await sandbox.execute("some command");
} catch (error) {
if (error instanceof DenoSandboxError) {
switch (error.code) {
case "NOT_INITIALIZED":
await sandbox.initialize();
break;
case "COMMAND_TIMEOUT":
console.error("Command took too long");
break;
case "AUTHENTICATION_FAILED":
console.error("Check your Deno Deploy token");
break;
}
}
}
错误代码
| 代码 | 描述 |
|---|---|
NOT_INITIALIZED | 沙箱未初始化 - 请调用 initialize() |
ALREADY_INITIALIZED | 无法初始化两次 |
AUTHENTICATION_FAILED | Deno Deploy 令牌无效或缺失 |
SANDBOX_CREATION_FAILED | 创建沙箱失败 |
SANDBOX_NOT_FOUND | 沙箱 ID 未找到或已过期 |
COMMAND_TIMEOUT | 命令执行超时 |
COMMAND_FAILED | 命令执行失败 |
FILE_OPERATION_FAILED | File read/write failed |
RESOURCE_LIMIT_EXCEEDED | 超出 CPU、内存或存储限制 |
限制和约束
| 约束 | 值 |
|---|---|
| 最小内存 | 768 MB |
| 最大内存 | 4096 MB (4 GB) |
| 磁盘空间 | 10 GB |
| vCPU | 2 |
| 工作目录 | /home/app |
| 网络访问 | 完全(默认) |
环境变量
| 变量 | 描述 |
|---|---|
DENO_DEPLOY_TOKEN | Deno Deploy 组织访问令牌 |