LESSON 30分

ストーリー

田中VPoE
プロンプトセキュリティの対策は理解できたな。だが、セキュリティはプロンプトだけの話ではない。モデルそのものをどう管理するかも重要だ
あなた
モデルの管理というと、バージョン管理のようなことですか?
田中VPoE
それも含むが、もっと広い話だ。どのモデルを選定するか、誰がアクセスできるか、どうデプロイするか、いつ廃止するか。モデルのライフサイクル全体を統制する仕組みが「モデルガバナンス」だ
あなた
従来のソフトウェアのガバナンスとはどう違うのでしょう?
田中VPoE
従来のソフトウェアは「コードが決定論的に動作する」が前提だ。AIモデルは確率的に動作するため、同じ入力でも異なる出力が出る。この非決定論的な性質をどう統制するかが、AIガバナンス固有の課題だ

モデルライフサイクル管理

AIモデルは「導入して終わり」ではなく、継続的に管理・評価・更新が必要です。

ライフサイクルの5フェーズ

選定 → 評価 → デプロイ → 監視 → 廃止
 │      │       │        │      │
 ▼      ▼       ▼        ▼      ▼
要件定義  安全性   段階的    性能劣化  代替モデル
コスト分析 バイアス  ロールアウト 異常検知  への移行
ライセンス 性能測定  カナリア   ドリフト  データ削除

各フェーズの詳細

フェーズ活動成果物承認者
選定要件定義、候補モデル比較、ライセンス確認モデル選定書AI責任者 + 法務
評価安全性テスト、バイアス検証、性能ベンチマーク評価レポートAI倫理委員会
デプロイステージング検証、カナリアリリース、本番展開デプロイ手順書SRE + AI責任者
監視性能メトリクス監視、ドリフト検出、ユーザーフィードバック月次モニタリングレポートAI運用チーム
廃止代替モデル移行、データクリーンアップ、利用者通知廃止計画書AI責任者

モデル選定の評価基準

// モデル選定の評価マトリクス
interface ModelEvaluationCriteria {
  // 機能面
  accuracy: number;          // 精度(ベンチマークスコア)
  latency: number;           // 推論レイテンシ(ms)
  contextWindow: number;     // コンテキストウィンドウサイズ
  languageSupport: string[]; // 対応言語

  // セキュリティ面
  dataResidency: string;     // データの保管場所
  certifications: string[];  // SOC2, ISO27001等
  encryptionAtRest: boolean; // 保存時暗号化
  encryptionInTransit: boolean; // 通信時暗号化

  // コスト面
  inputTokenCost: number;    // 入力トークン単価
  outputTokenCost: number;   // 出力トークン単価
  monthlyEstimate: number;   // 月額概算

  // ガバナンス面
  licenseType: string;       // ライセンス形態
  auditCapability: boolean;  // 監査機能の有無
  dataRetention: string;     // データ保持ポリシー
  sla: number;               // SLA(稼働率%)
}

// 評価結果の比較例
const modelComparison = [
  {
    name: "OpenAI GPT-4o",
    dataResidency: "米国",
    certifications: ["SOC2 Type II"],
    auditCapability: true,
    sla: 99.9,
    monthlyEstimate: 500000,  // 円
  },
  {
    name: "Azure OpenAI (Japan East)",
    dataResidency: "日本",
    certifications: ["SOC2 Type II", "ISO27001", "ISMAP"],
    auditCapability: true,
    sla: 99.95,
    monthlyEstimate: 600000,
  },
  {
    name: "Amazon Bedrock (Claude)",
    dataResidency: "日本(東京リージョン)",
    certifications: ["SOC2 Type II", "ISO27001", "ISMAP"],
    auditCapability: true,
    sla: 99.9,
    monthlyEstimate: 450000,
  },
];

アクセス制御設計

AIシステムへのアクセスを適切に制御し、不正利用を防止します。

APIキー管理

レベル対象権限レート制限
管理者AI基盤チームモデル設定変更、全APIアクセス1000 req/min
開発者アプリケーション開発チーム特定モデルへのAPI呼び出し100 req/min
サービス本番アプリケーション指定エンドポイントのみ500 req/min
エンドユーザー社内ユーザーチャットUI経由のみ20 req/min

APIキー管理のベストプラクティス

// APIキー管理の設計パターン
interface ApiKeyPolicy {
  keyRotationDays: number;        // キーローテーション間隔
  maxKeysPerProject: number;      // プロジェクト当たり最大キー数
  expirationDays: number;         // キーの有効期限
  allowedIpRanges: string[];      // 許可IPレンジ
  allowedModels: string[];        // 許可モデル一覧
  rateLimits: {
    requestsPerMinute: number;
    tokensPerDay: number;
    maxTokensPerRequest: number;
  };
  logging: {
    logRequests: boolean;          // リクエストログの記録
    logResponses: boolean;         // レスポンスログの記録
    retentionDays: number;         // ログ保持期間
  };
}

