# プロバイダー間で能力契約と意味の同等性を確認する

CURRENT_STATUS: CURRENT
OBSERVATION: SPEC_ONLY
FRESHNESS: CURRENT
PAGE_TYPE: reference
CANONICAL_URL: /tools/ea-519
CLAIM_IDS: none
EVIDENCE_IDS: EVD-EA-519-URL-90F2BF11E4FB, EVD-EA-519-URL-BDC7E2AF9D9F, EVD-EA-519-URL-42E907E29544, EVD-EA-519-URL-380D2B091962, EA-519-CURRENT-APPROVAL, EA-519-CURRENT-BODY-READBACK
UNKNOWN_IDS: EA-519-UNKNOWN-01
OPS_IDS: none

## Summary
モデルやAPIを切り替える際、toolの名前とJSONの形を揃えるだけでは、同じ仕事を同じ条件で実行できると証明できません。プロバイダーをまたぐ能力契約では、呼出しと結果の対応、実行主体、入出力の意味、権限、終了・失敗、再試行、外部効果を明示し、対応できない差を失わずに扱います。意味の同等性は、対象操作・版・入力範囲・観測条件を指定した検証結果として記録します。

## Current judgment
OpenAI Responsesのfunction callingでは、アプリケーションが呼出しを実行し、該当する`call_id`に対する`function_call_output`を渡す流れが示されています。出力は文字列だけに限定されず、対応する画像・fileのcontent配列も扱います[S1]。

## Scope
プロバイダー間で能力契約と意味の同等性を確認する

## Confirmed
- OpenAI Responsesのfunction callingでは、アプリケーションが呼出しを実行し、該当する`call_id`に対する`function_call_output`を渡す流れが示されています。出力は文字列だけに限定されず、対応する画像・fileのcontent配列も扱います[S1]。

Gemini GenerateContent APIの`FunctionCall`は`name`と引数を持ち、`id`は任意です。IDが渡された場合は、対応する`FunctionResponse`で一致させます。応答には関数名とJSONのresponseを用い、mediaを含むpartsや、非同期実行の条件に関わるfieldもあります[S2]。この仕様を、別のGemini API surfaceへ自動的に一般化しません。

Claudeのclient toolでは`tool_use`のIDと、アプリケーションが返す`tool_result.tool_use_id`を対応させます。tool resultは直後のuser messageに置く等、会話内の順序にも条件があります[S3]。server toolはprovider側が実行し、`server_tool_use`と結果が対応します。`pause_turn`はclient toolの結果待ちと同じではなく、server toolが続くための継続処理が必要な場合です[S4]。

以上は各APIの文書で確認したprotocol上の事実です。同じ入力について、三社のモデルが同じtoolを選択し、同じ引数を生成し、同じ業務結果へ到達したという実行証拠ではありません。

## UNKNOWN
- EA-519-UNKNOWN-01: - 対象アプリケーションでの三provider共通fixtureと、入力範囲を固定した意味の同等性の実測値。
- 具体的model/API/SDK版ごとのschema変換の損失、multimodal制約、streaming・並列・途中切断の実動作。
- server/client混在と非同期継続を含むadapterの正しさ、およびAPI surface変更時の移行条件。
- productionの権限、課金、実行遅延、冪等性、効果readback、独立した運用事故に基づく有効性。

## Evidence
- EVD-EA-519-URL-90F2BF11E4FB (RESEARCH): S1 OpenAI, Function calling: — https://developers.openai.com/api/docs/guides/function-calling
- EVD-EA-519-URL-BDC7E2AF9D9F (RESEARCH): S2 Google, GenerateContent API reference: — https://ai.google.dev/api/generate-content
- EVD-EA-519-URL-42E907E29544 (RESEARCH): S3 Anthropic, Handle tool calls: — https://platform.claude.com/docs/en/agents-and-tools/tool-use/handle-tool-calls
- EVD-EA-519-URL-380D2B091962 (RESEARCH): S4 Anthropic, Server tools: — https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools
- EA-519-CURRENT-APPROVAL (RESEARCH): 現行本文の監査・revision対応
- EA-519-CURRENT-BODY-READBACK (IMPL): 現行本文の収録照合

