Documentation Index
Fetch the complete documentation index at: https://wb-21fd5541-feature-automate-reference-docs-generation.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
PydanticAIエージェントとツールの呼び出しをOpenTelemetry (OTEL). PydanticAIはPydanticチームによって構築されたPythonエージェントフレームワークで、生成AIを使用した本番環境グレードのアプリケーションを簡単かつ型安全に構築することができます。エージェントとツールの呼び出しをすべてトレースするためにOTELを使用しています。
このガイドでは、OTELを使用してPydanticAIエージェントとツールの呼び出しをトレースし、それらのトレースをWeaveで視覚化する方法を説明します。必要な依存関係のインストール方法、Weaveにデータを送信するためのOTELトレーサーの設定方法、PydanticAIエージェントとツールの計測方法について学びます。また、アプリケーション内のすべてのエージェントでデフォルトでトレースを有効にする方法も紹介します。
前提条件
始める前に、必要なOTEL依存関係をインストールしてください:
pip install opentelemetry-sdk OTELemetry-exporter-otlp-proto-http
次に、WeaveでOTELトレースを設定する.
WeaveでOTELトレースを設定する
PydanticAIからWeaveにトレースを送信するには、OTELをTracerProviderとOTLPSpanExporterで設定します。エクスポーターを認証とプロジェクト識別のための正しいエンドポイントとHTTPヘッダーに設定します。
APIキーやプロジェクト情報などの機密性の高い環境変数は、環境ファイル(例:.env)に保存し、os.environを使用してロードすることをお勧めします。これにより、認証情報を安全に保ち、コードベースから分離することができます。
必要な設定
- Endpoint:
https://trace.wandb.ai/otel/v1/traces
- Headers:
Authorization:W&B APIキーを使用した基本認証
project_id:W&Bのエンティティ/プロジェクト名(例:myteam/myproject)
セットアップ例
以下のコードスニペットは、PydanticAIアプリケーションからWeaveにOTELトレースを送信するためのOTLPスパンエクスポーターとトレーサープロバイダーを設定する方法を示しています。
import base64
import os
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk import trace as trace_sdk
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
# Load sensitive values from environment variables
WANDB_BASE_URL = "https://trace.wandb.ai"
PROJECT_ID = os.environ.get("WANDB_PROJECT_ID") # Your W&B entity/project name e.g. "myteam/myproject"
WANDB_API_KEY = os.environ.get("WANDB_API_KEY") # Your W&B API key
OTEL_EXPORTER_OTLP_ENDPOINT = f"{WANDB_BASE_URL}/otel/v1/traces"
AUTH = base64.b64encode(f"api:{WANDB_API_KEY}".encode()).decode()
OTEL_EXPORTER_OTLP_HEADERS = {
"Authorization": f"Basic {AUTH}",
"project_id": PROJECT_ID,
}
# Create the OTLP span exporter with endpoint and headers
exporter = OTLPSpanExporter(
endpoint=OTEL_EXPORTER_OTLP_ENDPOINT,
headers=OTEL_EXPORTER_OTLP_HEADERS,
)
# Create a tracer provider and add the exporter
tracer_provider = trace_sdk.TracerProvider()
tracer_provider.add_span_processor(SimpleSpanProcessor(exporter))
OTELでPydanticAIエージェントをトレースする
PydanticAIエージェントをトレースしてトレースデータをWeaveに送信するには、InstrumentationSettingsオブジェクトをトレーサープロバイダーで設定してAgent constructorに渡します。これにより、すべてのエージェントとツールの呼び出しがOTEL設定に従ってトレースされます。
以下の例は、トレースを有効にした簡単なエージェントを作成する方法を示しています。重要なステップは、エージェントを初期化するときにinstrument引数を設定することです:
from pydantic_ai import Agent
from pydantic_ai.models.instrumented import InstrumentationSettings
# Create a PydanticAI agent with OTEL tracing
agent = Agent(
"openai:gpt-4o",
instrument=InstrumentationSettings(tracer_provider=tracer_provider),
)
result = agent.run_sync("What is the capital of France?")
print(result.output)
エージェントへのすべての呼び出しがトレースされ、Weaveに送信されます。
OTELでPydanticAIツールをトレースする
WeaveはOTELで計測されたPydanticAIの操作をすべてトレースできます。これにはエージェントとツールの呼び出しの両方が含まれます。つまり、エージェントがツール(例えば@agent.tool_plainでデコレートされた関数)を呼び出すとき、ツールの入力、出力、モデルの推論を含む相互作用全体がキャプチャされ、Weaveで視覚化されます。
以下の例は、システムプロンプトとツールを持つエージェントを作成する方法を示しています。トレースはエージェントとツールの両方に対して自動的に有効になります:
from pydantic_ai import Agent
from pydantic_ai.models.instrumented import InstrumentationSettings
# Create a PydanticAI agent with a system prompt and OTEL tracing
agent = Agent(
"openai:gpt-4o",
system_prompt=(
"You are a helpful assistant that can multiply numbers. "
"When asked to multiply numbers, use the multiply tool."
),
instrument=InstrumentationSettings(tracer_provider=tracer_provider),
)
# Define a tool
@agent.tool_plain
def multiply(a: int, b: int) -> int:
"""Multiply two numbers."""
return a * b
# Ask the agent to use the tool
result = agent.run_sync("What is 7 multiplied by 8?")
print(result.output)
エージェントの呼び出しとツールの呼び出しの両方がWeaveでトレースされ、アプリケーションの完全な推論と実行パスを検査できます。
すべてのエージェントをデフォルトで計測する
アプリケーション内のすべてのPydanticAIエージェントにOTELトレースを適用するには、Agent.instrument_all()メソッドを使用します。これにより、InstrumentationSettingsパラメータを明示的に指定しないエージェントに対してデフォルトのinstrumentインスタンスが設定されます。
from pydantic_ai import Agent
from pydantic_ai.models.instrumented import InstrumentationSettings
# Set up default instrumentation for all agents
Agent.instrument_all(InstrumentationSettings(tracer_provider=tracer_provider))
# Now, any new agent will use this instrumentation by default
agent1 = Agent("openai:gpt-4o")
agent2 = Agent("openai:gpt-4o", system_prompt="Be helpful.")
result = agent1.run_sync("What is the capital of France?")
print(result.output)
これは、設定を繰り返すことなく、すべてのエージェントで一貫したトレースを行いたい大規模なアプリケーションに役立ちます。詳細については、PydanticAI OTELドキュメントを参照してください。
詳細情報