跳至主要內容

IsolatedVmCodeModeTransport

beta

此功能目前為 beta 版。在 API 穩定之前,可能會出現未提升主要版本號的破壞性變更。

IsolatedVmCodeModeTransport 類別會在行程內的 V8 isolate 中執行 Code mode 程式,底層採用 isolated-vm。isolate 本身就是執行邊界,因此不需要 Workspace Sandbox:程式無法存取檔案系統、網路、行程或模組。程式唯一能使用的功能是 external_* 函式,這些函式會回呼主機上的實際 Tool。

相較於預設的 StdioCodeModeTransport,此 transport 不會建立行程,也不會寫入暫存檔案,因此很適合無法使用作業系統層級Sandbox隔離的 serverless 與多租戶主機。

安裝
「安裝」的直接連結

npm install @mastra/isolated-vm

isolated-vm 是原生附加元件。它為常見平台提供預先建置的二進位檔,因此安裝時通常不需要額外設定。只有在平台找不到相符的預先建置版本、必須改為從原始碼編譯時,才需要 C++ 工具鏈。

在 Node.js 20 以上版本中,主機行程啟動時必須加上 --no-node-snapshot 旗標,否則建立 isolate 會使行程當機。缺少此旗標時,constructor 會擲回錯誤。啟動伺服器時請傳入此旗標,或透過 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 }),
)

Constructor 參數
「Constructor 參數」的直接連結

options?:

IsolatedVmCodeModeTransportOptions
isolate 的設定。
IsolatedVmCodeModeTransportOptions

memoryLimitMb?:

number
V8 isolate 的 heap 上限(MiB)。程式超過此上限時會終止,且 Tool 會回傳錯誤結果。

運作方式
「運作方式」的直接連結

每次執行都會建立一個擁有獨立 heap 的全新 isolate。TypeScript 會先在主機上由 esbuild 移除型別,再於 isolate 內執行程式。每次 external_* 呼叫跨越 isolate 邊界時,雙向資料都會使用 JSON 字串,因此主機物件的參照不會洩漏到模型撰寫的程式碼中。允許清單、Tool 驗證、request context 與 tracing 都會在主機上執行,與其他 transport 相同。

createCodeMode() 設定的 timeout 同時適用於非同步卡住與同步無限迴圈;每次執行後都會銷毀 isolate。