본문으로 건너뛰기

격리된Vm코드모드전송

:::실험적

이 기능은 베타 버전입니다. API가 안정될 때까지 주요 버전 변경 없이 주요 변경 사항이 발생할 수 있습니다.

:::

IsolatedVmCodeModeTransport 클래스는 Code mode 프로그램을 isolated-vm이 지원하는 프로세스 내 V8 isolate에서 실행합니다. isolate 자체가 실행 경계이므로 Workspace Sandbox가 필요하지 않습니다. 프로그램은 파일 시스템, 네트워크, 프로세스 또는 모듈에 액세스할 수 없습니다. 유일한 기능은 호스트의 실제 Tool을 다시 호출하는 external_* 함수입니다. 기본 StdioCodeModeTransport와 달리 이 transport는 프로세스를 생성하거나 임시 파일을 쓰지 않으므로 OS 수준의 Sandbox를 사용할 수 없는 서버리스 및 멀티테넌트 호스트에 적합합니다.

설치
설치에 대한 직접 링크

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()의 두 번째 인수로 전달합니다. 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 경계를 통과하므로, 호스트 객체 참조가 Model이 작성한 코드로 유출되지 않습니다. 허용 목록, Tool 검증, 요청 컨텍스트, tracing은 다른 transport와 마찬가지로 모두 호스트에서 실행됩니다. createCodeMode()에 구성된 timeout은 비동기 중단과 동기 무한 루프 모두에 적용되며, isolate는 실행할 때마다 폐기됩니다.