LLMアプリを本番運用していると、ある日突然「ユーザーからおかしな応答が返った」という報告が上がります。従来のアプリ監視では「500エラーの発生率」で検知できましたが、LLMの「応答の内容が変だった」は従来型監視のレーダーには映りません。本記事では、結論から言うとLangSmith、Langfuse、Braintrustの3つが主要選択肢であり、それぞれのユースケース・予算・セルフホスト要件で選び分ける、という実務的な指針を示します。
LLMオブザーバビリティとは
LLMオブザーバビリティとは、LLMアプリケーションの内部動作――プロンプト、応答、レイテンシ、トークン数、コスト、エラー、品質スコア――を可視化・監視する仕組みです。通常のアプリ監視が「システムが正常に動いているか」を見るのに対し、LLMオブザーバビリティは「出力の内容が業務として妥当か」まで踏み込みます。
LLMオブザーバビリティは、次の3つの柱で構成されます。
【LLMオブザーバビリティの3つの柱】
[ユーザー入力] --> [LLMアプリ] --> [応答]
|
+--------------+--------------+
| | |
v v v
[トレーシング] [メトリクス] [ログ]
各ステップの p50/p95遅延, プロンプト原文,
呼び出し木構造 コスト, エラー率 応答, エラー詳細
| | |
+--------------+--------------+
|
v
[ダッシュボード / アラート]
|
v
[デバッグ・品質改善]
※ 3つの柱はどれか一つが欠けても、問題の原因特定が困難になる
主要ツールの比較
2026年時点で主要なLLMオブザーバビリティツールは、LangSmith、Langfuse、Braintrust、Helicone、Phoenix/Ariseの5つです。それぞれの立ち位置を比較します。
| ツール | OSS/商用 | トレーシング | 評価 | プロンプト管理 | 料金 | 特徴 |
|---|---|---|---|---|---|---|
| LangSmith | 商用(一部無料) | 強力 | 強力 | あり | 従量課金 | LangChain公式、最深の統合 |
| Langfuse | OSS+商用 | 強力 | 強力 | あり | セルフホスト無料 | ベンダー中立、セルフホスト可 |
| Braintrust | 商用 | 中 | 非常に強力 | あり | 従量課金 | ゴールドデータ管理とReview UIが秀逸 |
| Helicone | OSS+商用 | 中 | 中 | あり | セルフホスト無料 | プロキシ型、導入が超簡単 |
| Phoenix/Arize | OSS+商用 | 強力 | 強力 | 限定 | セルフホスト無料 | ML監視との統合、OpenTelemetry連携 |
以下はLangfuseのトレーシング実装例です。デコレータを付けるだけでトレースが記録されます。
from langfuse.decorators import observe, langfuse_context
from openai import OpenAI
client = OpenAI()
@observe()
def rag_pipeline(question: str) -> str:
docs = retrieve(question)
langfuse_context.update_current_observation(
input={"question": question},
metadata={"retrieved_count": len(docs)},
)
return generate(question, docs)
@observe(as_type="generation")
def generate(question: str, docs: list) -> str:
context = "\n".join(d["text"] for d in docs)
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": f"文脈: {context}\n\n質問: {question}"}],
)
langfuse_context.update_current_observation(
usage={"total_tokens": resp.usage.total_tokens},
)
return resp.choices[0].message.content
トレーシングの実装パターン
トレーシングは分散トレーシングの考え方をLLMに持ち込んだものです。1つのユーザーリクエストに対して、埋め込み計算、ベクトル検索、プロンプト組み立て、LLM呼び出し、後処理といった一連のステップが「トレース」として記録されます。
典型的な実装パターンは3つあります。第一はデコレータ方式で、関数に@observeを付けて自動記録する方式です。コードへの侵襲が少なく手軽です。第二はコンテキストマネージャ方式で、with文で明示的にスパンを区切ります。第三はプロキシ型で、LLM APIコールをプロキシ経由にして記録する方式です(Heliconeが代表例)。最も侵襲が少ない一方、アプリ内部のロジックは見えません。
from langsmith import traceable
from openai import OpenAI
client = OpenAI()
@traceable(name="customer_qa")
def answer_question(question: str) -> str:
context = retrieve_docs(question)
return llm_call(question, context)
@traceable(run_type="retriever")
def retrieve_docs(question: str) -> list:
return vector_store.search(question, k=4)
@traceable(run_type="llm")
def llm_call(question: str, context: list) -> str:
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": format_prompt(question, context)}],
)
return resp.choices[0].message.content
メトリクス設計と監視ダッシュボード
トレーシングは個別のリクエストを見る仕組みですが、全体の健全性を見るにはメトリクスが必要です。LLMアプリで監視すべきメトリクスを以下にまとめます。
| メトリクス | 計測方法 | 閾値例 | アラート条件 |
|---|---|---|---|
| p95レイテンシ | LLM呼び出しの応答時間分布 | 5秒以内 | 10分連続で5秒超 |
| エラー率 | 例外発生件数 / 総リクエスト数 | 1%以下 | 5分で2%超 |
| コスト / 時間 | トークン数×単価の累計 | 日予算の110% | 日予算110%超で通知 |
| 幻覚率 | LLM-as-Judgeで事実性評価 | 5%以下 | 1日あたり5%超 |
| リトライ率 | スキーマ検証失敗でリトライした割合 | 2%以下 | 5分で5%超 |
| ユーザー満足度 | Thumbs up/downの比率 | 90%以上 | 週次で85%割れ |
ダッシュボードは「日次の健全性確認」「インシデント発生時の原因特定」の2つの用途で設計してください。前者はサマリビュー、後者は詳細ドリルダウンが必要です。
ツール選定の判断基準
ツール選定の判断フローを示します。
Q1. データをセルフホストで管理する必要がある?
├── Yes → Q2. OpenTelemetry連携が必要?
│ ├── Yes → Phoenix/Arize(OSS版)
│ └── No → Langfuse(セルフホスト版)
└── No → Q3. LangChainを深く使っている?
├── Yes → LangSmith(統合が最深)
└── No → Q4. 評価とゴールドデータ管理が最優先?
├── Yes → Braintrust
└── No → Q5. 導入コストを最小化したい?
├── Yes → Helicone(プロキシ型)
└── No → Langfuse(商用版)
まとめ
LLMオブザーバビリティは本番運用の必須要件です。初期段階ではセルフホスト可能なLangfuseから始め、規模拡大に合わせてBraintrustなどの有償ツールへ移行するのが費用対効果の高い選択です。関連記事としてLLMOpsとは、LLMコスト構造、RAG評価メトリクス、LLMアプリ評価フレームワークもあわせてご参照ください。
よくある質問(FAQ)
Q1. LLMオブザーバビリティとは何ですか?
A. LLMアプリケーションの内部動作(プロンプト、応答、レイテンシ、コスト、エラー)を可視化・監視する仕組みです。従来のアプリ監視と異なり、プロンプトのトレーシングや出力品質の評価が含まれます。本番運用では不可欠な機能です。
Q2. LangSmithとLangfuseの違いは?
A. LangSmithはLangChain公式の商用ツールでLangChainとの統合が最も深い点が特徴です。Langfuseはオープンソースでセルフホストも可能な、プロバイダに依存しない汎用的なツールです。LangChain主軸ならLangSmith、それ以外ならLangfuseが自然な選択になります。
Q3. LLMオブザーバビリティは必須ですか?
A. 本番運用するLLMアプリには必須です。LLMの出力は非決定的であり、問題発生時の原因特定にトレーシングが不可欠です。開発段階から導入しておくとデバッグ効率が大幅に向上し、本番移行後のトラブル対応コストが劇的に下がります。