メインコンテンツまでスキップ
このページは機械翻訳であり、十分なレビューを経ていません。英語の原文が正となります。セキュリティ、プライバシー、データの取り扱い、コンプライアンス、ライセンスに関する記述は、技術レビューが完了するまで英語のまま掲載しています。 英語の原文を読む

構築中の 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 と同じです。

動作の確認​

  1. 拒否されるはずのリクエストを発行します。decision.allowed === false と理由が返ることを確認します。
  2. 通過するはずのリクエストを発行します。decision.allowed === true と allow の監査イベントが記録されることを確認します。
  3. Hosted モードでは、ダッシュボード -> Audit を開き、イベントがストリーム表示されるのを確認します。

よくある次のステップ​

リファレンス​