メインコンテンツへスキップ

セッション追跡

RAILSessionは、構成可能な深層評価頻度と品質閾値アラートを使用して、マルチターンの会話全体でスコアを追跡します。
import { RAILSession } from '@responsible-ai-labs/rail-score';

const session = new RAILSession(client, {
  deepEvalFrequency: 5,    // 5ターンごとに深層評価
  contextWindow: 10,        // 最後の10ターンを追跡
  qualityThreshold: 7.0,    // スコアが閾値を下回ったときに深層評価をトリガー
});

// 会話ターンを追加
const result = await session.addTurn("AIの応答内容");
console.log(result.rail_score.score);

// セッションメトリクス
const metrics = session.getMetrics();
console.log(`平均: ${metrics.averageScore}`);
console.log(`最小: ${metrics.minScore}, 最大: ${metrics.maxScore}`);
console.log(`合格率: ${metrics.passingRate}`);
console.log(`ターン数: ${metrics.turnCount}`);

for (const [dim, avg] of Object.entries(metrics.dimensionAverages)) {
  console.log(`  ${dim}: ${avg.toFixed(1)}`);
}

// 新しい会話のためにリセット
session.reset();

ポリシーエンジン

4つのモードでコンテンツ品質ポリシーを強制します: LOG_ONLY, BLOCK, REGENERATE, CUSTOM
import { PolicyEngine, RAILBlockedError } from '@responsible-ai-labs/rail-score';

const policy = new PolicyEngine(client, {
  mode: "BLOCK",
  thresholds: { safety: 7.0, privacy: 7.0 },
});

try {
  const result = await policy.enforce("チェックするコンテンツ");
  console.log(result.evaluation.rail_score.score);
  console.log(result.passed);             // true/false
  console.log(result.failedDimensions);   // ["safety"] または []
} catch (error) {
  if (error instanceof RAILBlockedError) {
    console.log(`ブロックされました: ${error.message}`);
  }
}

// ランタイム再構成
policy.setMode("LOG_ONLY");
policy.setThresholds({ safety: 8.0 });

// CUSTOMモード — 独自の強制ロジック
const customPolicy = new PolicyEngine(client, {
  mode: "CUSTOM",
  thresholds: { safety: 7.0 },
  customCallback: async (content, evalResult) => {
    return `[レビュー済み] ${content}`;
  },
});

ミドルウェア

任意の非同期関数をRAIL評価の前後でラップします:
import { RAILMiddleware } from '@responsible-ai-labs/rail-score';

const middleware = new RAILMiddleware(client, {
  inputThresholds:  { safety: 5.0 },
  outputThresholds: { safety: 7.0, privacy: 7.0 },
  onInputEval:  (result) => console.log(`入力スコア: ${result.rail_score.score}`),
  onOutputEval: (result) => console.log(`出力スコア: ${result.rail_score.score}`),
});

const safeLLMCall = middleware.wrap(async (input) => {
  return await myLLM.generate(input);
});

const output = await safeLLMCall("ユーザーメッセージ");

次は何か

プロバイダーとリファレンス

LLMプロバイダーラッパー、エラーハンドリング、およびTypeScript型。

概念: ポリシーエンジン

ポリシールールがどのように機能するか。