構築中の Node.js AI アプリを統制する
使用する適用面: Node.js SDK、Vercel AI SDK ミドルウェア、フレームワークインテグレーション 対応モード: Local Hosted Hybrid プラン: Free(基本) Solo Teams(ホスト型の機能)
実施すること
Node.js アプリのすべての LLM 呼び出しとツール呼び出しの前に、guard() チェックを置きます。単独でも、Vercel AI SDK ミドルウェアとしても動作し、ポリシーを適用して監査証跡を書き込みます。
このパスが適している理由
- LLM を呼び出す Node.js または Next.js アプリを書いていて、コードを自分で管理している場合、SDK ならきめ細かい制御ができます。
- Vercel AI SDK を使っている場合は、
generateText/streamTextを透過的にラップするミドルウェアを提供しています。 - コードを変更できない場合は、ゲートウェイを使用してください。
- アプリが Python の場合は、Python AI アプリを統制するを参照してください。
このアプローチを使うべきでない場合
SDK では、判定を行う各箇所でコードの変更が必要です。すべての LLM リクエストをコードなしでインターセプトしたい場合は、ベース URL をゲートウェイに切り替えてください。
5分でできるセットアップ
Control Zero レジストリを 1 回設定します。.npmrc に @controlzero:registry=https://npm.controlzero.ai を追加するか、npm config set @controlzero:registry https://npm.controlzero.ai を実行してください。これは @controlzero スコープ全体の npm install と npx に適用されます。
npm install @controlzero/sdk
スタンドアロンの guard
import { Client } from '@controlzero/sdk';
const cz = await Client.create({ apiKey: process.env.CONTROLZERO_API_KEY });
const decision = cz.guard('shell', {
args: { command: 'rm -rf /' },
});
if (!decision.allowed) {
throw new Error(`Blocked by policy: ${decision.reason}`);
}
ブロックされた呼び出しでの期待される出力:
Error: Blocked by policy: Destructive shell commands are not allowed.
Vercel AI SDK ミドルウェア
英語の原文 -- 翻訳は技術レビュー待ちです
The Node SDK ships a vercelAiMiddleware factory that plugs into the AI SDK's
wrapLanguageModel API, so every generateText / streamText call is
policy-checked before it reaches the provider and audited after.
import { Client } from '@controlzero/sdk';
import { vercelAiMiddleware } from '@controlzero/sdk/integrations';
import { generateText, wrapLanguageModel } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';
const cz = await Client.create({ apiKey: process.env.CONTROLZERO_API_KEY });
const model = wrapLanguageModel({
model: anthropic('claude-sonnet-4-6'),
middleware: vercelAiMiddleware(cz, { agentId: 'my-bot' }),
});
const { text } = await generateText({
model,
prompt: 'What is in my .env file?',
});
拒否された場合、ミドルウェアはプロバイダーに到達する前に例外を送出します。個々のツール呼び出しをガードするには、同じ @controlzero/sdk/integrations エントリポイントの governedTool(cz, name, tool) で各 AI SDK ツールをラップします。詳細は Vercel AI SDK インテグレーションのページを参照してください。
Local モード(アカウント不要)
const cz = new Client({ policyFile: './policy.yaml' });
YAML の形式は Python SDK と同じです。
動作の確認
- 拒否されるはずのリクエストを発行します。
decision.allowed === falseと理由が返ることを確認します。 - 通過するはずのリクエストを発行します。
decision.allowed === trueとallowの監査イベントが記録されることを確認します。 - Hosted モードでは、ダッシュボード -> Audit を開き、イベントがストリーム表示されるのを確認します。
よくある次のステップ
- 「Vercel AI SDK を使っている」 -> Vercel AI SDK インテグレーション
- 「プロンプトを PII から保護したい」 -> DLP カバレッジ
- 「これをチーム全体に広げたい」 -> デバイスの登録
- 「完全にオフラインで実行したい」 -> 完全オフラインで実行する
リファレンス
- 適用面のページ: Node.js SDK
- コンセプト: ポリシー、プロジェクト
- API: API リファレンス