Datadog LLM Observabilityを試験導入しました
株式会社IVRyのMoriyaです。
OpenAI APIなどのLLM APIの監視を行うために、Datadog LLM Observabilityを試してみました。このブログでは、Datadog LLM Observabilityの導入方法・出来ることなどをまとめました。
背景
IVRyは、AI対話システムを利用した電話自動応答を開発している会社です。
Datadog LLM Observabilityがリリースされたので、試してみることにしました。
導入方法
IVRyで開発しているAI対話システムは、Python applicationがECS上で動いています。このサービスに、Datadog LLM Observabilityを試験導入しました(staging環境のみ)。
以下のリンクに従って作業しました。
環境変数の設定
以下の環境変数をPython applicationに設定します。なお、すでにDatadog自体は利用している前提です。
DD_API_KEY: Datadog API Key
DD_SITE: データを置くDatadog site。datadoghq.comなど。
DD_LLMOBS_ENABLED: LLM obsを使うか、のflag。
DD_LLMOBS_ML_APP: アプリケーション名。
DD_LLMOBS_AGENTLESS_ENABLED: Datadog agentを経由するか、のflag。
Pythonコードの設定
decoratorか、inline methodを使うことで、Datadog LLM Observabilityのメトリクスを取得できます。
decorator
関数宣言時に、decoratorを付与することで、LLM Observabilityを利用することができます。
ただ、今回のアプリケーションの場合、decoratorを付与したらunit testが壊れたので、decoratorは採用しませんでした。
from ddtrace.llmobs.decorators import llm
@llm(model_name="claude", name="invoke_llm", model_provider="anthropic")
def llm_call():
inline method
LLM APIを呼び出しているコード全体を、with文で囲います。
これを使うと、session_idに変数を渡せるので、複数のリクエストを統一的に扱えました。
また、spanに対して、いろいろなannotationが追加できるため、カスタマイズ性能が高いです。
今回はinline methodを採用しました。
from ddtrace.llmobs import LLMObs
def llm_call():
with LLMObs.llm(
model_name="claude",
name="invoke_llm",
model_provider="anthropic",
session_id=session_id,
) as span:
.....
LLMObs.annotate(span=span, input_data=input, output_data=output)
出来ること
LLM APIの挙動をリアルタイムで確認できる
LLM APIの挙動をリアルタイムで確認することができます。session_idも付与しているため、異常が発生した際、すばやいデバッグが可能になると思います。
Latencyなどの監視も容易
Latency、エラーレートなども監視できるので、LLM系APIが壊れた際の対応も素早く出来るようになると期待できます。個人的には、この機能が一番嬉しいです。(なお、たまに稼働させるだけのstaging環境なので、以下のグラフに意味はありません)
LLM APIの分析が出来る
LLM APIの内容に応じたクラスタリング・quality checkなども出来ます。
私はそれほど使っていませんが、APIの回答が不安定になりがちな場合は、便利だと思います。
モデル間の比較がしやすくなる
モデルごとに上述した機能を閲覧できるので、どの会社・モデルが良いのかを調べるのが視覚的にやりやすくなることが期待できます。
デメリット
bugがあるかもしれない
2024年6月から開始された機能であるため、bugがあるかもしれません。
私の場合、データが送信・連携されないエラーに遭遇しました。
2024-08-28 01:59:42,390 DEBUG ddtrace.internal.writer.writer :Sending request: POST evp_proxy/v2/api/v2/llmobs {'X-Datadog-EVP-Subdomain': 'llmobs-intake', 'Content-Type': 'application/json'}
2024-08-28 01:59:42,411 DEBUG ddtrace.llmobs._llmobs :Disabling LLMObs
2024-08-28 01:59:42,412 DEBUG ddtrace.llmobs._llmobs :LLMObs disabled
Sending request: POST evp_proxy/v2/api/v2/llmobs {'X-Datadog-EVP-Subdomain': 'llmobs-intake', 'Content-Type': 'application/json'}
2024-08-28 01:59:42,417 DEBUG ddtrace.internal.writer.writer :Sending request: POST evp_proxy/v2/api/v2/llmobs {'X-Datadog-EVP-Subdomain': 'llmobs-intake', 'Content-Type': 'application/json'}
2024-08-28 01:59:42,439 DEBUG ddtrace.llmobs._llmobs :Disabling LLMObs
024-08-28 01:59:42,440 DEBUG ddtrace.llmobs._llmobs :LLMObs disabled
Sending request: POST evp_proxy/v2/api/v2/llmobs {'X-Datadog-EVP-Subdomain': 'llmobs-intake', 'Content-Type': 'application/json'}
2024-08-28 01:59:42,441 DEBUG ddtrace.internal.writer.writer :Sending request: POST evp_proxy/v2/api/v2/llmobs {'X-Datadog-EVP-Subdomain': 'llmobs-intake', 'Content-Type': 'application/json'}
Sending request: POST evp_proxy/v2/api/v2/llmobs {'X-Datadog-EVP-Subdomain': 'llmobs-intake', 'Content-Type': 'application/json'}
2024-08-28 01:59:42,457 DEBUG ddtrace.internal.writer.writer :Sending request: POST evp_proxy/v2/api/v2/llmobs {'X-Datadog-EVP-Subdomain': 'llmobs-intake', 'Content-Type': 'application/json'}
Sending request: POST evp_proxy/v2/api/v2/llmobs {'X-Datadog-EVP-Subdomain': 'llmobs-intake', 'Content-Type': 'application/json'}
dd-trace-pyにissueを立てたり、Datadogに問い合わせしましたが、エラー解決に難航していました。しかし、dd-trace-pyを先日リリースされたv2.11.2にupdateしたところ、問題が解決しました。https://github.com/DataDog/dd-trace-py/releases/tag/v2.11.2
gunicorn・celeryのようにforked processを利用するツールを使っている場合にデータが送付されないエラーがあり、それが最近になって解消されたようです。https://github.com/DataDog/dd-trace-py/pull/10249
感想
気軽に導入できて、色々なメトリクスを見られるので、とても便利だと思います。
一方で、今後改善されていく新プロダクトだと思うので、それらを勘案した上で、導入を検討すると良いのではないでしょうか。
日本語の記事は少ないですが、以下のスライドなども参考になると思います。
Datadog LLM Observability以外にも、OpenTelemetry-nativeなツールとして、OpenLIT・OpenLLMetryなどがあります。当社ではDatadogを利用しているのでDatadog LLM Observabilityを検証しましたが、これらのツールを試すのも面白いと思います。
おわりに
この開発は、IVRy開発合宿で行いました。
IVRyでの開発に興味がある方は、以下のページを閲覧してみてください!
Discussion