IsolatedVmCodeModeTransport
此功能目前處於 beta 階段。在 API 穩定之前,即使主版本號未有提升,也可能出現破壞性變更。
IsolatedVmCodeModeTransport 類別會在進程內的 V8 isolate 中執行 Code mode 程式,並由 isolated-vm 提供支援。isolate 是執行邊界,因此毋須 Workspace Sandbox:程式無法存取檔案系統、網絡、進程或模組。它唯一具備的功能是 external_* 函式,這些函式會回呼主機上的實際 Tools。
與預設的 StdioCodeModeTransport 相比,此 Transport 不會產生進程或寫入暫存檔案,因此非常適合無法使用作業系統層級 Sandbox 的無伺服器及多租戶主機。
安裝安裝 的直接連結
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/isolated-vm
pnpm add @mastra/isolated-vm
yarn add @mastra/isolated-vm
bun add @mastra/isolated-vm
isolated-vm 是原生附加元件。它為常見平台提供預先建置的二進制檔案,因此安裝時通常毋須額外設定。只有在平台沒有相符的預先建置版本、需要改為從源碼編譯時,才需要 C++ 工具鏈。
在 Node.js 20 或之後的版本,必須使用 --no-node-snapshot 旗標啟動主機進程,否則建立 isolate 會令進程崩潰。如果缺少此旗標,建構函式會拋出錯誤。啟動伺服器時傳入此旗標,或透過 NODE_OPTIONS 設定:
NODE_OPTIONS=--no-node-snapshot npm run dev
用法用法 的直接連結
將 Transport 作為第二個引數傳入 createCodeMode()。毋須 sandbox:
import { createCodeMode } from '@mastra/core/tools'
import { IsolatedVmCodeModeTransport } from '@mastra/isolated-vm'
const { tool, instructions } = createCodeMode(
{ tools: { getTopProducts, getProductRatings } },
new IsolatedVmCodeModeTransport({ memoryLimitMb: 128 }),
)
建構函式參數建構函式參數 的直接連結
options?:
memoryLimitMb?:
運作方式運作方式 的直接連結
每次執行都會建立一個擁有獨立堆積記憶體的新 isolate。主機會使用 esbuild 移除 TypeScript 語法,然後在 isolate 內評估程式。每次 external_* 呼叫都會以雙向 JSON 字串跨越 isolate 邊界,因此主機物件的參考不會洩漏至模型編寫的代碼中。允許清單、Tool 驗證、請求內容及追蹤全部都在主機上執行,與其他 Transport 相同。
在 createCodeMode() 設定的 timeout 同時適用於非同步停滯及同步無限循環,而 isolate 會在每次執行後釋放。