このエンドポイントは Traces ビューと スレッド ビューにデータを送ります。multi-turn エージェント から Agents ビューに OTel スパンを送信するには、代わりに agents エンドポイントを使用してください。詳細は、OpenTelemetry スパンを Agents ビューに送信するを参照してください。
エンドポイント の詳細
- Path:
/otel/v1/traces - Method:
POST - Content-Type:
application/x-protobuf - Base URL: OTelトレースエンドポイントのベースURLは、W&Bのデプロイタイプによって異なります。
- Multi-tenant Cloud:
https://trace.wandb.ai/otel/v1/traces. - 専用クラウドおよびセルフマネージドのインスタンス:
https://<your-subdomain>.wandb.io/traces/otel/v1/traces.
<your-subdomain> は、組織固有のW&Bドメイン (例: acme.wandb.io) に置き換えてください。
認証とルーティング
Weave では、wandb-api-key ヘッダーを使用してリクエストを認証し、TracerProvider のリソース属性を使用してスパンを適切な エンティティ と project にルーティングします。wandb-api-key ヘッダーに W&B APIキーを渡したうえで、TracerProvider クラスで次のキーを OpenTelemetry の Resource 属性として指定します。
wandb.entity: W&B のチーム名またはユーザー名。wandb.project: トレースの送信先となるプロジェクト名。
例
以下の例では、Python と TypeScript を使用して OpenTelemetry トレースを Weave に送信する方法を示します。各例では、OpenInference インストルメンテーション ライブラリを使用する方法、OpenLLMetry インストルメンテーションを使用する方法、またはインストルメンテーション パッケージを使わずに OpenTelemetry SDK を直接使用する方法という、異なるアプローチを取り上げています。 以下のコード サンプルを実行する前に、次の項目を設定してください。WANDB_API_KEY: これは User Settings から取得できます。- Entity: トレースをログできるのは、アクセス権のあるチーム / エンティティ配下の project のみです。エンティティ名を確認するには、W&B ダッシュボード にアクセスし、左サイドバーの Teams フィールドを確認してください。
- Project name: プロジェクト名を選択してください。
OPENAI_API_KEY: これは OpenAI dashboard から取得できます。
OpenInference インストルメンテーション
OpenInferenceは、LLM Call を OpenTelemetry のスパンとして取得する、Arize AI のオープンソースのインストルメンテーションライブラリです。この例では、OpenAI インストルメンテーションの使い方を示します。利用可能なものはほかにも多数あり、公式リポジトリで確認できます。 まず、必要な依存関係をインストールします。- Python
- TypeScript
- Python
- TypeScript
openinference_example.py などの Python ファイルに、以下のコードを貼り付けます。OpenLLMetry インストルメンテーション
OpenLLMetry は、Traceloop が提供するオープンソースのオブザーバビリティ ライブラリであり、一般的な LLM プロバイダやフレームワーク向けの OpenTelemetry インストルメンテーションを提供します。次の例は、OpenAI インストルメンテーションの使い方を示しています。その他の例は OpenLLMetry repository で確認できます。 まず、必要な依存関係をインストールします。- Python
- TypeScript
- Python
- TypeScript
次のコードを、コードを実行します。
openllmetry_example.py などの Python ファイルに貼り付けてください。上記のコードと同じですが、OpenAIInstrumentor は openinference.instrumentation.openai ではなく opentelemetry.instrumentation.openai から import しています。インストルメンテーションを使用しない場合
インストルメンテーションパッケージの代わりに OTel を直接使用することもできます。この方法では、各 span に設定する属性を完全に制御できます。Weave は、https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-spans/ で説明されている OpenTelemetry のセマンティック規約に従って span 属性を解析します。 まず、必要な依存関係をインストールします。- Python
- TypeScript
- Python
- TypeScript
次のコードを、コードを実行します。
opentelemetry_example.py などの Python ファイルに貼り付けてください。gen_ai と openinference を使用します。どちらのキーも検出されない場合は、すべての スパン属性が Trace view に表示されます。トレースを選択すると、サイドパネルで スパン全体を確認できます。
OpenTelemetry Collector を使用する
上記の例では、トレースをアプリケーションから Weave に直接エクスポートしています。本番環境では、アプリケーションと Weave の間の中継役として OpenTelemetry Collector を使用できます。この collector はアプリからトレースを受信し、その後 1 つ以上のバックエンドに転送します。このパターンでは、認証、バッチ処理、ルーティングのロジックをアプリケーションコードの外部に集約でき、単一のパイプラインから複数の オブザーバビリティ バックエンドへトレースを振り分けて送信できます。collector を設定する
このセクションでは、Docker でローカルの OpenTelemetry Collector を実行し、アプリケーションがそこにトレースを送信するよう設定する手順を説明します。次の例では、以下の方法を示します。- OTLP トレースを受信し、バッチ処理して Weave に転送するローカルサーバー (collector) をデプロイする Docker の設定ファイルを設定する。
- Docker を使用して、collector をローカルで実行する。
- Docker コンテナー内で実行中の collector にトレースを転送する、OpenAI への基本的な call を送信する。
collector-config.yaml ファイルを作成します。
collector-config.yaml
- ポート
4318(HTTP) で OTLP トレースを受信します。 wandb-api-keyヘッダーを使ってトレースを Weave の OTLP エンドポイントにエクスポートします。エンドポイント URL はWANDB_OTLP_ENDPOINTから、APIキーはWANDB_API_KEYから読み取ります。resourceプロセッサを使用してwandb.entityとwandb.projectをリソース属性として設定します。値はDEFAULT_WANDB_ENTITYとDEFAULT_WANDB_PROJECTから読み取ります。insertaction は、アプリケーションコードですでにこれらの属性を設定していない場合にのみ、これらの属性を追加します。- ネットワーク負荷を減らすため、バッチ処理とともにエクスポーター組み込みの
sending_queueを有効にします。
OTEL_EXPORTER_OTLP_ENDPOINT 環境変数を設定して、アプリケーションがそこにトレースをエクスポートするように構成します。OTel SDK はこの変数を自動的に読み取るため、exporter にエンドポイントを渡す必要はありません。
アプリケーションの TracerProvider で wandb.entity または wandb.project をリソース属性として設定すると、それらは collector の設定で定義されたデフォルトよりも優先されます。
OpenAIInstrumentor は OpenAI の Call をラップし、トレースを作成して collector にエクスポートします。collector は認証と Weave へのルーティングを処理します。
スクリプトの実行後、Weave UI でトレースを表示できます。
トレースを追加のバックエンドに送信するには、エクスポーターを追加し、それらを service.pipelines.traces.exporters リストに含めます。たとえば、同じ Collector インスタンスから Weave と Jaeger の両方にエクスポートできます。
OTel トレースをスレッドに整理する
Weave threads を使用すると、関連するトレースをグループ化して、複数ターンの会話やユーザーセッションを 1 つの単位として分析できます。特定のスパン属性を追加して OpenTelemetry トレースをスレッドに整理すると、Weave の Thread UI を使って、複数ターンの会話やユーザーセッションなどの関連する操作を分析できます。 スレッドのグループ化を有効にするには、OTel スパンに次の属性を追加します。wandb.thread_id: スパンを特定のスレッドにグループ化します。wandb.is_turn: スパンを会話のターンとしてマークします (スレッドビューでは行として表示されます) 。
wandb.thread_id を使用して関連する操作をグループ化し、wandb.is_turn を使用してスレッドビューで行として表示される高レベルの操作をマークします。
初期設定
初期設定
これらの例を実行するには、この設定を使用します。
- Python
- TypeScript
基本的な単一ターンのスレッドをトレースする
基本的な単一ターンのスレッドをトレースする
- Python
- TypeScript
同じ thread ID を共有する複数ターンの会話をトレースする
同じ thread ID を共有する複数ターンの会話をトレースする
- Python
- TypeScript
深くネストされた処理をトレースし、最も外側の span のみをターンとしてマークする
深くネストされた処理をトレースし、最も外側の span のみをターンとしてマークする
- Python
- TypeScript
スレッドに属しているもののターンではないバックグラウンド処理をトレースする
スレッドに属しているもののターンではないバックグラウンド処理をトレースする
- Python
- TypeScript
thread_id ごとにグループ化され、各ターンは個別の行として表示されます。
属性マッピング
Weave は、さまざまなインストルメンテーション フレームワークの OpenTelemetry span 属性を内部データモデルにマッピングします。このマッピングにより、Weave で豊富なビューを得るために既存のインストルメンテーションの属性名を変更したり変換したりする必要はありません。複数の属性名が同じフィールドに対応する場合、Weave は優先順位に従ってそれらを適用するため、同じトレース内で複数のフレームワークを共存させることができます。対応フレームワーク
Weave は、以下のオブザーバビリティフレームワークおよび SDK の属性規約に対応しています。- OpenTelemetry GenAI: 生成 AI 向けの標準セマンティック規約 (
gen_ai.*)。 - OpenInference: Arize AI のインストルメンテーションライブラリ (
input.value,output.value,llm.*,openinference.*)。 - Vercel AI SDK: Vercel の AI SDK 属性 (
ai.prompt,ai.response,ai.model.*,ai.usage.*)。 - MLflow: MLflow のトラッキング属性 (
mlflow.spanInputs,mlflow.spanOutputs)。 - Traceloop: OpenLLMetry のインストルメンテーション (
traceloop.entity.*,traceloop.span.kind)。 - Google Vertex AI: Vertex AI のエージェント属性 (
gcp.vertex.agent.*)。 - OpenLit: OpenLit のオブザーバビリティ属性 (
gen_ai.content.completion)。 - Logfire / Pydantic AI: Logfire の Pydantic AI 向けインストルメンテーション (
gen_ai.input.messages,gen_ai.output.messages,pydantic_ai.all_messages,final_result)。 - Langfuse: Langfuse のトレース属性 (
langfuse.startTime,langfuse.endTime)。