Q1OpenTelemetry準拠とは何か
OpenTelemetry(OTel)は、システムの動作記録の取り方を定めた業界標準規格です。もともとは複数のサービスにまたがる処理を追跡するために作られたもので、CNCF(Cloud Native Computing Foundation)が管理しています。エージェント評価の分野では、これがそのままトレース記録の共通語として使われています。
規格の中心にあるのがspan(スパン)という単位です。1つのspanは「ある処理の1区間」を表します。処理の開始時に1つ起こし、終了時に閉じる、実行の記録票のようなものです。中身は決まった項目でできています。
記録する側は、処理を with で囲うだけです。囲った範囲がそのまま1つのspanになります。
囲む対象は何でもかまいません。SQL実行、HTTP呼び出し、ファイル読み込み、いずれも同じ形のspanが1つ残ります。上の例でSQL文が見えているのは属性の1項目に入った値で、spanの形自体はどの処理でも共通です。
spanは親子関係を持てるので、1回の実行が木構造として残ります。本プロジェクトでは、1つの質問への応答が次のような木になります。
| span | 記録される内容 |
|---|---|
| agent-run(根) | 質問文・最終回答・総所要時間 |
| ├ tool:get_schema | ツールの引数と返り値 |
| ├ llm:generate_sql | プロンプト・生成されたSQL・トークン数 |
| ├ tool:run_sql | 実行したSQL・結果 or エラー |
| └ llm:write_answer | 実行結果から回答文を作る過程 |
この記録があるから、評価器は「回答文だけを見て推理する」必要がありません。年の誤りはllm:generate_sqlのspanから、断定はtool:run_sqlの結果とllm:write_answerの突き合わせから、それぞれ機械的に検出できます。
「準拠」にする理由は、記録が特定の製品に縛られなくなることです。OTel形式で出力しておけば、可視化ツール(Phoenix / Langfuse / LangSmith など)は受け取り側を差し替えるだけで乗り換えられます。独自形式で記録すると、ツールを変えるたびに記録の作り直しが必要になり、過去のトレースも読めなくなる。評価基盤は数年単位で使うものなので、この移植性は実利があります。
実装としては、OTelのSDKでspanを作り、HTTPで受信側(ローカルのPhoenixなど)へ送るだけです。本プロジェクトでは、受信側が起動していなくても動くようJSON Lines形式でも並行保存しており、可視化ツールなしでも評価パイプラインは完結します。
【2026年時点の標準化の現在地】 この構成は「枯れた古い手法」ではなく、いま標準になりつつある層です。OpenTelemetry自体はCNCF卒業プロジェクトで安定していますが、LLM/エージェント向けの属性規約(GenAI Semantic Conventions、gen_ai.*)は2026年時点でまだ実験的(experimental)ステータスで1.0に達していません(2026年6月のv1.42.0で専用リポジトリへ分離)。一方で採用は加速しており、DatadogはAgent Observabilityでv1.37以降ネイティブ対応、GrafanaもLLMトレースの収集を開始、LangfuseもOTel統合を公表しています。「規約はまだ固まりきっていないが、主要ベンダーが揃って寄せてきている」段階です。
本プロジェクトが使っているのはOTelのspan構造そのもの(安定した基盤側)で、gen_ai.* の細かい属性命名までは踏み込んでいません(実装ではPhoenix系の openinference.span.kind を使用)。規約が安定版になったときの移行負担は小さいはずです——span構造は変わらず、属性名の対応付けだけで済み、OTel側にも移行期に新旧の属性名を併記する仕組み(OTEL_SEMCONV_STABILITY_OPT_IN)が用意されています。
関連: Q3 judgeの位置(評価器はこのトレースを読む) / Q6 オンライン評価(本番でもこの記録が判断材料になる)