const productionApiPolicy: ApiKeyPolicy = {
  keyRotationDays: 90,
  maxKeysPerProject: 3,
  expirationDays: 365,
  allowedIpRanges: ["10.0.0.0/8"],  // 社内ネットワークのみ
  allowedModels: ["gpt-4o", "claude-3-sonnet"],
  rateLimits: {
    requestsPerMinute: 500,
    tokensPerDay: 5_000_000,
    maxTokensPerRequest: 8192,
  },
  logging: {
    logRequests: true,
    logResponses: true,
    retentionDays: 90,
  },
};

レート制限の実装

// レート制限の多層設計
class RateLimiter {
  // レイヤー1: ユーザー単位
  private readonly userLimits = new Map<
    string,
    { count: number; resetAt: Date }
  >();

  // レイヤー2: 組織単位
  private readonly orgLimits = new Map<
    string,
    { tokens: number; resetAt: Date }
  >();

  // レイヤー3: コスト制限(月額上限)
  private readonly costLimits = new Map<
    string,
    { spent: number; budget: number }
  >();

  async checkLimit(request: {
    userId: string;
    orgId: string;
    estimatedTokens: number;
    estimatedCost: number;
  }): Promise<{ allowed: boolean; reason?: string }> {
    // ユーザー単位のリクエスト数チェック
    const userLimit = this.userLimits.get(request.userId);
    if (userLimit && userLimit.count >= 20) {
      return {
        allowed: false,
        reason: "ユーザーのリクエスト上限に達しました(20回/分)",
      };
    }

    // 組織単位のトークン数チェック
    const orgLimit = this.orgLimits.get(request.orgId);
    if (orgLimit && orgLimit.tokens + request.estimatedTokens > 5_000_000) {
      return {
        allowed: false,
        reason: "組織の日次トークン上限に達しました",
      };
    }

    // コスト制限チェック
    const costLimit = this.costLimits.get(request.orgId);
    if (
      costLimit &&
      costLimit.spent + request.estimatedCost > costLimit.budget
    ) {
      return {
        allowed: false,
        reason: "月額予算の上限に達しました",
      };
    }

    return { allowed: true };
  }
}

モデルカードとAI利用ポリシー

モデルカード

モデルカードは、AIモデルの特性・限界・適切な利用方法を文書化したものです。

# model_card_example.yaml
model_card:
  basic_info:
    name: "社内AIアシスタント v2.1"
    base_model: "GPT-4o (Azure OpenAI, Japan East)"
    version: "2.1.0"
    release_date: "2026-01-15"
    owner: "AI基盤チーム"

  intended_use:
    primary: "社内ナレッジベースの検索・要約"
    secondary: "社内規定に関する質問回答"
    out_of_scope:
      - "医療・法務のアドバイス"
      - "個人情報を含む回答"
      - "外部向けコンテンツの生成"

  performance:
    accuracy:
      benchmark: "社内QAテストセット(500問)"
      score: "87.2%"
    latency:
      p50: "1.2秒"
      p99: "4.8秒"

  limitations:
    - "2026年1月以降の情報は含まれない場合がある"
    - "専門的な技術用語の解釈が不正確な場合がある"
    - "日本語以外の質問への精度は検証されていない"

  ethical_considerations:
    bias_evaluation: "性別・年齢バイアスのテスト実施済み(レポート: AI-BIAS-2026-001)"
    fairness_metrics: "Equal Opportunity Difference: 0.03(閾値0.05以下)"

  security:
    threat_model: "STRIDE分析実施済み(レポート: AI-SEC-2026-003)"
    last_red_team: "2026-01-10"
    known_vulnerabilities: "なし(最終テスト時点)"

  maintenance:
    review_cycle: "四半期ごと"
    next_review: "2026-04-15"
    escalation_contact: "ai-security@example.com"

AI利用ポリシー

ポリシー項目内容対象
利用目的業務に関連する情報検索・分析のみ全社員
禁止事項個人情報の入力、機密レベルS以上の文書の入力全社員
データ取扱いAI入出力は90日間ログ保存、監査対象全システム
責任AI出力の最終判断は利用者が行う全社員
インシデント報告AI不正利用・情報漏洩の疑いは即時報告全社員
利用量制限1人あたり1日100リクエストまで一般社員

サプライチェーンリスク

サードパーティモデルを利用する際のリスクを理解し、管理します。

リスクの分類