## Failure / limits
| 失敗例 | 制御 | 確認する証拠 |
| --- | --- | --- |
| 並列の同名toolへ結果を逆に返す | native IDとattemptの対応表、順序制約、重複検出 | 元の呼出しと結果の対、adapter log |
| server toolをclient toolとして再実行する | tool種別と実行主体を固定 | provider側結果、client実行log、重複効果の照合 |
| 拒否・途中終了・tool errorを空の正常値にする | 原因と未完了状態を別fieldで保持 | 元のstop/error種別、consumer側判定 |
| timeout後に別providerへ同じ書込を送る | 業務単位の冪等性と書込先の照合、権限の再評価 | 実際の適用状態、重複防止記録 |
| schema変換で制約やmediaが落ちる | 変換損失の検出、境界値試験、明示的な縮退条件 | native定義、共通validator、元content |
| API継続の要求を業務完了と扱う | provider固有の継続状態を保持 | 継続後の応答、未処理tool、業務readback |
| adapter更新後も旧PASSを使う | model/API/adapter/tool版を検証結果へ結合 | 差分、影響対象、再検証の結果 |

timeout、接続切断、取消要求への応答だけでは、既に始まった外部効果が存在しないと証明できません。書込の成否が不明な状態でproviderを切り替えても、その不明性は消えません。まず書込先を照合し、再実行可能な条件と責任主体を決めます。呼出し対応のIDと、業務側で重複適用を防ぐkeyも同じものと決めつけません。
## Failure / limits
共通adapterによりnative形式の差を吸収し、同じアプリケーションから複数providerを呼べる場合があります。したがって、差があることだけを理由に全互換性を否定する必要はありません。ただし形式の統一だけから、tool選択、推論品質、権限、遅延、費用、外部効果の同等性を導くことはできません。

公式API資料はprotocolの期待を示しますが、adapter実装の正しさや対象modelの実動作を保証する試験結果ではありません。今回、三providerの同一fixture、streaming途中切断、混在server/client、再試行時の効果照合を実行していません。独立したproduction事故の検証も行っていません。これらの不足は公開文の断定範囲を制限するものであり、未実行の試験をPASSと表示しません。
## Failure / limits
canonical topicの本文、根拠、対応表、失敗条件、制御、反証・限界、UNKNOWN、安全な表現を揃えたため、研究candidateを完了して独立監査へ渡します。実行証拠の不足は明示したまま、同じ一般資料の検索を反復しません。監査担当がexact candidateとsource claimを照合するまで、AUDIT_PASS、READY、公開済みとは扱いません。
## PUBLIC_CLAIM
モデルやAPIを切り替える際、toolの名前とJSONの形を揃えるだけでは、同じ仕事を同じ条件で実行できると証明できません。プロバイダーをまたぐ能力契約では、呼出しと結果の対応、実行主体、入出力の意味、権限、終了・失敗、再試行、外部効果を明示し、対応できない差を失わずに扱います。意味の同等性は、対象操作・版・入力範囲・観測条件を指定した検証結果として記録します。

## ESTABLISHED
OpenAI Responsesのfunction callingでは、アプリケーションが呼出しを実行し、該当する`call_id`に対する`function_call_output`を渡す流れが示されています。出力は文字列だけに限定されず、対応する画像・fileのcontent配列も扱います[S1]。

Gemini GenerateContent APIの`FunctionCall`は`name`と引数を持ち、`id`は任意です。IDが渡された場合は、対応する`FunctionResponse`で一致させます。応答には関数名とJSONのresponseを用い、mediaを含むpartsや、非同期実行の条件に関わるfieldもあります[S2]。この仕様を、別のGemini API surfaceへ自動的に一般化しません。

Claudeのclient toolでは`tool_use`のIDと、アプリケーションが返す`tool_result.tool_use_id`を対応させます。tool resultは直後のuser messageに置く等、会話内の順序にも条件があります[S3]。server toolはprovider側が実行し、`server_tool_use`と結果が対応します。`pause_turn`はclient toolの結果待ちと同じではなく、server toolが続くための継続処理が必要な場合です[S4]。

以上は各APIの文書で確認したprotocol上の事実です。同じ入力について、三社のモデルが同じtoolを選択し、同じ引数を生成し、同じ業務結果へ到達したという実行証拠ではありません。

## NATIVE_MAPPING
| 対象API | 呼出しと結果の対応 | 実行主体と保持する差 |
| --- | --- | --- |
| OpenAI Responses function calling | 呼出しの`call_id`と`function_call_output.call_id` | アプリケーションが関数を実行。model response内の他のIDと取り違えない |
| Gemini GenerateContent function calling | `name`、および呼出しで指定された場合の一致する`id` | 呼出しを受けた実装が結果を供給。任意IDを常に存在すると仮定しない |
| Claude client tools | `tool_use.id`と`tool_result.tool_use_id` | アプリケーション実行。resultを置くmessage・content順序を保持 |
| Claude server tools | `server_tool_use`と対応するserver result | provider側実行。client側で同じtoolを重ねて実行しない |

