こんにちは!生成AIやLLM(大規模言語モデル)を使ったアプリケーション開発、めちゃくちゃ面白い反面、「なんだかブラックボックスすぎて怖い」と感じていませんか?
「ユーザーが入力したプロンプトに対して、モデルが変な回答をしていないか?」
「気づいたらOpenAIのAPI利用料が爆発していて、月末に青ざめないか?」
「なんだか最近、LLMの応答がやたら遅い気がするけど、どこがボトルネックなんだ?」
従来のWebアプリなら、Datadog APMを使えばデータベースのクエリやHTTPリクエストの遅延は一目瞭然でした。しかし、LLMが絡むと、「プロンプトの内容」「トークン消費量」「コスト」「レイテンシー(応答速度)」という、まったく新しい次元の監視が必要になります。
今回は、そんな生成AIの「見えない不安」を綺麗に可視化し、あなたのプロダクトを強固に守る「Datadog LLM Observability」の世界へご案内します。これをマスターすれば、毎日の運用が劇的に楽になりますよ。一緒に一歩ずつ進んでいきましょう!
—
1. なぜLLMアプリケーションには専用の監視が必要なのか?
従来のシステム監視と、LLMアプリの監視の最大の違いは、「入力も出力も非構造化データ(テキスト)であり、毎回結果が変わる可能性(非決定性)がある」という点です。
例えば、普通のWebアプリなら「HTTP 500エラー」を検知すれば原因を特定できますが、LLMアプリの場合、以下のような問題は従来のメトリクス監視では絶対に検知できません。
1. コストのブラックボックス化: ユーザーの何気ない長文プロンプトや、ループするLangChainのエージェントによって、知らぬ間に数千円〜数万円のAPIコストが溶けていく。
2. レイテンシーの魔物: LangChainやLlamaIndexなどのオーケストレーションフレームワークを使うと、内部で何回もLLM呼び出し(チェーン)が発生し、ユーザーが画面の前で数秒間フリーズしたように待たされる。
3. ハルシネーションと不適切出力: ブランドを傷つける回答や、安全性を欠いた出力がユーザーに返されてしまう。
これらをまるっと解決するために生まれたのが、DatadogのLLM Observabilityです。プロンプトの中身からトークン単価、チェーン全体の呼び出しグラフまでを一つのダッシュボードで完全に追跡できます。
—
2. セットアップの全体像とAPIキーの設定手順
それでは、実際に手を動かしていきましょう。今回は、Python(OpenAI SDKおよびLangChain)を使ったモダンなLLMアプリケーションを想定してセットアップを行います。
ステップ1: 必要なパッケージのインストール
まずは、Datadogのトレーシングライブラリと、OpenAI、LangChainのライブラリをインストールします。ターミナルを開いて、以下のコマンドを実行してください。
DatadogのトレーシングライブラリとLLM対応パッケージをインストール
pip install ddtrace langchain openai
ステップ2: 環境変数の設定
Datadog LLM Observabilityを有効化するためには、おなじみのDatadogエージェント(またはAPM環境)に加え、LLM特有の環境変数を設定する必要があります。
以下の環境変数を、`.env`ファイルまたはターミナルのセッションに設定してください。
— Datadog 共通設定 —
export DD_SITE=”datadoghq.com” # ご自身のDatadogリージョンに合わせて変更してください (例: datadoghq.eu など)
export DD_API_KEY=”あなたのDatadog_API_KEY”
— LLM Observability 特有の有効化フラグ —
export DD_LLM_OBSERVABILITY_ENABLED=true
export DD_SERVICE=”my-llm-app”
export DD_ENV=”development”
— OpenAIのAPIキー —
export OPENAI_API_KEY=”あなたのOpenAI_API_KEY”
これだけで、Datadog側の準備は完了です!
—
3. 精度高い「Hello World」:LLMトレースの実装
それでは、実際にOpenAIのAPIを叩き、そのトレースがDatadogに飛ぶ様子を確認する最小限のコード(Hello World)を作成しましょう。
`app.py`というファイルを作成し、以下のコードを記述してください。
import os
from openai import OpenAI
from ddtrace import patch_all
1. ddtraceのパッチを有効化することで、OpenAIへのリクエストを自動的にキャッチします
patch_all(openai=True)
OpenAIクライアントの初期化(環境変数 OPENAI_API_KEY が自動で読み込まれます)
client = OpenAI()
def run_llm_hello_world():
print(“🤖 LLMへリクエストを送信中…”)
# OpenAIのChat Completions APIを呼び出し
response = client.chat.completions.create(
model=”gpt-4o-mini”, # コストパフォーマンス抜群の最新モデル
messages=[
{“role”: “system”, “content”: “あなたは優秀で親切なオブザーバビリティの専門家です。”},
{“role”: “user”, “content”: “Datadog LLM Observabilityを使うメリットを、エンジニア向けに1行で教えて!”}
],
temperature=0.7,
)
# 応答の取得
answer = response.choices[0].message.content
print(f”\n✨ 応答結果:\n{answer}”)
if __name__ == “__main__”:
run_llm_hello_world()
実行と動作確認
ターミナルからこのスクリプトを実行してみましょう。
python app.py
実行が無事に成功したら、DatadogのUI(LLM Observabilityのメニュー)を開いてみてください。
数秒〜数十秒以内に、以下のような情報が綺麗にダッシュボードに流れてきているはずです!
- プロンプトの内容とシステムプロンプトの確認
- モデル名(`gpt-4o-mini`)とプロンプト・生成トークンの消費数
- ミリ秒単位のレイテンシー(応答時間)
- このリクエストにかかったおおよその推定コスト
「おぉ、本当に自分たちのアプリの裏側が丸見えになった!」と感動する瞬間です。
—
4. 実践的アプローチ:LangChainとの統合・コスト・レイテンシーの最適化
基礎的な動作確認ができたら、次はもう少し実践的なユースケースを見ていきましょう。
実務では、単体のOpenAI呼び出しではなく、LangChainなどを使って複数のステップ(検索 + 生成など)を組み合わせることが多いはずです。
ここでは、LangChainを使ったコードでDatadogがいかに強力に働くかを見てみます。
import os
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from ddtrace import patch_all
LangChainやOpenAIの動きを自動トレーシング
patch_all(langchain=True, openai=True)
def run_langchain_pipeline():
# LLMの初期化
llm = ChatOpenAI(model=”gpt-4o-mini”, temperature=0.3)
# プロンプトテンプレートの作成
prompt = ChatPromptTemplate.from_messages([
(“system”, “あなたは技術サポートBotです。ユーザーの質問に簡潔に答えてください。”),
(“user”, “{user_query}”)
])
# チェーンの構築
chain = prompt | llm
print(“⛓️ LangChainのチェーンを実行中…”)
result = chain.invoke({“user_query”: “Datadogでコスト急増を防ぐにはどうすればいい?”})
print(f”\n✨ チェーンの応答:\n{result.content}”)
if __name__ == “__main__”:
run_langchain_pipeline()
Datadogでこれを見ると何が嬉しいのか?
このコードをDatadog上でトレーシングすると、単なる1回のAPI呼び出しではなく、「スパン(Span)」のツリー構造として可視化されます。
1. チェーン全体のルートスパン: ユーザーからのリクエストを受け付けてから返却するまでの総合レイテンシー(例: 1.2秒)。
2. プロンプト構築のスパン: テンプレートに変数を埋め込むのにかかった時間。
3. LLM呼び出しのスパン: 実際にOpenAIのAPIサーバーと通信していた時間と、消費されたトークン数。
これにより、「どこで時間がかかっているのか(レイテンシーのボトルネック)」や、「どのユーザーからのリクエストが最もトークンを消費しているか(コストの最適化対象)」を、勘に頼らずデータに基づいて正確に特定できるようになります。
—
まとめ
今回は、Datadog LLM Observabilityの基本概念から、実際のセットアップ、そしてOpenAIやLangChainを使った実践的なトレーシング手法までを駆け足で解説しました。
生成AIアプリケーションの開発は、どうしても「動かしてみないとわからない」部分が多くなりがちです。しかし、Datadogという強力なレンズを通すことで、プロンプトの揺れ、コストの肥大化、レイテンシーの遅延といった「見えないリスク」を完全に見通すことができるようになります。
これをマスターすれば、プロダクトの品質に圧倒的な自信を持てるようになり、毎日の運用管理が劇的に楽になりますよ。
ぜひ今日の開発環境に組み込んで、あなたのLLMアプリの「中身」を覗いてみてください!