🚨

Sentryを使ったLLM監視

2025/02/20に公開

はじめに

大規模言語モデル (LLM) は膨大なテキストデータをもとに学習される技術で、自然言語を巧みに処理できる点が特長です。

近年では、あらゆる分野でLLMの導入が進み、モデルのパフォーマンスを常に確認するモニタリングが非常に重要になっています。
モニタリングを行うことで、ユーザーの求める回答が返っているかを評価し、運用ミスによるリスクを低減することが可能です。

本記事では、LLMモニタリングの概要と、Sentryを活用したLLMの監視について解説します。

LLMモニタリングとは

LLMモニタリングとは、大規模言語モデルの動作や成果物をモニタリングし、モデルが本来の目的を満たしているかを評価する行為を指します。

以下のような点を中心に監視を行うのが一般的です:

  • 応答の品質 (正確性や一貫性)
  • レイテンシ (推論にかかる時間)
  • コスト (APIの呼び出しやリソース利用の費用)
  • セキュリティや倫理面における不備

LLMモニタリングを通じて性能の最適化や誤回答の検知などを行い、ビジネスやサービスに適した安全かつ正確なモデル運用を実現します。

参考: What is LLM Observability and LLM Monitoring?

SentryのLLMモニタリング機能

Sentryは、主にアプリケーションのエラー追跡やパフォーマンス監視に用いられてきましたが、LLMを対象とした機能も提供しています。

具体的には、LLMやAIパイプラインの呼び出し状況やパフォーマンスを記録・可視化し、コストが想定以上に膨らんだ際にアラートを出すといった仕組みが利用可能です。

主な機能としては:

  • プロンプトやトークンの使用状況のトラッキング
  • リアルタイムアラート (コスト上限超過時など)
  • 監視データのダッシュボードでの可視化

があります。

参考: Sentry LLM Monitoring

ユースケース例

  • ユーザーから「LLMを使ったワークフローで問題がある」と報告があり、実際にどこで不具合が起きているのかをLLMのレスポンスを含めてチェックしたい。
  • 毎日の使用料金が特定の金額を超えた場合に、担当者がすぐに知るためのアラートを設定したい。
  • ユーザーから「LLMを使った処理が遅い」と報告された際に、ワークフローのどの部分に遅延が発生しているのか特定したい。

参考: Sentry LLM Monitoring - UseCase

利用料金

  • Teamプラン: 月額26ドル (データ保持期間は7日)
  • Businessプラン: 月額80ドル (データ保持期間は90日)

参考: Sentry LLM Monitoring

使用方法

セットアップ

今回は、Python SDKを使ってSentryのLLMモニタリングを実装します。

1. プロジェクトの作成

公式ドキュメントの手順に沿って、PythonのSentryプロジェクトを作成します。

2. AIパイプラインを設定

今回はLangChainなどのフレームワークを使わず、OpenAIのライブラリを直接呼び出します。

以下のようにコードを用意し、SentryのLLMモニタリング機能を有効化しましょう。

import os
from dotenv import load_dotenv
import sentry_sdk
from openai import OpenAI
from sentry_sdk.ai.monitoring import ai_track
from sentry_sdk.integrations.openai import OpenAIIntegration

# .envファイルから環境変数を読み込み
load_dotenv()

# Sentryの初期化
sentry_sdk.init(
    dsn=os.getenv("SENTRY_DSN"),
    enable_tracing=True, # トレースの有効化
    # ref: https://docs.sentry.io/platforms/python/data-management/data-collected/#llm-inputs-and-responses
    send_default_pii=True, # LLMの入力や応答データ収集を許可
)

@ai_track("GPT-3.5 Pipeline")
def generate_response(prompt: str) -> str:
    """GPT-3.5を使用してレスポンスを生成する"""
    client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
    completion = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[{"role": "user", "content": prompt}]
    )
    return completion.choices[0].message.content


def main():
    prompt = "AIとは何ですか?簡単に説明してください。"
    with sentry_sdk.start_transaction(op="ai-inference", name=f"GPT-3.5 Inference"):
        response = generate_response(prompt)
        print(f"回答: {response[:100]}...\n")
        print("-" * 50)

if __name__ == "__main__":
    main()

上記で注目すべき設定は次の4点です:

  1. enable_tracing: トレースを有効化
  2. send_default_pii: LLMのログを収集できるようにする
  3. start_transaction: 1つの大きな処理のまとまりをトレース可能にする
  4. ai_track: AI関連の関数を記録するためのデコレータ

LangChainのような専用フレームワークを導入する場合は、ai_trackの設定を省略しても自動的にトラッキングしてくれるそうです。

参考:

実際のLLMモニタリングの確認

コードを実行した結果をSentryの画面から確認します。

ダッシュボード

ここでは、期間内に使用したトークン数、コスト、推論時間、処理実行回数などが一目で把握できます。

トレースデータ

SPAN IDをクリックすると、詳細なトレースデータを参照できます。

各ステップにかかった時間や処理の内容などが分かるため、ボトルネックの特定や使用状況の分析に役立ちます。

ざっくりですが、以下のような構成になっています。

  • ai.inference: 推論全体を管理する大枠の処理
  • ai.pipeline: 実際のAIパイプライン処理
  • ai.chat_completions.create.openai: OpenAIへのHTTPリクエスト

ai.inference

全体の実行時間と各ステップの実行時間が確認できます。

全体の実行時間は2.07秒で、各処理の内訳としてhttp.clientが2.04秒(49%)、ai.chat_completions.create.openaiが13.75ms(9%)、ai.pipelineが10.41ms(0%)、subprocess関連の処理が合計7.67ms(0%)となっています。

ai.pipeline

使用されたトークン数等が確認できます。

ここでは、GPT-3.5 Pipelineの実行状況が確認できます。処理時間は2.07秒で、平均より93%高速でした。

また、使用された合計トークン数は243、スレッドはMainThreadとして実行されています。

ai.chat_completions.create.openai

OpenAI APIとのやり取りの詳細が確認できます:

  • インプットメッセージ

    • ユーザーからの質問「AIとは何ですか?簡単に説明してください。」
    • メッセージのロール(user)とコンテンツが記録されています
  • レスポンス

    • アシスタントからの詳細な説明
    • AIの定義、機械学習やディープラーニングについての説明
    • ロール(assistant)とコンテンツが記録されています
  • トークン使用の内訳

    • プロンプトトークン:26トークン
    • 補完トークン:217トークン
    • 合計:243トークン
  • コスト

    • 0.0003385ドル(約0.05円)

これらのデータは、APIの使用状況を監視し、コストを追跡する上で非常に重要な指標となります。

まとめ

SentryのLLMモニタリング機能を利用することで、LLMがどのように動いているかを俯瞰的に把握し、必要に応じて改善を行う仕組みを整えやすくなります。

特に、コスト管理やトークン使用量をリアルタイムでトラッキングする機能は、ビジネス上の予算管理にも大いに有用です。

ぜひSentryを活用し、LLMの安定稼働と品質向上を実現してください!

Discussion