メインコンテンツへ移動

IsolatedVmCodeModeTransport

beta

この機能はベータ版です。API が安定するまでは、メジャーバージョンを上げずに破壊的変更が行われる可能性があります。

IsolatedVmCodeModeTransport クラスは、Code mode プログラムを isolated-vm を利用したプロセス内の V8 isolate で実行します。isolate が実行境界となるため、Workspace Sandbox は不要です。プログラムからファイルシステム、ネットワーク、プロセス、モジュールにはアクセスできません。利用できる機能は、ホスト上の実際の Tool を呼び出す external_* 関数だけです。

デフォルトの StdioCodeModeTransport と異なり、この Transport はプロセスを生成せず、一時ファイルも書き込みません。そのため、OS レベルのサンドボックスを利用できないサーバーレス環境やマルチテナントホストに適しています。

インストール
インストールへの直接リンク

npm install @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() の第2引数として渡します。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?:

IsolatedVmCodeModeTransportOptions
isolate の設定。
IsolatedVmCodeModeTransportOptions

memoryLimitMb?:

number
V8 isolate のヒープ上限(MiB)。プログラムが上限を超えると終了し、Tool はエラー結果を返します。

動作の仕組み
動作の仕組みへの直接リンク

実行のたびに、独自のヒープを持つ新しい isolate が作成されます。TypeScript はホスト上で esbuild によって除去され、その後プログラムが isolate 内で評価されます。各 external_* 呼び出しでは、双方向とも JSON 文字列として isolate の境界を越えるため、ホストオブジェクトへの参照がモデル作成のコードに漏れることはありません。許可リスト、Tool の検証、Request Context、トレースは、ほかの Transport と同様にすべてホスト上で実行されます。

createCodeMode() に設定した timeout は、非同期処理の停止と同期処理の無限ループの両方に適用されます。isolate は実行のたびに破棄されます。