LLM評価・監視ダッシュボード
AIアプリケーション向けの本番オブザーバビリティ基盤。1日1万件以上の推論の精度、レイテンシ、コスト、有害性を追跡し、100msごとに更新されるライブダッシュボードで見せる。

担当領域
フルスタックで担当。オブザーバビリティの設計、評価パイプライン、リアルタイムのダッシュボード、CI/CD連携を構築した。
期間
3.5か月
年
2026
技術スタック
ステータス
稼働中AIアプリケーション向けの本番オブザーバビリティ基盤。1日1万件以上の推論の精度、レイテンシ、コスト、有害性を追跡し、100msごとに更新されるライブダッシュボードで見せる。
多くのAIチームは、本番でモデルが本当に機能しているかを知らないままリリースしている。1日数千件の推論について精度、レイテンシ、コストを追う標準的な方法はなく、品質の劣化をユーザーより先に検知することも、AIがSLAを満たしていると関係者に示すこともできない。劣化は指標ではなく、ユーザーからの苦情で気づくことになる。
OpenTelemetryでAIアプリケーションを計装し、DeepEvalで15の品質指標をすべての推論に対して評価し、結果をClickHouseに蓄えて100ms未満でダッシュボードを引けるようにした本番オブザーバビリティ基盤を構築した。CI/CDと連携し、評価スコアが閾値を下回るとデプロイを止める。
推論のリアルタイム監視
OpenTelemetryで計装したパイプラインが、LLM呼び出しごとのレイテンシ(p50/p95/p99)、トークン量、1回あたりのコスト、エラー率を追跡し、ダッシュボードを100msごとに更新する。
15指標の評価スイート
DeepEvalが忠実性、関連性、幻覚の検出、有害性、バイアス、一貫性など15の指標を推論ごとに評価する。RAG特有の品質にはRAGASのスコアを使う。
CI/CDのデプロイゲート
評価スイートはCIのpytestフィクスチャとして走る。いずれかの指標が設定した閾値を下回るPRは、劣化の詳細レポートとともに自動でブロックされる。
異常検知とアラート
移動窓の指標に統計的な異常検知をかけ、7日移動平均から2σ以上外れた場合にPagerDutyとSlackへ通知する。
このプロジェクトを形づくった技術選定と、それぞれを選んだ理由。
ClickHouse
データ列指向の圧縮と、10億行規模での10〜50倍速い集計のため、指標の保存先にTimescaleDBではなくClickHouseを選んだ。Postgresで3秒かかっていたダッシュボードのクエリが80msで返る。
Tremor v3.0
フロントエンド既製のダッシュボード部品が、エンジニアの見慣れた監視画面の作法に合っているため、独自のD3ではなくTremorを選んだ。フロントエンドの開発期間を60%短縮できた。
OpenTelemetry
インフラ特定のベンダーに縛られないよう、独自の計装ではなくOTelを選んだ。アプリのコードを変えずにDatadog、Grafana、Jaegerへトレースを送れる。セマンティック規約により、サービス間で指標の命名も揃う。
DeepEval 0.4.2
AI・MLpytestと統合でき、指標のライブラリも揃っているため、自作の評価スクリプトではなくDeepEvalを選んだ。評価スイートをテストファイルとして書けるので、既存のCI基盤をそのまま再利用でき、別の評価プラットフォームを作る必要がない。
計装からリアルタイムのダッシュボード、CI/CD連携までを通したフルスタックのオブザーバビリティ。
計装
OpenTelemetryのSDKがLLM呼び出しをラップ → レイテンシ、トークン、コスト、応答を記録
評価
DeepEvalが推論ごとに15の指標を評価 → スコアをトレースと並べて保存
保存
ClickHouseが指標イベントを取り込み → 列指向の圧縮で10億行超でも100ms未満のクエリ
ダッシュボード
Next.jsとTremorがリアルタイムのグラフを描画 → 精度、レイテンシ、コスト、有害性のパネル
アラート
移動窓での異常検知 → 品質の劣化をPagerDutyとSlackへ通知
CI/CDのゲート
CIでpytestの評価スイートを実行 → 設定した閾値を下回る指標があればデプロイを停止
開発中にぶつかった難所と、どう乗り越えたか。
規模拡大にともなうダッシュボードの性能
1日1万件以上の推論がそれぞれ15の指標を生むため、グラフの更新ごとに15万行以上を走査していた。当初のPostgres構成ではダッシュボードの読み込みに3〜5秒かかり、リアルタイム監視には使えなかった。
指標の保存先をClickHouseへ移し、よく使う集計(時間別・日別のロールアップ)にマテリアライズドビューを用意した。閲覧の多いパネルにはRedisで10秒のTTLのクエリキャッシュを挟んだ。
ダッシュボードの読み込みは4.2秒から180msへ短縮した。エンジニアは常時開いた監視タブとして使っている。
本番での評価コスト
推論ごとに15のDeepEval指標を回すと800ms以上のレイテンシが加わり、LLMのコストも倍になった。各指標が判定用のLLM呼び出しを伴うためである。レイテンシに敏感な本番経路では受け入れられない。
評価を非同期にした。推論の結果はすぐ返し、指標はバックグラウンドのキュー(CeleryとRedis)で計算する。CI/CDのゲートについては、全件ではなく代表サンプル(5%)に対して同期的に評価する。
本番の推論にレイテンシは一切加わらない。非同期の評価キューは中央値12秒の遅れで処理され、ダッシュボードのリアルタイム更新には十分だった。