この表はadapterの対応箇所を示すもので、全tool種別・全モデル・全endpointの相互変換を保証するものではありません。特にserver実行の検索等を、同名のclient関数へ置き換えた場合、実行場所、権限、課金、監査、返却情報の意味が変わり得ます。

## CAPABILITY_CONTRACT
共通契約には、少なくとも次の条件を記録します。これは本記事で提案する設計用の契約であり、業界共通規格が存在すると主張するものではありません。

| 項目 | 記録する内容 | 不一致時の扱い |
| --- | --- | --- |
| 操作の意味 | 対象、事前条件、単位、timezone、期待する状態変化 | 同名でも別能力として扱う |
| 対象版 | provider、API surface、model/version、SDK、adapter、tool定義hash | 変更箇所の再検証が済むまで旧結果を継承しない |
| 入出力 | schema、必須項目、null、制約、media、順序、サイズ上限 | 無言の切捨て・型変換をせず、拒否または明示した縮退 |
| 呼出し対応 | 業務operation ID、native call ID、attempt ID、会話/response ID | 対応が一意に決まらなければ結果を投入しない |
| 実行と権限 | client/server、主体、scope、approval、データ境界 | provider変更だけで権限を広げない |
| 状態 | 成功、tool error、protocol error、未完了、拒否、取消要求、効果不明 | ひとつの空文字やsuccessへ丸めない |
| 外部効果 | 冪等性key、書込先、対象版、適用結果のreadback | 完了不明を成功・失敗へ推定せず照合する |
| 品質 | 許容差、必須条件、禁止条件、対象入力群 | byte一致と業務上の同等性を別判定にする |

共通表現を作る場合も、native IDと元の応答種別を保存します。内部のoperation IDは業務意図の単位、attempt IDは再試行の単位、native IDはAPI内の対応の単位として区別します。同じ関数名の並列呼出しや再試行があるため、関数名だけをkeyに結果を紐付ける設計は避けます。任意IDがないAPIでは、対応が証明できる範囲と順序の条件を固定し、一意性を確保できない並列変換を拒否します。

## SEMANTIC_EQUIVALENCE
同等性の比較対象は、文章表現そのものと、制約を満たした業務結果に分けます。例として「請求書の金額を集計する」能力なら、対象期間、通貨、丸め、税の扱い、重複の除外、欠損値、集計対象の固定を契約にします。二つのモデルの説明文が異なっても、この範囲の集計が一致する可能性があります。一方、同じ数値を返しても対象期間が違えば同等とは扱いません。

構造化出力がparseできたことは、schema制約や業務意味が正しいこととは別です。provider間でサポートするschema機能が異なる場合は、共通の入力契約から各native定義への変換を明示し、変換後の定義と戻り値を検証します。失われた制約をアプリケーション側で検証できない場合、その能力の互換性を宣言しません。本記事では各社の全JSON Schema対応範囲を網羅した互換表は作成していません。

画像・file・音声を伴う結果は、MIME、content順、参照先、アクセス期限、サイズ、解像度等が意味を変える可能性があります。画像を説明文だけに置き換える、複数partsを順序のない文字列へ結合する等は、情報損失を契約へ記録します。「変換できた」と「必要な証拠が保たれた」を別に判定します。

## FAILURE_AND_CONTROL
| 失敗例 | 制御 | 確認する証拠 |
| --- | --- | --- |
| 並列の同名toolへ結果を逆に返す | native IDとattemptの対応表、順序制約、重複検出 | 元の呼出しと結果の対、adapter log |
| server toolをclient toolとして再実行する | tool種別と実行主体を固定 | provider側結果、client実行log、重複効果の照合 |
| 拒否・途中終了・tool errorを空の正常値にする | 原因と未完了状態を別fieldで保持 | 元のstop/error種別、consumer側判定 |
| timeout後に別providerへ同じ書込を送る | 業務単位の冪等性と書込先の照合、権限の再評価 | 実際の適用状態、重複防止記録 |
| schema変換で制約やmediaが落ちる | 変換損失の検出、境界値試験、明示的な縮退条件 | native定義、共通validator、元content |
| API継続の要求を業務完了と扱う | provider固有の継続状態を保持 | 継続後の応答、未処理tool、業務readback |
| adapter更新後も旧PASSを使う | model/API/adapter/tool版を検証結果へ結合 | 差分、影響対象、再検証の結果 |

