[LLM] モニタリング・評価基盤の基礎

LLM の モニタリング(監視) & 評価基盤 は、LLM アプリを安定運用するうえで必須です。
しかし「何を測ればよいか?どう設計するか?」が分かりにくいので、ここでは 基本概念 → 監視すべき指標 → 評価方法 → 実装例 → 最低限の構成 を、プロダクション経験ベースでまとめます。

🧭 1. なぜ LLM のモニタリングが必要か
LLM アプリは従来のAPIと違い、確率的で、コストが高く、品質が揺れるため、以下が発生します:
品質劣化(アップデートで回答が変わる)
幻覚(hallucination)増加
レイテンシが不安定(ピーク時間、高負荷バッチ)
API コストの急増(ユーザ増加、不必要なリクエスト)
ユーザ行動による prompt の悪化
モデル変更による regressions(品質後退)
→ つまり「品質 × コスト × 安定性」を可視化して、
問題を自動で発見できる状態にすることが目的です。

🎯 2. モニタリングすべき指標(必須 + 追加)
🔥 必須(LLM の “健康状態”)
① レイテンシ
p50 / p90 / p95 / p99
prefill(入力処理)/ decode(生成処理)の分離計測
(vLLM などでは prefill がボトルネック)

② トークン使用量
入力トークン(prompt_tokens)
出力トークン(completion_tokens)
合計 tokens/request
→ コスト最適化に直結

③ コスト
cost_per_request
daily_cost
model別コスト
→ アラート設定(例:1日$20超えたら通知)

④ エラー率
API エラー
タイムアウト
リトライ状況
→ レイテンシ異常の早期発見に必要

🧠 品質指標(最重要)
⑤ ユーザ満足度(explicit / implicit)
👍👎 のフィードバック
返答内容の採用率 (“answer accepted”)
再質問率(re-ask rate)

⑥ LLM-as-a-judge による自動品質評価
モデル自身で評価する手法。
例:「この回答はユーザ質問に正確に答えているか? 1〜5で採点せよ。」

評価軸例:
usefulness
correctness
harm / safety
hallucination score
style consistency

⑦ 目標タスク特化の自動評価(RAG/QA など)
RAG:groundedness(出典との整合性)
QA:exact match / F1
要約:faithfulness / conciseness
会議議事録:情報欠落率

🧩 RAG 特有の指標(RAG を使うなら必須)
Retrieval hit-rate(正しいドキュメントが取得されたか)
コサイン類似度分布
chunk 取得数の分布
recall@k
hallucination index(回答に出典が含まれる率)

🏗️ 3. 評価基盤の構成(4層)
[1] ログ収集層
 LLM 呼び出しログ、tokens、latency、prompt、response

[2] データレイク層
 Athena, BigQuery, S3, PostgreSQL など

[3] 評価層
 ・LLM-as-a-judge(自動評価)
 ・ユーザフィードバック分析
 ・品質テスト(regression test)
 ・RAG の retrieval 評価

[4] 可視化/アラート層
 Grafana / Kibana / Metabase / Looker

🛠️ 4. 具体的なログフォーマット例(おすすめ)
{
“timestamp”: 1712345678,
“user_id”: “abc123”,
“model”: “gpt-4o-mini”,
“prompt”: “会議の議事録を要約してください”,
“response”: “要約:…”,
“prompt_tokens”: 243,
“completion_tokens”: 89,
“latency_ms”: 1130,
“error”: null,
“rating_user”: null,
“rating_llm”: {
“usefulness”: 4,
“correctness”: 5,
“groundedness”: 3
}
}

→ prompt / response は別ストレージに分離保存する(情報漏洩リスク対策)。

📊 5. 可視化ダッシュボードの例(Grafana)
最低限以下のメトリクスを表示:

◆ 時系列
cost/day
tokens/day
latency (p95)
error rate
user satisfaction

◆ ヒートマップ
RAG の類似度分布
ユーザ行動(どの prompt が最もコストを増やしているか)

◆ テーブル
リクエスト上位の prompt
コストの高いプロンプト
評価低スコアの回答

🔍 6. 自動評価(LLM-as-a-judge)の例
例:回答品質を自動採点
judge_prompt = f”””
以下のユーザ質問とAI回答の品質を評価してください。

[質問]
{question}

[AI回答]
{answer}

以下の項目を1〜5で採点し、JSONで返してください。
– correctness(正確性)
– helpfulness(有用性)
– logical_consistency(論理的一貫性)
– hallucination(幻覚の少なさ)※少ないほど高得点
“””

→ モデルに評価を返させる。
→ 毎日/毎週のモデルの品質変動を数値化できる。

🧪 7. 回帰テスト(Regression Test)
「モデル変更で品質が下がってないか?」を自動チェックする仕組み。

例)
代表質問セット(100〜300問)
様々な prompt パターン
正解または期待動作があるケース
評価方法:
EM(Exact Match)
similarity(回答文の埋め込み類似度)
LLM-as-a-judge スコア差分

🧰 8. 最低限これだけあれば OK(スターター構成)
✔ ① 呼び出しログ(DBに保存)
prompt_tokens, completion_tokens
latency
model
error
✔ ② 可視化(Metabase / Grafana)
日次トークン量、日次コスト
p95 latency
error 率

✔ ③ ユーザの thumbs up/down
回答の直接品質

✔ ④ 代表質問セット(回帰テスト)
モデル更新時の品質チェック

🌟 さらに進めると…
LLM Guardrails(安全性検査)
異常検知(急激なコスト増・hallucination spike)
prompt 最適化の自動探索(prompt tuning ops)
retriever の self-monitoring(RAG で重要)