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公式、最深の統合
LangfuseOSS+商用強力強力ありセルフホスト無料ベンダー中立、セルフホスト可
Braintrust商用非常に強力あり従量課金ゴールドデータ管理とReview UIが秀逸
HeliconeOSS+商用ありセルフホスト無料プロキシ型、導入が超簡単
Phoenix/ArizeOSS+商用強力強力限定セルフホスト無料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の出力は非決定的であり、問題発生時の原因特定にトレーシングが不可欠です。開発段階から導入しておくとデバッグ効率が大幅に向上し、本番移行後のトラブル対応コストが劇的に下がります。