評価・コスト・安全性
本番に LLM を載せるなら、品質を測る eval、コスト管理、安全性ガードが必須。 観測性と運用ノウハウまで一通り。
1. Eval(評価)
プロンプト変更や新モデル切替で品質が落ちないかを検証する仕組み。
必要なもの
- 評価セット(テスト入力 + 期待出力)50〜500 件
- 評価関数(正解率、類似度、LLM-as-Judge など)
- 実行環境(CI で自動 / GUI で手動)
評価方法
| 方法 | 適用 |
|---|---|
| 完全一致 | 分類、抽出 |
| 正規表現 / JSON Schema | 構造化出力 |
| BLEU / ROUGE | 翻訳・要約 |
| Embedding 類似度 | セマンティックな近さ |
| LLM-as-Judge | 主観評価(より高性能なモデルで採点) |
| 人手評価 | 最終確認、サンプリング |
LLM-as-Judge の注意
- 判定モデル自身も間違える(判定基準を明確に書く)
- 「自モデルを高評価する」バイアス(別ベンダで判定)
- 位置バイアス(A/B のうち先に来た方を選びがち)
- 長さバイアス(長い回答を高評価しがち)
主要ツール
- Anthropic Eval(コンソール): ブラウザで評価セットを管理
- Promptfoo: YAML でテストケース、CI 統合
- LangSmith: トレース + データセット + 評価
- Braintrust: 商用 eval プラットフォーム
- Ragas: RAG 評価特化
- OpenAI Evals
2. 観測性(Observability)
記録すべきこと
- 各リクエストの入力 / 出力 / モデル / レイテンシ / トークン
- tool 呼び出し履歴(並列含む)
- エラー(HTTP コード / リトライ)
- ユーザー識別子(PII に注意)
- セッション / トレース ID で全 step を関連付け
主要ツール
- LangSmith: LangChain と密結合、独立でも使える
- Helicone: プロキシ型、簡単に導入
- Langfuse: OSS、self-host 可
- Braintrust
- OpenTelemetry: 標準的な分散トレース
- Sentry: エラートラッキング
3. コスト管理
削減手法
- Prompt Caching — System / Tool 定義 / RAG コンテキストを 90% OFF
- Batch API — 非同期バッチで 50% OFF
- モデルルーティング — 簡単な処理は Haiku、難しい場合だけ Sonnet/Opus
- レスポンス短縮 — max_tokens を絞る、簡潔指示
- 履歴圧縮 — 古い部分を要約
- RAG で必要分のみ送る
- Embedding キャッシュ — 同じテキストは再計算しない
- レート制限 / クォータ — ユーザー単位で上限
料金監視
- 毎日 / 毎時の使用量ダッシュボード
- 異常検知(前日比 N 倍でアラート)
- Anthropic Console の Usage タブで確認
- ユーザー / プロジェクト単位の原価計算
4. 安全性(Safety)
入力側のガード
- プロンプトインジェクション対策(→ プロンプト設計)
- PII / 機密情報のマスキング(メールアドレス・電話番号・カード番号)
- 異常な長さ・トークン爆撃を弾く
- 不適切ワード辞書 / モデレーション API
出力側のガード
- 機密情報を喋らせない(System で禁止 + 後段フィルタ)
- スキーマ違反の出力は再生成させる
- 事実性チェック(RAG 引用の整合性)
- OWASP LLM Top 10 を一読
ツール権限の分離
- read / write を分けて、書き込みは確認フローを挟む
- 金額・通信先はホワイトリスト
- シェル実行はサンドボックス(Docker / Firecracker / E2B)
- Computer Use は専用 VMのみ
5. ハルシネーション抑制
- 「分からないなら不明と答えよ」を明示
- RAG で根拠を渡す
- 引用を強制(source URL を出させる)
- 事後検証ステップ(生成 → 別モデルで「事実確認」)
- 確信度を出力させて低いものはユーザーに確認を求める
6. 法務・倫理
- 個人情報: GDPR / 日本の個人情報保護法。学習に使わない契約があるか確認
- 著作権: 出力の利用範囲、生成コンテンツの権利
- BAA / DPA: 医療 / 金融分野では別途契約
- Anthropic はAPI 入力をデフォルトで学習に使わない(コンソールに記載)
- 子供向け / 医療 / 法律 / 金融助言は免責表示必須
7. 信頼性(Reliability)
- リトライ: 5xx / 429 は指数バックオフ
- サーキットブレーカー: 連続失敗時は別モデル / 別リージョンへ
- フォールバック: Anthropic ダウン時に Bedrock 経由 or OpenAI へ切り替え
- Idempotency: 同じ入力で同じ ID(重複課金防止)
- SLA / SLO: TTFT、エラー率、コストの目標
8. デプロイ戦略
- Shadow テスト: 本番トラフィックを新プロンプトに並列送信 → 比較
- カナリアリリース: 5% → 25% → 100% で切替
- A/B テスト: ユーザー単位で比較指標
- ロールバック: プロンプトもバージョン管理
9. ユーザー体験
- レイテンシ: TTFT が体感を決める。ストリーミング前提
- 「考え中」表示: ツール呼び出しを可視化
- 停止ボタン: ユーザーがいつでも止められる
- フィードバック収集: 👍 / 👎 をログに紐付け、eval セットへ
- 「これは AI 生成です」を明示
10. 災害対応プレイブック
- Anthropic 障害時のフェイルオーバー手順
- 誤情報出力でのインシデント対応(ログ凍結 / ユーザー通知)
- API キー漏洩時の即時ローテーション手順
- 料金暴走時の自動停止
本番投入前チェックリスト
- ☐ 評価セット 50 件以上で目標精度に達している
- ☐ プロンプト・ツール定義はバージョン管理
- ☐ 観測ツールが入っている(少なくともログと使用量)
- ☐ コスト上限 / クォータが設定されている
- ☐ プロンプトインジェクション対策がある
- ☐ ツールは最小権限
- ☐ ストリーミング / キャンセルが動く
- ☐ エラー / 5xx でユーザー向け文言がある
- ☐ ロールバック手順が文書化
- ☐ 法務確認 / 利用規約に AI 生成の表記
本番 LLM の鉄則
「動いた」と「使い物になる」の差は大きい。計測 → 改善 → デプロイのループを回せる体制を最初に整えるのが最短。 後から eval を足すのは大変。