> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# PydanticAI

> OpenTelemetry を使用して PydanticAI のエージェントとツール呼び出しを Weave でトレースする

[OpenTelemetry (OTEL)](https://opentelemetry.io/) を使用すると、[PydanticAI](https://ai.pydantic.dev/) のエージェントとツール呼び出しを Weave でトレースできます。PydanticAI は Pydantic チームが開発した Python 向けのエージェントフレームワークで、生成 AI を活用した本番レベルのアプリケーションを簡単かつ型安全に構築できるように設計されています。PydanticAI は、すべてのエージェントとツール呼び出しのトレースに OTEL を使用します。

<Tip>
  Weave での OTEL トレースの詳細については、[Send OTEL Traces to Weave](/ja/products/wandb/weave/guides/tracking/otel) を参照してください。
</Tip>

このガイドは、PydanticAI エージェントを構築していて、エージェントとツールの実行状況を Weave で可視化したい開発者を対象としています。OTEL を使用して PydanticAI のエージェントとツール呼び出しをトレースし、そのトレースを Weave で可視化する方法を説明します。具体的には、必要な依存関係のインストール、Weave にデータを送信する OTEL トレーサーの設定、PydanticAI エージェントとツールのインストルメント方法を学びます。また、アプリケーション内のすべてのエージェントでトレースをデフォルトで有効にする方法も紹介します。

<h2 id="prerequisites">
  前提条件
</h2>

Weave にトレースを送信するには、事前に OTEL の依存関係をインストールし、OTEL エクスポーターを設定しておく必要があります。必要な OTEL の依存関係をインストールします。

```bash theme={"system"}
pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http
```

次に、[Weave で OTEL トレースを設定します](#configure-otel-tracing-in-weave)。

<h3 id="configure-otel-tracing-in-weave">
  Weave で OTEL トレースを設定する
</h3>

PydanticAI から Weave にトレースを送信するには、`TracerProvider` と `OTLPSpanExporter` を使用して OTEL を設定します。エクスポーターには、[認証と project の識別に必要な正しいエンドポイントと HTTP ヘッダー](#required-configuration)を指定してください。

APIキーや project 情報などの機密性の高い環境変数は環境ファイル (例: `.env`) に保存し、`os.environ` で読み込みます。こうすることで、認証情報を安全に管理し、コードベースから切り離しておくことができます。

<h3 id="required-configuration">
  必須の設定
</h3>

* **エンドポイント:** `https://trace.wandb.ai/otel/v1/traces`
* **ヘッダー:**
  * `Authorization`: W\&B APIキーを使用した Basic 認証。
  * `project_id`: W\&B の entity 名とプロジェクト名 (例: `myteam/myproject`) 。

<h3 id="example-setup">
  セットアップ例
</h3>

次のコードスニペットでは、OTLP スパンエクスポーターとトレーサープロバイダーを設定して、PydanticAI アプリケーションから Weave に OTEL トレースを送信する方法を示します。

```python lines theme={"system"}
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

# 機密情報を環境変数から読み込みます
WANDB_BASE_URL = "https://trace.wandb.ai"
PROJECT_ID = os.environ.get("WANDB_PROJECT_ID")  # W&B の entity/project 名（例: "myteam/myproject"）
WANDB_API_KEY = os.environ.get("WANDB_API_KEY")  # W&B APIキー

WEAVE_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,
}

# エンドポイントとヘッダーを指定して OTLP スパンエクスポーターを作成します
exporter = OTLPSpanExporter(
    endpoint=WEAVE_OTLP_ENDPOINT,
    headers=OTEL_EXPORTER_OTLP_HEADERS,
)

# トレーサープロバイダーを作成し、エクスポーターを追加します
tracer_provider = trace_sdk.TracerProvider()
tracer_provider.add_span_processor(SimpleSpanProcessor(exporter))
```

これで `tracer_provider` の準備ができました。これを PydanticAI エージェントに渡すと、エージェントの OTEL トレースを Weave に送信できます。

<h2 id="trace-pydanticai-agents-with-otel">
  OTEL を使用して PydanticAI エージェントをトレースする
</h2>

PydanticAI エージェントをトレースしてトレースデータを Weave に送信するには、トレーサープロバイダーを設定した `InstrumentationSettings` オブジェクトを `Agent` コンストラクターに渡します。これにより、エージェントのすべての Call とツール呼び出しが OTEL の設定に従ってトレースされます。

次の例では、トレースを有効にした基本的なエージェントを作成する方法を示します。重要なのは、エージェントの初期化時に `instrument` 引数を設定することです。

```python lines theme={"system"}
from pydantic_ai import Agent
from pydantic_ai.models.instrumented import InstrumentationSettings

# OTEL トレースを有効にして PydanticAI エージェントを作成します
agent = Agent(
    "openai:gpt-4o",
    instrument=InstrumentationSettings(tracer_provider=tracer_provider),
)

result = agent.run_sync("What is the capital of France?")
print(result.output)
```

エージェントへのすべての Call はトレースされ、Weave に送信されます。

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/weave/_media/pydanticai_agent_trace.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=f2f1eb9fc9deea12e26eddb5a730f7ec" alt="基本的な PydanticAI エージェントのトレースの可視化" width="2910" height="1594" data-path="products/wandb/weave/_media/pydanticai_agent_trace.png" />
</Frame>

<h2 id="trace-pydanticai-tools-with-otel">
  OTEL を使用して PydanticAI のツールをトレースする
</h2>

Weave は、OTEL でインストルメントされた PydanticAI のあらゆる操作をトレースできます。これには、エージェントの呼び出しとツール呼び出しの両方が含まれます。つまり、エージェントがツール (たとえば、`@agent.tool_plain` でデコレートされた関数) を呼び出すと、ツールの入力と出力、モデルの推論を含むやり取り全体が取得され、Weave で可視化されます。

次の例では、システムプロンプトとツールを備えたエージェントを作成する方法を示します。トレースは、エージェントとツールの両方で自動的に有効になります。

```python lines theme={"system"}
from pydantic_ai import Agent
from pydantic_ai.models.instrumented import InstrumentationSettings

# システムプロンプトと OTEL トレースを設定した PydanticAI エージェントを作成する
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),
)

# ツールを定義する
@agent.tool_plain
def multiply(a: int, b: int) -> int:
    """Multiply two numbers."""
    return a * b

# エージェントにツールを使用させる
result = agent.run_sync("What is 7 multiplied by 8?")
print(result.output)
```

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/weave/_media/pydanticai_tool_call.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=56bcdd0ce8a0fb0c00ef790632dda6e8" alt="ツール呼び出しのトレースの可視化" width="2912" height="1592" data-path="products/wandb/weave/_media/pydanticai_tool_call.png" />
</Frame>

エージェントの Call とツール呼び出しはどちらも Weave でトレースされるため、アプリケーションの推論と実行パスの全体を確認できます。

<h2 id="instrument-all-agents-by-default">
  デフォルトですべてのエージェントをインストルメントする
</h2>

アプリケーション内のすべての PydanticAI エージェントに OTEL トレースを適用するには、`Agent.instrument_all()` メソッドを使用します。このメソッドは、`instrument` パラメーターを明示的に指定していないすべてのエージェントに対して、デフォルトの `InstrumentationSettings` インスタンスを設定します。

```python lines theme={"system"}
from pydantic_ai import Agent
from pydantic_ai.models.instrumented import InstrumentationSettings

# すべてのエージェントにデフォルトのインストルメンテーションを設定します
Agent.instrument_all(InstrumentationSettings(tracer_provider=tracer_provider))

# 以降に作成するエージェントは、すべてデフォルトでこのインストルメンテーションを使用します
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 ドキュメント](https://ai.pydantic.dev/logfire/#using-logfire)を参照してください。

<h2 id="learn-more">
  詳細情報
</h2>

* [Weave ドキュメント: OTEL トレースを Weave に送信する](/ja/products/wandb/weave/guides/tracking/otel)
* [OTEL 公式ドキュメント](https://opentelemetry.io/)
* [PydanticAI 公式ドキュメント](https://ai.pydantic.dev/)
* [PydanticAI GitHub リポジトリ](https://github.com/pydantic/pydantic-ai)