timeout、接続切断、取消要求への応答だけでは、既に始まった外部効果が存在しないと証明できません。書込の成否が不明な状態でproviderを切り替えても、その不明性は消えません。まず書込先を照合し、再実行可能な条件と責任主体を決めます。呼出し対応のIDと、業務側で重複適用を防ぐkeyも同じものと決めつけません。

## VERIFICATION_PLAN_NOT_RUN
このcandidateではAPIを実行せず、文書に基づくmappingと検証設計を作成しました。以下は今後の検証計画であり、実行結果ではありません。

1. provider/API/model/adapter版とtool定義を固定し、読取専用または外部効果を隔離したfixtureを用意します。
2. 単一・並列・同名複数・再試行のcall/result対応を検査し、未知ID、二重result、順序違反、ID欠損の扱いを確認します。
3. schema境界、拒否、権限不足、tool error、protocol error、timeout、部分的streaming、途中切断、media損失を別々に試します。構文に加え、対象・値・単位・効果を確認します。
4. client実行とserver実行、Claudeの継続状態を分けて試験します。継続が成功しても業務完了の条件が別に残ることを確認します。
5. 決定的な処理は期待値、生成結果は事前に定めた許容条件で評価します。入力集合、失敗数、判定者、未評価範囲を残し、全入力・将来版への保証へ拡張しません。
6. 書込系は隔離環境でtimeout後の照合と重複防止を検証してから適用します。productionでの効果readbackや運用事故の独立証拠は別の確認事項です。

## COUNTEREVIDENCE_AND_LIMITATIONS
共通adapterによりnative形式の差を吸収し、同じアプリケーションから複数providerを呼べる場合があります。したがって、差があることだけを理由に全互換性を否定する必要はありません。ただし形式の統一だけから、tool選択、推論品質、権限、遅延、費用、外部効果の同等性を導くことはできません。

公式API資料はprotocolの期待を示しますが、adapter実装の正しさや対象modelの実動作を保証する試験結果ではありません。今回、三providerの同一fixture、streaming途中切断、混在server/client、再試行時の効果照合を実行していません。独立したproduction事故の検証も行っていません。これらの不足は公開文の断定範囲を制限するものであり、未実行の試験をPASSと表示しません。

## OPEN_UNKNOWN
- 対象アプリケーションでの三provider共通fixtureと、入力範囲を固定した意味の同等性の実測値。
- 具体的model/API/SDK版ごとのschema変換の損失、multimodal制約、streaming・並列・途中切断の実動作。
- server/client混在と非同期継続を含むadapterの正しさ、およびAPI surface変更時の移行条件。
- productionの権限、課金、実行遅延、冪等性、効果readback、独立した運用事故に基づく有効性。

## SAFE_WORDING
「対象APIの文書でcall/resultの対応と実行主体の差を確認し、共通能力契約に保持する項目を整理しました。実行時の意味の同等性は、対象版・操作・入力範囲・効果の検証を経て判定する必要があります。今回、三providerでの実行互換性や本番の効果同等性は未検証です。」と表現します。

## 運用上の停止・確認条件
canonical topicの本文、根拠、対応表、失敗条件、制御、反証・限界、UNKNOWN、安全な表現を揃えたため、研究candidateを完了して独立監査へ渡します。実行証拠の不足は明示したまま、同じ一般資料の検索を反復しません。監査担当がexact candidateとsource claimを照合するまで、AUDIT_PASS、READY、公開済みとは扱いません。

## SOURCES_AND_PROVENANCE
- S1 OpenAI, Function calling: https://developers.openai.com/api/docs/guides/function-calling — Responsesの呼出し、call_id、function_call_output、content形式。2026-10-18に公式文書確認。
- S2 Google, GenerateContent API reference: https://ai.google.dev/api/generate-content — FunctionCall/FunctionResponse、任意IDと対応、name、response、parts。2026-10-18に公式文書確認。GenerateContentの範囲。
- S3 Anthropic, Handle tool calls: https://platform.claude.com/docs/en/agents-and-tools/tool-use/handle-tool-calls — client toolのID対応、result形式とmessage順序。2026-10-18に公式文書確認。
- S4 Anthropic, Server tools: https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools — server側実行、client/serverの区別、pause_turn継続。2026-10-18に公式文書確認。

既存研究の起点はEA_REVISION_LEDGERのEA-519-R1-20261013です。今回のprovider文書の再確認、本文作成、保存内容のhash照合は、未実行のAPI・負荷・障害試験の代わりにはなりません。

NEXT: /agent/start.json
STOP: This is a knowledge projection, not an execution order.