LLM Observability のセットアップ
選択されたサイト () では、現時点では LLM Observability はご利用いただけません。
概要
LLM Observability へのデータ送信を開始するには、LLM Observability SDK for Python を使用するか、LLM Observability API を呼び出してアプリケーションをインスツルメンテーションします。
LLM アプリケーションのインタラクションとパフォーマンスデータは、LLM Observability Traces ページで視覚化できます。アプリケーションが処理した各リクエストはトレースとして表示されます。
トレースの詳細については、用語と概念を参照し、アプリケーションのニーズに最も適したインスツルメンテーションオプションを決定してください。
LLM アプリケーションのインスツルメンテーション
Datadog では、特定の LLM プロバイダライブラリに対する LLM コールをキャプチャするための自動インスツルメンテーションを提供しています。ただし、LLM Observability SDK for Python を使用して LLM アプリケーションを手動でインスツルメンテーションすると、追加の LLM Observability 機能にアクセスできるようになります。
LLM アプリケーションをインスツルメンテーションするには
- LLM Observability SDK for Python をインストールします。
- アプリケーションの起動コマンドで必要な環境変数を指定するか、プログラムでコード内で指定して、SDK を構成します。Datadog API キー、Datadog サイト、機械学習 (ML) アプリ名を構成していることを確認してください。
LLM アプリケーションのトレース
LLM アプリケーションをトレースするには
LLM アプリケーションコードでスパンを作成して、アプリケーションの操作を表現します。スパンについての詳細は、用語と概念を参照してください。
より便利なトレースを作成するためにスパンをネストすることができます。追加の例や詳細な使用方法については、LLM アプリケーションのトレースおよび SDK ドキュメントを参照してください。
入力データ、出力データ、メタデータ (temperature
など)、メトリクス (input_tokens
など)、キー値タグ (version:1.0.0
など) をスパンに注釈として追加します。
オプションとして、ユーザーセッションなどの高度なトレース機能を追加します。
LLM アプリケーションを実行します。
- コマンドラインによるセットアップ方法を使用した場合は、アプリケーションを実行するコマンドに
ddtrace-run
を使用する必要があります。これは、こちらの指示に記載されています。 - コード内セットアップ方法を使用した場合は、通常通りアプリケーションを実行します。
生成されたトレースは LLM Observability Traces ページの Traces タブで、生成されたメトリクスはすぐに使える LLM Observability Overview ダッシュボードで確認できます。
スパンの作成
スパンを作成するには、LLM Observability SDK では、関数デコレーターを使用する方法と、インラインのコンテキストマネージャーを使用する方法の 2 つのオプションが用意されています。
関数デコレーターを使用する方法が推奨されます。コンテキストマネージャーを使用する方法はより高度で、トレースをより細かく制御できます。
- デコレーター
ddtrace.llmobs.decorators.<SPAN_KIND>()
を、トレースしたい関数にデコレーターとして使用します。 <SPAN_KIND>
を希望するスパン種類に置き換えます。- インライン
ddtrace.llmobs.LLMObs.<SPAN_KIND>()
をコンテキストマネージャーとして使用して、任意のインラインコードをトレースします。 <SPAN_KIND>
を希望するスパン種類に置き換えます。
以下の例ではワークフロースパンを作成します。
from ddtrace.llmobs.decorators import workflow
@workflow
def extract_data(document):
... # LLM を搭載したワークフローにより、ドキュメントから構造データを抽出します
return
from ddtrace.llmobs import LLMObs
def extract_data(document):
with LLMObs.workflow(name="extract_data") as span:
... # LLM を搭載したワークフローにより、ドキュメントから構造データを抽出します
return
スパンにアノテーションを付ける
入力、出力、メタデータ、メトリクス、タグなどの追加情報をスパンに追加するには、LLM Observability SDK の LLMObs.annotate()
メソッドを使用します。
以下の例では、上記の例で作成したワークフロースパンに注釈を付けています。
from ddtrace.llmobs import LLMObs
from ddtrace.llmobs.decorators import workflow
@workflow
def extract_data(document: str, generate_summary: bool):
extracted_data = ... # ユーザーアプリケーションロジック
LLMObs.annotate(
input_data=document,
output_data=extracted_data,
metadata={"generate_summary": generate_summary},
tags={"env": "dev"},
)
return extracted_data
from ddtrace.llmobs import LLMObs
def extract_data(document: str, generate_summary: bool):
with LLMObs.workflow(name="extract_data") as span:
... # ユーザーアプリケーションロジック
extracted_data = ... # ユーザーアプリケーションロジック
LLMObs.annotate(
input_data=document,
output_data=extracted_data,
metadata={"generate_summary": generate_summary},
tags={"env": "dev"},
)
return extracted_data
スパンのネスト
現在のスパンが終了する前に新しいスパンを開始すると、2 つのスパン間の親子関係が自動的にトレースされます。親スパンはより大きな操作を表し、子スパンはそれより小さなネストされたサブ操作を表します。
以下の例では、2 つのスパンでトレースを作成しています。
from ddtrace.llmobs.decorators import task, workflow
@workflow
def extract_data(document):
preprocess_document(document)
... # ドキュメントのデータ抽出を行います
return
@task
def preprocess_document():
... # ドキュメントをデータ抽出用に前処理します
return
from ddtrace.llmobs import LLMObs
def extract_data():
with LLMObs.workflow(name="extract_data") as workflow_span:
with LLMObs.task(name="preprocess_document") as task_span:
... # ドキュメントをデータ抽出用に前処理します
... # ドキュメントのデータ抽出を行います
return
その他のトレース方法およびトレース機能の詳細については、SDK ドキュメントを参照してください。
高度なトレース
LLM アプリケーションの複雑さに応じて、次のことも可能です。
権限
デフォルトでは、Datadog Read ロールを持つユーザーのみが LLM Observability を表示できます。詳細については、権限ドキュメントを参照してください。
その他の参考資料