%3Aquality(100)%2F&w=3840&q=75)
Grafana Cloud、OpenLIT、OpenTelemetryを使用して本番環境のLLMを観測する方法
注: AIの登場により、私たちの周りの世界は大きく変化しています。今日では誰もが開発者となり、LLMを使用してLLM搭載アプリケーションを作成し、ユーザーはさらに多くのLLMを使用してそれらと対話できるようになりました。オブザーバビリティの実践者はこれに適応し、その業務に適切なツールを用意する必要があります。本シリーズでは、Grafana Cloudを使用してAIアプリケーションを観測する方法をご紹介します。これには、本番環境のワークロード(本記事)、 AI agents 、MCP servers、 zero-code LLMsが含まれます。
大規模言語モデル(LLM)アプリケーションをデモ環境から本番規模のサービスへ移行させると、ノートブックでAPIキーを試している時とは全く異なる疑問が生じます。
「各モデルにどれくらいのコストがかかっているか?」「SLOの範囲内にレイテンシを収めているか?」「ハルシネーションや有害なコンテンツを誤って返していないか?」「システムはプロンプトインジェクション攻撃に対して脆弱ではないか?」
Grafana Cloudのような最新のオブザーバビリティツールを使用すれば、これらの疑問は一か所で把握できます。本ガイドでは、OpenLIT SDKとGrafana Cloudの AI Observability を使用して、生成AIワークロード向けのエンドツーエンドのオブザーバビリティを設定する方法を解説します。
LLMのオブザーバビリティにGrafana Cloudを使用する理由
AI Observabilityは、メトリクス、ログ、トレース、プロファイルを視覚化してクエリを実行するGrafana Cloudの機能を基盤として構築されており、AIワークロード固有のニーズに合わせてカスタマイズされています。主な機能は以下の通りです。
- 統合されたGenAI監視: AI Observabilityは、モデルのレイテンシ、スループット、可用性を追跡し、ユーザーのプロンプトとコンプリーションを表面化させることで、開発者が利用パターンを理解できるようにします。また、リアルタイムのコスト管理とトークン分析を提供し、消費された入出力トークン数や各呼び出しのコストをチームが把握できるようにします。
- 品質と安全性の評価: この統合により、トレース上にプログラムによる評価機能が追加され、ハルシネーションに対するアラートの作成、事実の正確性の検証、コンテンツ品質のスコアリングが可能になります。また、トキシシティ、バイアス、その他の安全性の問題も監視します。これらの評価シグナルは、デプロイの制御や、モデルの品質がドリフトした際のオペレーターへのアラートに使用できます。
- フルスタックのオブザーバビリティ: Grafana CloudはOpenLITを使用し、LLMのメトリクスに加えてベクトルデータベースの操作、MCPサーバー、GPUのパフォーマンスも監視します。クエリのレイテンシ、リソース使用率、AIスタック全体にわたるプロトコルの状態を追跡します。また、GenAIのオブザーバビリティ、GenAIの評価、ベクトルDBのオブザーバビリティ、MCPのオブザーバビリティ、GPU監視の5つの主要領域をカバーする事前構築済みのダッシュボードも用意されています。
- ベンダー中立な計装: この統合はOpenTelemetryに依存しているため、トレースとメトリクスを任意のバックエンドにエクスポートできます。Grafana CloudはマネージドのOTLPゲートウェイと、完全マネージドのPrometheusおよびTempoサービスを提供するため、独自のオブザーバビリティスタックを運用する必要がなくなります。
これらの機能により、Grafana CloudはAIテレメトリにとって最適な統合先となります。OpenLITの自動計装と組み合わせることで、最小限のコード変更で包括的なインサイトを得ることができます。
OpenLITを使用する理由は、LLM、ベクトルデータベース、LangChainやCrewAIといったフレームワークなど、50以上のGenAIツールをサポートし、最小限の設定でAIアプリケーションの計装を容易にするためです。OpenTelemetryネイティブであり、GenAIのセマンティック規約に従っているため、Grafana Cloudやその他のOTelベースのバックエンドに自然に適合します。SDKはトークン、レイテンシ、コストのトレースとメトリクスを生成し、同じ統合を利用して評価を実行することも可能です。
デモ:カスタマーサポートボットを観測するためのGrafana Cloudの設定方法
実践的な例として、クエリの複雑さに応じて異なるLLMプロバイダーを使用するカスタマーサポートチャットボットを構築してみましょう。すべてをGrafana Cloudで観測し、この統合がいかにしてAIクエリのコストを削減し、レイテンシを劇的に低下させるかを確認します。
%3Aquality(100)%2F&w=3840&q=75)
注: 手順の途中で行き詰まったり、ご自身のセットアップでサポートが必要になった場合は、Grafana Cloud UIの右上にあるパルサーアイコンをクリックして、Grafana Assistantとのチャットを開いてください。Grafana Assistantは、インシデントのトラブルシューティング、ダッシュボードの管理、製品に関する質問への回答を支援するために専用に構築されたLLMです。
アーキテクチャ
計装されたGenAIサービスのハイレベルなアーキテクチャは以下の通りです。ルーターが受信したユーザーメッセージを分類し、最も適切なモデルにルーティングします。プロバイダーに関係なく、すべての呼び出しはOpenLITによって計装され、トレースとメトリクスが生成されます。これらのシグナルはOTLPゲートウェイ経由でGrafana Cloudに転送され、事前構築済みのダッシュボードでパフォーマンス、コスト、品質が視覚化されます。
User Query → Route by complexity → [GPT-4 (complex) | Claude (medium) | GPT-3.5 (simple)]
↓
OpenLIT SDK captures traces & metrics
↓
Grafana Cloud (Grafana Cloud Metrics + Grafana Cloud Traces + Grafana Cloud Logs)
↓
AI Observability Dashboards
ステップ 1: AI Observabilityのインストール
まず、Grafana CloudスタックにAI Observabilityを追加します。左側のメニューの「Connections」をクリックし、ドキュメントに記載されている手順に従うことで実行できます。 これにより、前述の5つ (GenAI observability, GenAI evaluations, vector DB observability, MCP observability, and GPU monitoring)のダッシュボードがインストールされます。メトリクスが到着すると、これらのダッシュボードにはレイテンシのヒストグラム、トークン数、コストの概要、評価結果が自動的に入力されます。
ステップ 2: OpenLITのインストール
pipを使用して、OpenLITと好みのモデルプロバイダーをインストールします。
pip install openlit openai anthropic cohere
このコマンドは、PyPIから最新のOpenLIT SDKと、モデルに必要なクライアントライブラリをプルします。
ステップ 3: アプリケーションの計装
オブザーバビリティを追加する最も簡単な方法は、アプリケーションの先頭で openlit.init() を呼び出すことです。ダッシュボードの構成を改善するために、オプションでservice_name とenvironment を渡すこともできます。ルーターがメッセージの複雑さに応じてGPT-3.5、Claude 3、GPT-4の中から選択する実践的なコード例を示します。OpenLITはすべてのAPI呼び出しを自動的に計装します。また、ハルシネーションやプロンプトインジェクションの試行をフラグ付けするための評価およびガードレールAPIの使用方法も含まれています。
import os
import openlit
from openai import OpenAI
from anthropic import Anthropic
# Initialize OpenLIT with an application name and environment
openlit.init()
# Initialize clients for each model provider
openai_client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
anthropic_client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
def route_query(message: str) -> str:
"""Select a model based on the message length/complexity."""
words = len(message.split())
if words < 20:
return "gpt-3.5-turbo" # simple queries
elif words < 100:
return "claude-3-haiku" # medium complexity
else:
return "gpt-4-turbo" # complex queries
def call_model(model_name: str, message: str) -> str:
"""Send the query to the selected LLM.
OpenLIT will automatically instrument each API call.
"""
if model_name.startswith("gpt-3.5") or model_name.startswith("gpt-4"):
response = openai_client.chat.completions.create(
model=model_name,
messages=[{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": message}]
)
return response.choices[0].message.content
elif model_name.startswith("claude"):
response = anthropic_client.completions.create(
model=model_name,
prompt=f"\n\nHuman: {message}\n\nAssistant:",
max_tokens=1024
)
return response.completion
else:
raise ValueError(f"Unsupported model: {model_name}")
def chat(user_message: str) -> str:
# Choose the right model for the query
model = route_query(user_message)
answer = call_model(model, user_message)
# Optional: Evaluate the response for hallucinations and injection attempts
evals = openlit.evals.Hallucination(provider="openai", api_key=os.getenv("OPENAI_API_KEY"))
# Evaluation metric is automatically sent to the configured OTel destination
evals.measure(prompt=user_message,
contexts=["Internal knowledge base"],
text=answer)
# Guard against prompt injection or sensitive topics
guard = openlit.guard.All(provider="openai", api_key=os.getenv("OPENAI_API_KEY"))
guard.detect(text=user_message)
return answer
if __name__ == "__main__":
user_question = input("Ask our support bot a question: ")
print(chat(user_question))
この例は、リクエストを異なるモデルにルーティングしながら、一貫したトレースとメトリクスを出力する方法を示しています。また、各メッセージに対してハルシネーション評価と複合ガードレールを実行します。ハルシネーション評価は事実の不正確さ、矛盾、捏造された情報を検出し、All ガードレールはインジェクション検出、機密トピックのフィルタリング、トピックの制限を同時に実行します。
ステップ 4: アプリケーションの実行
データをGrafana Cloudに送信するには、OTLPエンドポイントとAPIトークンが必要です。Grafana CloudスタックにログインしてOpenTelemetryの設定を開き、APIトークンを生成して OTEL エンドポイントとヘッダーをコピーします。
アプリケーションを起動する前に、これらの値を環境変数としてエクスポートします。
export OTEL_SERVICE_NAME=my-ai-app
export OTEL_DEPLOYMENT_ENVIRONMENT=production
export OTEL_EXPORTER_OTLP_ENDPOINT="https://otlp-gateway-<region>.grafana.net/otlp"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Basic <base64-instanceID:token>"
export OPENAI_API_KEY="your-openai-key"
export ANTHROPIC_API_KEY="your-anthropic-key"
python your_app.py
<region> をお使いのGrafanaのゾーン(例:prod-us-central-0) )に、<base64-instanceID: token> をBase64エンコードされたインスタンスIDとAPIトークンに置き換えてください計装されたアプリケーションを実行すると、OpenLITはOTLPゲートウェイに接続し、トレースとメトリクスの送信を開始します。
ステップ 5: Grafana Cloudでの視覚化
データがGrafanaに流れ込み始めたら、AI Observabilityダッシュボードを開きます。GenAI observabilityダッシュボードでは、リクエストレート、レイテンシのパーセンタイル、コストのメトリクスが視覚化されます。プロバイダー全体の最初のトークンまでの時間(TTFT)と全体的なレイテンシを追跡し、リクエストごとの総コストと平均コストを表面化させます。GenAI evaluationsダッシュボードは、ハルシネーション、バイアス、トキシシティの検出イベントを要約します。
Grafana Alertingは、コストがしきい値を超えた場合、レイテンシが急増した場合、または評価スコアが品質ゲートを超えた場合に通知をトリガーできます。すべてがOpenTelemetryのメトリクスに基づいて構築されているため、ユースケースに合わせたカスタムパネルやアラートを構築することも可能です。
得られる価値
実用的なインサイトを示す仮想シナリオをいくつか見てみましょう。
コストの最適化
導入前: 「AIのコストは上昇しているが、理由はわからない」
導入後: GPT-5がコストの70%を占めているがクエリの割合はわずか20%であること、シンプルなクエリをGPT-4から切り替えることで月額2,000ドルを節約できること、特定のユーザーが過剰なAPI呼び出しを行っていることなどが確認できます。
パフォーマンス監視
導入前: 「ボットの反応が時々遅いとユーザーからクレームがある」
導入後: ClaudeはGPT-4よりもTTFTが30%低く、レイテンシの急増はClaudeのAPIレート制限と相関しており、95パーセンタイルのレイテンシが3.2秒(SLAの3秒を超過)であることが判明します。
品質保証
導入前: 「ユーザーがAIの回答に満足していないのはなぜか?」
導入後: リクエストの20%にハルシネーションが含まれていること、最新のプロンプト変更後、回答の正確性が92%から81%に低下したこと、複雑なクエリにおける指示追従の失敗が15%に増加したことが確認できます。
複雑な問題のデバッグ
分散トレーシングを使用すると、ユーザーの入力からLLMの呼び出し、応答までのリクエストの流れを追跡し、エラーを引き起こした正確なプロンプトを確認できます。また、パイプラインのどの部分が遅延しているかを特定し、問題を特定のユーザーや時間帯と関連付けることが可能です。
本シリーズの次回のブログでは、エージェント型AIアプリケーション向けにこの設定をステップバイステップで行う方法をご紹介します。公式ドキュメントではAI Observabilityについてさらに詳しく学ぶことができ、AIアプリケーションを基本的なデモから本番環境のセットアップへと即座に移行させるのに役立ちます。Grafana Cloudは、メトリクス、ログ、トレース、ダッシュボードなどを始める最も簡単な方法です。私たちは、充実した永久無料枠と、あらゆるユースケース向けのプランを用意しています。今すぐ無料でアカウントを作成しましょう!
Grafana Cloudは、メトリクス、ログ、トレース、ダッシュボードなどを始める最も簡単な方法です。私たちは、充実した永久無料枠と、あらゆるユースケース向けのプランを用意しています。今すぐ無料でアカウントを作成しましょう!