{
  "format": "agent-article-v0",
  "article_id": "EA-519",
  "canonical_url": "/tools/ea-519",
  "page_type": "reference",
  "claim_ids": [],
  "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"
  ],
  "operational_object_ids": [],
  "provider": [
    "OpenAI",
    "Gemini",
    "Claude"
  ],
  "models": [],
  "plans": [],
  "surfaces": [],
  "regions": [],
  "current_status": "CURRENT",
  "observation_status": "SPEC_ONLY",
  "freshness": "CURRENT",
  "last_verified": "2026-10-18",
  "supersedes": [],
  "superseded_by": [],
  "provenance": [
    "MANUAL-EA519-DRAIN-20261018-C1",
    "SRC-EA-519-URL-90F2BF11E4FB",
    "SRC-EA-519-URL-BDC7E2AF9D9F",
    "SRC-EA-519-URL-42E907E29544",
    "SRC-EA-519-URL-380D2B091962",
    "BODY-SHA256:64f757fd38a1ab76d3d7f044fa2bcddbbd043e12555f212ee66367a8c10fc274"
  ],
  "article_sources": [
    {
      "id": "EVD-EA-519-URL-90F2BF11E4FB",
      "evidence_class": "RESEARCH",
      "title": "S1 OpenAI, Function calling:",
      "href": "https://developers.openai.com/api/docs/guides/function-calling",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-519-URL-90F2BF11E4FB"
      ],
      "supporting_locators": [
        "SOURCES_AND_PROVENANCE",
        "- S1 OpenAI, Function calling: https://developers.openai.com/api/docs/guides/function-calling"
      ],
      "scope": "SOURCES_AND_PROVENANCE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-519-URL-BDC7E2AF9D9F",
      "evidence_class": "RESEARCH",
      "title": "S2 Google, GenerateContent API reference:",
      "href": "https://ai.google.dev/api/generate-content",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-519-URL-BDC7E2AF9D9F"
      ],
      "supporting_locators": [
        "SOURCES_AND_PROVENANCE",
        "- S2 Google, GenerateContent API reference: https://ai.google.dev/api/generate-content"
      ],
      "scope": "SOURCES_AND_PROVENANCE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-519-URL-42E907E29544",
      "evidence_class": "RESEARCH",
      "title": "S3 Anthropic, Handle tool calls:",
      "href": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/handle-tool-calls",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-519-URL-42E907E29544"
      ],
      "supporting_locators": [
        "SOURCES_AND_PROVENANCE",
        "- S3 Anthropic, Handle tool calls: https://platform.claude.com/docs/en/agents-and-tools/tool-use/handle-tool-calls"
      ],
      "scope": "SOURCES_AND_PROVENANCE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-519-URL-380D2B091962",
      "evidence_class": "RESEARCH",
      "title": "S4 Anthropic, Server tools:",
      "href": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-519-URL-380D2B091962"
      ],
      "supporting_locators": [
        "SOURCES_AND_PROVENANCE",
        "- S4 Anthropic, Server tools: https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools"
      ],
      "scope": "SOURCES_AND_PROVENANCE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EA-519-CURRENT-APPROVAL",
      "evidence_class": "RESEARCH",
      "title": "現行本文の監査・revision対応",
      "supports": [
        "現行台帳のAUDIT_PASSと候補・revision・本文ハッシュの対応を確認しています。"
      ],
      "limit": "監査状態と来歴の記録です。外部根拠の最新性や本文の全主張を追加保証しません。",
      "origin_class": "AUDITED_CANONICAL_RESEARCH_PACKET",
      "source_or_experiment_ids": [
        "MANUAL-EA519-DRAIN-20261018-C1"
      ],
      "supporting_locators": [
        "1KqhJtiSb2S84rWmeYVwKcT_76dBwZ_B0ZZuAWQqH0rQ/EA_REVISION_LEDGER#ea_id=EA-519&revision_id=EA-519-R1-20261013&candidate_id=MANUAL-EA519-DRAIN-20261018-C1",
        "EA-519-R1-20261013"
      ],
      "provenance_status": "CURRENT_CANONICAL_APPROVAL_READBACK"
    },
    {
      "id": "EA-519-CURRENT-BODY-READBACK",
      "evidence_class": "IMPL",
      "title": "現行本文の収録照合",
      "supports": [
        "公開生成入力の本文SHA-256が、監査済み候補に結び付いたハッシュと一致しています。"
      ],
      "limit": "本文の同一性の検査です。外部システムの挙動や全主張の真偽を実証したものではありません。",
      "checked_at": "2026-10-18",
      "origin_class": "IMPLEMENTATION_READBACK",
      "source_or_experiment_ids": [
        "BODY-SHA256:64f757fd38a1ab76d3d7f044fa2bcddbbd043e12555f212ee66367a8c10fc274"
      ],
      "supporting_locators": [
        "content/staging/EA-519.md",
        "64f757fd38a1ab76d3d7f044fa2bcddbbd043e12555f212ee66367a8c10fc274",
        "EA-519-R1-20261013"
      ],
      "provenance_status": "CURRENT_APPROVED_BODY_HASH_MATCH"
    }
  ],
  "research_sections": [
    {
      "heading": "PUBLIC_CLAIM",
      "text": "モデルやAPIを切り替える際、toolの名前とJSONの形を揃えるだけでは、同じ仕事を同じ条件で実行できると証明できません。プロバイダーをまたぐ能力契約では、呼出しと結果の対応、実行主体、入出力の意味、権限、終了・失敗、再試行、外部効果を明示し、対応できない差を失わずに扱います。意味の同等性は、対象操作・版・入力範囲・観測条件を指定した検証結果として記録します。"
    },
    {
      "heading": "ESTABLISHED",
      "text": "OpenAI Responsesのfunction callingでは、アプリケーションが呼出しを実行し、該当する`call_id`に対する`function_call_output`を渡す流れが示されています。出力は文字列だけに限定されず、対応する画像・fileのcontent配列も扱います[S1]。\n\nGemini GenerateContent APIの`FunctionCall`は`name`と引数を持ち、`id`は任意です。IDが渡された場合は、対応する`FunctionResponse`で一致させます。応答には関数名とJSONのresponseを用い、mediaを含むpartsや、非同期実行の条件に関わるfieldもあります[S2]。この仕様を、別のGemini API surfaceへ自動的に一般化しません。\n\nClaudeの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]。\n\n以上は各APIの文書で確認したprotocol上の事実です。同じ入力について、三社のモデルが同じtoolを選択し、同じ引数を生成し、同じ業務結果へ到達したという実行証拠ではありません。"
    },
    {
      "heading": "NATIVE_MAPPING",
      "text": "| 対象API | 呼出しと結果の対応 | 実行主体と保持する差 |\n| --- | --- | --- |\n| OpenAI Responses function calling | 呼出しの`call_id`と`function_call_output.call_id` | アプリケーションが関数を実行。model response内の他のIDと取り違えない |\n| Gemini GenerateContent function calling | `name`、および呼出しで指定された場合の一致する`id` | 呼出しを受けた実装が結果を供給。任意IDを常に存在すると仮定しない |\n| Claude client tools | `tool_use.id`と`tool_result.tool_use_id` | アプリケーション実行。resultを置くmessage・content順序を保持 |\n| Claude server tools | `server_tool_use`と対応するserver result | provider側実行。client側で同じtoolを重ねて実行しない |\n\nこの表はadapterの対応箇所を示すもので、全tool種別・全モデル・全endpointの相互変換を保証するものではありません。特にserver実行の検索等を、同名のclient関数へ置き換えた場合、実行場所、権限、課金、監査、返却情報の意味が変わり得ます。"
    },
    {
      "heading": "CAPABILITY_CONTRACT",
      "text": "共通契約には、少なくとも次の条件を記録します。これは本記事で提案する設計用の契約であり、業界共通規格が存在すると主張するものではありません。\n\n| 項目 | 記録する内容 | 不一致時の扱い |\n| --- | --- | --- |\n| 操作の意味 | 対象、事前条件、単位、timezone、期待する状態変化 | 同名でも別能力として扱う |\n| 対象版 | provider、API surface、model/version、SDK、adapter、tool定義hash | 変更箇所の再検証が済むまで旧結果を継承しない |\n| 入出力 | schema、必須項目、null、制約、media、順序、サイズ上限 | 無言の切捨て・型変換をせず、拒否または明示した縮退 |\n| 呼出し対応 | 業務operation ID、native call ID、attempt ID、会話/response ID | 対応が一意に決まらなければ結果を投入しない |\n| 実行と権限 | client/server、主体、scope、approval、データ境界 | provider変更だけで権限を広げない |\n| 状態 | 成功、tool error、protocol error、未完了、拒否、取消要求、効果不明 | ひとつの空文字やsuccessへ丸めない |\n| 外部効果 | 冪等性key、書込先、対象版、適用結果のreadback | 完了不明を成功・失敗へ推定せず照合する |\n| 品質 | 許容差、必須条件、禁止条件、対象入力群 | byte一致と業務上の同等性を別判定にする |\n\n共通表現を作る場合も、native IDと元の応答種別を保存します。内部のoperation IDは業務意図の単位、attempt IDは再試行の単位、native IDはAPI内の対応の単位として区別します。同じ関数名の並列呼出しや再試行があるため、関数名だけをkeyに結果を紐付ける設計は避けます。任意IDがないAPIでは、対応が証明できる範囲と順序の条件を固定し、一意性を確保できない並列変換を拒否します。"
    },
    {
      "heading": "SEMANTIC_EQUIVALENCE",
      "text": "同等性の比較対象は、文章表現そのものと、制約を満たした業務結果に分けます。例として「請求書の金額を集計する」能力なら、対象期間、通貨、丸め、税の扱い、重複の除外、欠損値、集計対象の固定を契約にします。二つのモデルの説明文が異なっても、この範囲の集計が一致する可能性があります。一方、同じ数値を返しても対象期間が違えば同等とは扱いません。\n\n構造化出力がparseできたことは、schema制約や業務意味が正しいこととは別です。provider間でサポートするschema機能が異なる場合は、共通の入力契約から各native定義への変換を明示し、変換後の定義と戻り値を検証します。失われた制約をアプリケーション側で検証できない場合、その能力の互換性を宣言しません。本記事では各社の全JSON Schema対応範囲を網羅した互換表は作成していません。\n\n画像・file・音声を伴う結果は、MIME、content順、参照先、アクセス期限、サイズ、解像度等が意味を変える可能性があります。画像を説明文だけに置き換える、複数partsを順序のない文字列へ結合する等は、情報損失を契約へ記録します。「変換できた」と「必要な証拠が保たれた」を別に判定します。"
    },
    {
      "heading": "FAILURE_AND_CONTROL",
      "text": "| 失敗例 | 制御 | 確認する証拠 |\n| --- | --- | --- |\n| 並列の同名toolへ結果を逆に返す | native IDとattemptの対応表、順序制約、重複検出 | 元の呼出しと結果の対、adapter log |\n| server toolをclient toolとして再実行する | tool種別と実行主体を固定 | provider側結果、client実行log、重複効果の照合 |\n| 拒否・途中終了・tool errorを空の正常値にする | 原因と未完了状態を別fieldで保持 | 元のstop/error種別、consumer側判定 |\n| timeout後に別providerへ同じ書込を送る | 業務単位の冪等性と書込先の照合、権限の再評価 | 実際の適用状態、重複防止記録 |\n| schema変換で制約やmediaが落ちる | 変換損失の検出、境界値試験、明示的な縮退条件 | native定義、共通validator、元content |\n| API継続の要求を業務完了と扱う | provider固有の継続状態を保持 | 継続後の応答、未処理tool、業務readback |\n| adapter更新後も旧PASSを使う | model/API/adapter/tool版を検証結果へ結合 | 差分、影響対象、再検証の結果 |\n\ntimeout、接続切断、取消要求への応答だけでは、既に始まった外部効果が存在しないと証明できません。書込の成否が不明な状態でproviderを切り替えても、その不明性は消えません。まず書込先を照合し、再実行可能な条件と責任主体を決めます。呼出し対応のIDと、業務側で重複適用を防ぐkeyも同じものと決めつけません。"
    },
    {
      "heading": "VERIFICATION_PLAN_NOT_RUN",
      "text": "このcandidateではAPIを実行せず、文書に基づくmappingと検証設計を作成しました。以下は今後の検証計画であり、実行結果ではありません。\n\n1. provider/API/model/adapter版とtool定義を固定し、読取専用または外部効果を隔離したfixtureを用意します。\n2. 単一・並列・同名複数・再試行のcall/result対応を検査し、未知ID、二重result、順序違反、ID欠損の扱いを確認します。\n3. schema境界、拒否、権限不足、tool error、protocol error、timeout、部分的streaming、途中切断、media損失を別々に試します。構文に加え、対象・値・単位・効果を確認します。\n4. client実行とserver実行、Claudeの継続状態を分けて試験します。継続が成功しても業務完了の条件が別に残ることを確認します。\n5. 決定的な処理は期待値、生成結果は事前に定めた許容条件で評価します。入力集合、失敗数、判定者、未評価範囲を残し、全入力・将来版への保証へ拡張しません。\n6. 書込系は隔離環境でtimeout後の照合と重複防止を検証してから適用します。productionでの効果readbackや運用事故の独立証拠は別の確認事項です。"
    },
    {
      "heading": "COUNTEREVIDENCE_AND_LIMITATIONS",
      "text": "共通adapterによりnative形式の差を吸収し、同じアプリケーションから複数providerを呼べる場合があります。したがって、差があることだけを理由に全互換性を否定する必要はありません。ただし形式の統一だけから、tool選択、推論品質、権限、遅延、費用、外部効果の同等性を導くことはできません。\n\n公式API資料はprotocolの期待を示しますが、adapter実装の正しさや対象modelの実動作を保証する試験結果ではありません。今回、三providerの同一fixture、streaming途中切断、混在server/client、再試行時の効果照合を実行していません。独立したproduction事故の検証も行っていません。これらの不足は公開文の断定範囲を制限するものであり、未実行の試験をPASSと表示しません。"
    },
    {
      "heading": "OPEN_UNKNOWN",
      "text": "- 対象アプリケーションでの三provider共通fixtureと、入力範囲を固定した意味の同等性の実測値。\n- 具体的model/API/SDK版ごとのschema変換の損失、multimodal制約、streaming・並列・途中切断の実動作。\n- server/client混在と非同期継続を含むadapterの正しさ、およびAPI surface変更時の移行条件。\n- productionの権限、課金、実行遅延、冪等性、効果readback、独立した運用事故に基づく有効性。"
    },
    {
      "heading": "SAFE_WORDING",
      "text": "「対象APIの文書でcall/resultの対応と実行主体の差を確認し、共通能力契約に保持する項目を整理しました。実行時の意味の同等性は、対象版・操作・入力範囲・効果の検証を経て判定する必要があります。今回、三providerでの実行互換性や本番の効果同等性は未検証です。」と表現します。"
    },
    {
      "heading": "運用上の停止・確認条件",
      "text": "canonical topicの本文、根拠、対応表、失敗条件、制御、反証・限界、UNKNOWN、安全な表現を揃えたため、研究candidateを完了して独立監査へ渡します。実行証拠の不足は明示したまま、同じ一般資料の検索を反復しません。監査担当がexact candidateとsource claimを照合するまで、AUDIT_PASS、READY、公開済みとは扱いません。"
    },
    {
      "heading": "SOURCES_AND_PROVENANCE",
      "text": "- S1 OpenAI, Function calling: https://developers.openai.com/api/docs/guides/function-calling — Responsesの呼出し、call_id、function_call_output、content形式。2026-10-18に公式文書確認。\n- S2 Google, GenerateContent API reference: https://ai.google.dev/api/generate-content — FunctionCall/FunctionResponse、任意IDと対応、name、response、parts。2026-10-18に公式文書確認。GenerateContentの範囲。\n- 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に公式文書確認。\n- 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に公式文書確認。\n\n既存研究の起点はEA_REVISION_LEDGERのEA-519-R1-20261013です。今回のprovider文書の再確認、本文作成、保存内容のhash照合は、未実行のAPI・負荷・障害試験の代わりにはなりません。"
    }
  ],
  "human_url": "/tools/ea-519",
  "markdown_url": "/agent/article.md?path=%2Ftools%2Fea-519",
  "json_url": "/agent/article.json?path=%2Ftools%2Fea-519"
}