リスク説明影響対策
モデル汚染学習データに悪意あるデータが混入偏った出力、バックドアモデル評価テスト、複数モデルの比較
ベンダーロックイン特定プロバイダーへの過度な依存コスト増、サービス停止リスクマルチモデル戦略、抽象化レイヤー
データ漏洩プロバイダー側でのデータ流出機密情報の漏洩データ分類、機密データのオンプレミス処理
規約変更利用規約やAPIの突然の変更サービス中断契約の精査、フォールバック設計
コンプライアンス違反プロバイダーのデータ処理が規制に抵触法的リスクデータ処理契約(DPA)の締結

マルチモデル戦略の設計

// モデル抽象化レイヤーの設計
interface LLMProvider {
  name: string;
  chat(messages: Message[], options: ChatOptions): Promise<ChatResponse>;
  isAvailable(): Promise<boolean>;
}

class ModelRouter {
  private providers: Map<string, LLMProvider> = new Map();
  private fallbackOrder: string[] = [];

  constructor(config: {
    primary: string;
    fallbacks: string[];
  }) {
    this.fallbackOrder = [config.primary, ...config.fallbacks];
  }

  async route(
    messages: Message[],
    options: ChatOptions
  ): Promise<ChatResponse> {
    for (const providerName of this.fallbackOrder) {
      const provider = this.providers.get(providerName);
      if (!provider) continue;

      try {
        const available = await provider.isAvailable();
        if (!available) continue;

        const response = await provider.chat(messages, options);
        return {
          ...response,
          metadata: {
            provider: providerName,
            fallback: providerName !== this.fallbackOrder[0],
          },
        };
      } catch (error) {
        console.warn(
          `Provider ${providerName} failed, trying next...`,
          error
        );
        continue;
      }
    }

    throw new Error("All LLM providers are unavailable");
  }
}

// 利用例
const router = new ModelRouter({
  primary: "azure-openai",      // 主系: Azure OpenAI(日本リージョン)
  fallbacks: [
    "amazon-bedrock-claude",    // 副系: Amazon Bedrock
    "self-hosted-llama",        // 最終手段: セルフホストモデル
  ],
});

バージョン管理とロールバック

モデルバージョン管理

管理項目内容ツール例
モデルバージョンベースモデルのバージョン追跡MLflow, Weights & Biases
プロンプトバージョンシステムプロンプトの変更履歴Git(プロンプトもコード管理)
設定バージョンパラメータ(temperature等)の変更管理Git + CI/CD
評価結果各バージョンの評価スコアMLflow, 社内ダッシュボード

ロールバック手順

【モデルバージョンのロールバック手順】

1. 異常検知
   └─ 監視システムがパフォーマンス低下・異常出力を検知

2. 影響評価
   └─ 影響を受けたユーザー数、期間、データの特定

3. ロールバック判断
   ├─ 即時ロールバック: セキュリティインシデント、重大なバイアス
   └─ 計画的ロールバック: パフォーマンス低下、軽微な問題

4. ロールバック実行
   └─ 前バージョンのモデル/プロンプト/設定に切り替え
       ├─ Blue/Green: トラフィックを旧バージョンに切り替え
       └─ Canary: 新バージョンのトラフィック比率を0%に

5. 検証
   └─ ロールバック後の動作確認、回帰テスト

6. 根本原因分析
   └─ 問題の原因特定、再発防止策の策定

デプロイ戦略の比較

戦略説明リスクロールバック速度
Blue/Green2環境を切り替え即座(DNS/LB切替)
Canary段階的にトラフィックを移行極めて低即座(比率を0%に)
Rollingインスタンスを順次更新中(順次戻す必要あり)
Shadow新モデルを並行実行(応答は使わない)極めて低不要(影響なし)

「AIモデルの更新は、従来のアプリケーション更新よりもリスクが高い。同じバージョンでも出力が非決定論的だから、問題の検出が遅れやすい。だからこそ、Shadow デプロイで十分な検証を行ってからCanaryで展開するのが鉄則だ」 — 田中VPoE


まとめ

ポイント内容
ライフサイクル管理選定→評価→デプロイ→監視→廃止の5フェーズで体系的に管理
アクセス制御APIキー管理、レート制限、コスト制限の多層設計
モデルカードモデルの特性・限界・利用方法を文書化し透明性を確保
サプライチェーンリスクマルチモデル戦略と抽象化レイヤーでベンダーリスクを軽減
バージョン管理Shadow→Canaryデプロイでリスクを最小化したモデル更新

チェックリスト

  • モデルライフサイクルの5フェーズを理解した
  • APIキー管理とレート制限の設計パターンを理解した
  • モデルカードの必要性と構成要素を理解した
  • サードパーティモデルのサプライチェーンリスクと対策を理解した
  • モデルのバージョン管理とロールバック手順を理解した

次のステップへ

次は「AI監査とコンプライアンス」です。AIシステムの監査フレームワーク、バイアス検出、EU AI Act等の規制対応について学びましょう。


推定読了時間: 30分