E2BSandbox
在隔離的 E2B 雲端 Sandbox 中執行指令。提供安全的暫時環境,並支援掛載雲端儲存空間。有關介面詳情,請參閱 WorkspaceSandbox 介面。
安裝安裝 的直接連結
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/e2b
pnpm add @mastra/e2b
yarn add @mastra/e2b
bun add @mastra/e2b
使用方法使用方法 的直接連結
將 E2BSandbox 加入 Workspace,並指派給 Agent:
import { Agent } from '@mastra/core/agent'
import { Workspace } from '@mastra/core/workspace'
import { E2BSandbox } from '@mastra/e2b'
const workspace = new Workspace({
sandbox: new E2BSandbox({
id: 'dev-sandbox',
timeout: 60_000, // 60 second timeout (default: 5 minutes)
}),
})
const agent = new Agent({
id: 'dev-agent',
name: 'dev-agent',
model: 'anthropic/claude-opus-4-7',
workspace,
})
建構函數參數建構函數參數 的直接連結
apiKey?:
timeout?:
template?:
env?:
id?:
domain?:
apiUrl?:
accessToken?:
metadata?:
instructions?:
getInstructions() 傳回的自訂指示。字串會完全取代預設指示;函數會接收預設指示,並可按每個 request 加以擴充或自訂。傳入空字串可完全停用指示。屬性屬性 的直接連結
id:
name:
provider:
status:
processes:
背景程序背景程序 的直接連結
E2BSandbox 內置程序管理器,用於啟動及管理背景程序。程序在 E2B 雲端 Sandbox 中執行,並使用 E2B SDK 的 commands.run(),同時設定 background: true。
const sandbox = new E2BSandbox({ id: 'dev-sandbox' })
await sandbox.start()
// Spawn a background process
const handle = await sandbox.processes.spawn('node server.js', {
env: { PORT: '3000' },
onStdout: data => console.log(data),
})
// Interact with the process
console.log(handle.stdout)
await handle.sendStdin('input\n')
await handle.kill()
E2B 程序管理器支援重新連接至外部啟動或在重新連接前已啟動的程序。以 PID 呼叫 get(pid),即可連接至現有程序:
const handle = await sandbox.processes.get(existingPid)
if (handle) {
console.log(handle.stdout)
}
如需完整 API,請參閱 SandboxProcessManager 參考。
掛載雲端儲存空間掛載雲端儲存空間 的直接連結
E2B Sandbox 可以掛載 S3、GCS 及 Azure Blob 檔案系統,讓 Sandbox 內的程式能以本機目錄的方式存取雲端儲存空間。適用情況包括:
- 處理儲存在雲端 bucket 的大型資料集
- 將輸出檔案直接寫入雲端儲存空間
- 在不同 Sandbox session 之間共用資料
使用 mounts 設定使用 mounts 設定 的直接連結
掛載檔案系統最簡單的方法,是透過 Workspace 的 mounts 設定:
import { Workspace } from '@mastra/core/workspace'
import { S3Filesystem } from '@mastra/s3'
import { GCSFilesystem } from '@mastra/gcs'
import { E2BSandbox } from '@mastra/e2b'
const workspace = new Workspace({
mounts: {
'/s3-data': new S3Filesystem({
bucket: 'my-s3-bucket',
region: 'us-east-1',
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
}),
'/gcs-data': new GCSFilesystem({
bucket: 'my-gcs-bucket',
projectId: 'my-project',
credentials: JSON.parse(process.env.GCS_SERVICE_ACCOUNT_KEY),
}),
},
sandbox: new E2BSandbox({ id: 'dev-sandbox' }),
})
Sandbox 啟動時,檔案系統會自動掛載至指定路徑。之後,在 Sandbox 中執行的程式便可存取 /s3-data 及 /gcs-data 內的檔案,就像存取本機目錄一樣。
掛載的運作方式掛載的運作方式 的直接連結
E2B Sandbox 使用 FUSE(Filesystem in Userspace)掛載雲端儲存空間:
使用掛載功能時,E2B Sandbox 會自動安裝所需的 FUSE 工具。為獲得最佳效能,請預先建置已安裝這些工具的自訂 template。
自訂 template自訂 template 的直接連結
預設情況下,如未指定 template,E2BSandbox 會自動建置已安裝 s3fs 的 template,以支援掛載 S3。此 template 會快取並由不同 Sandbox instance 重複使用。
掛載 GCS 時,如尚未安裝 gcsfuse,系統會在掛載時自動安裝。如需額外工具或更快的冷啟動速度,請使用自訂 template。
使用現有 template使用現有 template 的直接連結
如已有預先建置的 template,請傳入其 ID:
const workspace = new Workspace({
sandbox: new E2BSandbox({
id: 'dev-sandbox',
template: 'my-custom-template',
}),
})
自訂預設 template自訂預設 template 的直接連結
傳入函數以自訂預設的可掛載 template。函數會接收 TemplateBuilder,並應傳回修改後的 template:
const workspace = new Workspace({
sandbox: new E2BSandbox({
template: base =>
base
.aptInstall(['ffmpeg', 'imagemagick', 'poppler-utils'])
.pipInstall(['pandas', 'numpy'])
.npmInstall(['sharp']),
}),
})
Template builder 支援串連呼叫以下操作:
aptInstall(packages)— 安裝系統套件pipInstall(packages)— 安裝 Python 套件npmInstall(packages)— 安裝 Node.js 套件runCmd(command)— 執行 shell 指令setEnvs(vars)— 設定環境變數copy(src, dest)— 將檔案複製至 template
如需可用方法的完整列表,請參閱 E2B template 文件。
預先建置 template預先建置 template 的直接連結
預設 template 會在首次使用時建置及快取。如需更快的冷啟動速度或加入 GCS 支援,你可以預先建置 template:
import { createDefaultMountableTemplate } from '@mastra/e2b'
import { Template } from 'e2b'
// Get the default mountable template (includes s3fs)
const { template, id } = createDefaultMountableTemplate()
// Build and save to E2B
const result = await Template.build(template, id)
console.log('Template ID:', result.templateId)
// Use this ID in your E2BSandbox config for instant startup
const sandbox = new E2BSandbox({
template: result.templateId,
})
如需加快 GCS 冷啟動速度,請在自訂 template 中預先安裝 gcsfuse:
const workspace = new Workspace({
sandbox: new E2BSandbox({
id: 'dev-sandbox',
template: base => base.aptInstall(['gcsfuse']),
}),
})
此步驟並非必要:如尚未安裝 gcsfuse,系統會在掛載時自動安裝。
配合 Code Mode 使用配合 Code Mode 使用 的直接連結
Code Mode 讓 Agent 編寫單一 TypeScript 程式來協調其 Tool。由於 E2B 會在遠端 micro-VM 中執行該程式,因此需要透過 transport 將程式寫入 Sandbox 檔案系統,而非主機檔案系統。@mastra/e2b 為此提供 E2BCodeModeTransport。請將它作為第二個參數傳入 createCodeMode:
import { createCodeMode } from '@mastra/core/tools'
import { E2BSandbox, E2BCodeModeTransport } from '@mastra/e2b'
const { tool, instructions } = createCodeMode(
{
tools: { getWeather, getForecast },
sandbox: new E2BSandbox({ timeout: 60_000 }),
},
new E2BCodeModeTransport(),
)
如 Sandbox 尚未執行,E2BCodeModeTransport 會自動啟動 Sandbox;它會在主機上使用 esbuild 移除 TypeScript 語法(因此不受 Sandbox Node 版本影響),在 VM 內執行 node,並於完成後清理程式檔案。@mastra/core 的預設 StdioCodeModeTransport 只適用於與主機共用檔案系統的 Sandbox,例如 LocalSandbox。