トレーシング
Agents SDK には組み込みのトレーシングが含まれており、エージェントの実行中に発生するイベントの包括的な記録を収集します。LLM の生成、ツール呼び出し、ハンドオフ、ガードレール、さらにはカスタムイベントまで含まれます。Traces ダッシュボード を使用すると、開発中や本番環境でワークフローをデバッグ、可視化、監視できます。
エクスポートループのライフサイクル
Section titled “エクスポートループのライフサイクル”ほとんどの環境では、トレースは定期的に自動エクスポートされます。ブラウザや Cloudflare Workers では、この機能はデフォルトで無効です。トレースが大量にキューに溜まった場合はエクスポートされますが、定期的にはエクスポートされません。代わりに、コードのライフサイクルの一環として getGlobalTraceProvider().forceFlush() を使用して手動でトレースをエクスポートしてください。
たとえば、Cloudflare Worker では、コードを try/catch/finally ブロックでラップし、waitUntil とともに強制フラッシュを使用して、ワーカー終了前にトレースがエクスポートされるようにします。
import { getGlobalTraceProvider } from '@openai/agents';
export default { async fetch(request, env, ctx): Promise<Response> { try { // your agent code here return new Response(`success`); } catch (error) { console.error(error); return new Response(String(error), { status: 500 }); } finally { // make sure to flush any remaining traces before exiting ctx.waitUntil(getGlobalTraceProvider().forceFlush()); } },};トレースとスパン
Section titled “トレースとスパン”- Traces は、「ワークフロー」の単一のエンドツーエンドな操作を表します。トレースはスパンから構成され、次のプロパティがあります:
workflow_name: 論理的なワークフローまたはアプリです。例: “Code generation” や “Customer service”trace_id: トレースの一意の ID。未指定時は自動生成。形式はtrace_<32_alphanumeric>group_id: 任意のグループ ID。同一会話の複数トレースを関連付けるためのもの。例: チャットスレッド IDdisabled: True の場合、このトレースは記録されないmetadata: 任意のメタデータ
- Spans は開始時刻と終了時刻を持つ操作を表します。スパンには次があります:
started_atとended_atのタイムスタンプ- 所属するトレースを表す
trace_id - 親スパンを指す
parent_id(ある場合) - スパンに関する情報である
span_data。例えば、AgentSpanDataはエージェントに関する情報、GenerationSpanDataは LLM 生成に関する情報など
デフォルトのトレーシング
Section titled “デフォルトのトレーシング”デフォルトで、SDK は次をトレースします:
run()またはRunner.run()全体をTraceでラップ- エージェントが実行されるたびに
AgentSpanでラップ - LLM の生成は
GenerationSpanでラップ - 関数ツールの呼び出しはそれぞれ
FunctionSpanでラップ - ガードレールは
GuardrailSpanでラップ - ハンドオフは
HandoffSpanでラップ
デフォルトでは、トレース名は “Agent workflow” です。withTrace を使用するとこの名前を設定できます。または、RunConfig.workflowName で名前やその他のプロパティを設定できます。
さらに、カスタムトレースプロセッサー を設定して、(置き換えまたは追加の送信先として)他の送信先にトレースをプッシュできます。
音声エージェントのトレーシング
Section titled “音声エージェントのトレーシング”デフォルトの OpenAI Realtime API とともに RealtimeAgent および RealtimeSession を使用している場合、RealtimeSession 側で tracingDisabled: true を指定するか、環境変数 OPENAI_AGENTS_DISABLE_TRACING を使用して無効化しない限り、トレーシングは Realtime API 側で自動的に行われます。
詳しくは 音声エージェントの概要 を参照してください。
高レベルのトレース
Section titled “高レベルのトレース”複数回の run() 呼び出しを 1 つのトレースにまとめたい場合があります。これは、コード全体を withTrace() でラップすることで実現できます。
import { Agent, run, withTrace } from '@openai/agents';
const agent = new Agent({ name: 'Joke generator', instructions: 'Tell funny jokes.',});
await withTrace('Joke workflow', async () => { const result = await run(agent, 'Tell me a joke'); const secondResult = await run( agent, `Rate this joke: ${result.finalOutput}`, ); console.log(`Joke: ${result.finalOutput}`); console.log(`Rating: ${secondResult.finalOutput}`);});- 2 回の
run呼び出しをwithTrace()でラップしているため、個々の実行は 2 つの別個のトレースを作成するのではなく、全体のトレースの一部になります。
トレースの作成
Section titled “トレースの作成”withTrace() 関数を使用してトレースを作成できます。あるいは、getGlobalTraceProvider().createTrace() を使用して手動で新しいトレースを作成し、それを withTrace() に渡すこともできます。
現在のトレースは Node.js の AsyncLocalStorage または対応する環境のポリフィルによって追跡されます。これにより、自動的に並行処理に対応します。
スパンの作成
Section titled “スパンの作成”各種 create*Span()(例: createGenerationSpan()、createFunctionSpan() など)のメソッドを使用してスパンを作成できます。一般に、スパンを手動で作成する必要はありません。カスタムスパン情報を追跡するための createCustomSpan() 関数も利用できます。
スパンは自動的に現在のトレースの一部となり、Node.js の AsyncLocalStorage または対応する環境のポリフィルによって追跡される、最も近い現在のスパンの下にネストされます。
機微なデータ
Section titled “機微なデータ”一部のスパンは、機微なデータを収集する可能性があります。
createGenerationSpan() は LLM 生成の入力/出力を保存し、createFunctionSpan() は関数呼び出しの入力/出力を保存します。これらには機微なデータが含まれる可能性があるため、RunConfig.traceIncludeSensitiveData でそのデータの取得を無効化できます。
OpenAI トレーシングエクスポーター
Section titled “OpenAI トレーシングエクスポーター”対応するサーバーランタイムでは、デフォルトのトレーシング設定が既に OpenAI へのエクスポートを行います。トレースのエクスポートに OPENAI_API_KEY と異なる認証情報を使用する場合は setTracingExportApiKey() を使用してください。
カスタムの取り込み動作が必要な場合は、OpenAITracingExporter を自分でインスタンス化し、setTraceProcessors(...) または addTraceProcessor(...) でインストールします。エクスポーターは apiKey、endpoint、organization、project、maxRetries、baseDelay、maxDelay をサポートします。
デフォルトのプロセッサーを置き換えた後、バッチプロセッサー付きのデフォルト OpenAI エクスポーターを復元したい場合は、setDefaultOpenAITracingExporter() を呼び出してください。
カスタムトレーシングプロセッサー
Section titled “カスタムトレーシングプロセッサー”トレーシングの高レベルなアーキテクチャは次のとおりです:
- 初期化時に、グローバルな
TraceProviderを作成します。これはトレースの作成を担当し、getGlobalTraceProvider()からアクセスできます TraceProviderはBatchTraceProcessorで構成され、これはトレース/スパンをバッチでOpenAITracingExporterに送信し、OpenAI のバックエンドへバッチでエクスポートします
このデフォルト設定をカスタマイズして、別の送信先または追加のバックエンドへ送信したり、エクスポーターの動作を変更するには 2 つの方法があります:
addTraceProcessor()は、トレースやスパンが準備でき次第受け取る、追加の トレースプロセッサーを追加できます。これにより、OpenAI のバックエンドへの送信に加えて独自の処理を行えますsetTraceProcessors()は、デフォルトのプロセッサーを独自のトレースプロセッサーに置き換えられます。つまり、OpenAI のバックエンドへは、そうするTracingProcessorを含めない限りトレースは送信されません