◉GEMINI LABEN
●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り8日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り8日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…
記事一覧/API / SDK
◈ API / SDK/2026-09-22上級

関数呼び出しが平文に化けるとき、まず疑うのはツール宣言のプロパティ名です

MALFORMED_FUNCTION_CALL を出力上限とスキーマ衝突で潰しきれなかったとき、ツール宣言のプロパティ名を二分探索で絞り込んだ記録です。予約語を名前に置かない線引きと、宣言の手前で落とすリンタまで書き残します。

Gemini API248function calling4MALFORMED_FUNCTION_CALLスキーマ設計Python51

✦ プレミアム記事

浮世絵壁紙の分類パイプラインにツールを 1 本足した翌朝、前の晩まで通っていた呼び出しが finishReason: MALFORMED_FUNCTION_CALL で返ってきておりました。足したのは色の分布を返すだけの小さなツールで、既存の宣言には指一本触れておりません。

最初に疑ったのは出力トークンの上限でした。次に、スキーマと自然言語の指示の衝突です。どちらも外れました——上限を倍にしても、指示文を空にしても、同じところで関数呼び出しが平文へ化けます。

行き着いたのは、足したツールの説明文でも引数の型でもなく、そのツールが持っていたプロパティの名前でした。ひと文字の接尾辞を足すだけで、その晩のうちに止まりました。同じ袋小路に入っている方のために、絞り込みの手順と、私が引いた線引きを書き残します。

返ってきていたのは、エラーではなく平文でした

MALFORMED_FUNCTION_CALL は HTTP のエラーではありません。ステータスは 200 で返り、レスポンスの中身だけが壊れています。ここが切り分けを遅らせました。

実際に返ってきていたのは、こういう形です。

{
  "candidates": [
    {
      "content": {
        "parts": [
          { "text": "print(default_api.classify_palette(in=\"新着/2026-09/ukiyoe-0431.jpg\"))" }
        ],
        "role": "model"
      },
      "finishReason": "MALFORMED_FUNCTION_CALL"
    }
  ]
}

parts に functionCall がありません。代わりに、関数呼び出しを文字で書いたものが text として入っています。モデルはツールを呼ぼうとして、呼び出しの形を組み立てきれず、途中で文章の側へ落ちたのです。

大事なのは、落ちたのが classify_palette だけではなかったことでした。同じターンで呼ばれるはずだった別の 2 本も、そろって平文になっていました。1 本の宣言の問題が、そのターン全体を巻き込みます。

壊れているのが 1 本なのに、症状は全部に出ます。だから「最後に足したツール」から疑うと外れます。

出力上限とスキーマ衝突は、先に外せます

名前を疑う前に、よく知られた 2 つの原因を落としておきます。どちらも数分で外せますので、順番を飛ばさないほうが結局は早く済みます。

上限を疑うとき

maxOutputTokens を十分に大きくして、同じ入力をもう一度投げます。上限が原因なら、ここで STOP に戻ります。戻らなければ上限は無関係です。思考予算を使うモデルでは、思考の分も同じ枠から引かれますので、余裕を持たせた値で試します。

指示文を疑うとき

システム指示とユーザー入力から、出力の形を縛る文(JSON で返せ、コードブロックで包め、といった類い)を一時的に外します。構造化出力とツール宣言の同時指定は、組み合わせによっては噛み合いません。この層の話は responseSchema の enum 指定なのに違う文字列が返る — Gemini API で起きる原因と回避策 に書いた内容と地続きです。

私はこの 2 つを外した時点で、原因が宣言そのものにあると腹をくくりました。ここから先が、この記事の本題です。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦9 本あるツール宣言のどれが原因かを、当てずっぽうではなく 4 回の API 呼び出しで 1 本まで絞り込めるようになります
✦スキーマの名前に置かない語をあらかじめ決められるので、これまで動いていた実装がツールを 1 本足した日に壊れる事故を、起きる前に避けられるようになります
✦MALFORMED_FUNCTION_CALL を「たまに出るもの」で済ませず、出力上限・指示文の衝突・宣言の名前という三つの層に切り分けて潰せるようになります
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

◈ API / SDK2026-10-14
config に「Extra inputs are not permitted」が出たら、キーの綴りを一つずつ疑います
google-genai SDK で config を渡した途端に pydantic の ValidationError(extra_forbidden)が出る原因は、ほぼ綴りの一字違いです。手元で再現した出力と、呼び出し前に怪しいキーを洗う関数、text が None になる場合の見分け方を書き残します。
◈ API / SDK2026-10-08
停止日のない非推奨をどう扱うか — 画像モデルの移行先を、3つの条件で選び直す
10月6日に gemini-nano-banana-2.1 が GA になり、gemini-3.1-flash-image は停止日の書かれないまま非推奨になりました。解像度・参照画像・検索の3条件で移行先を選ぶ表と、確認用の短いスクリプトをまとめます。
◈ API / SDK2026-09-12
10月2日に止まる gemini-2.5-flash-image の移行先は、公式表のままでは動きません
gemini-2.5-flash-image の停止は2026年10月2日です。ところが公式の推奨移行先として書かれている gemini-3.1-flash-image-preview は6月25日に停止済みでした。移行先を最後まで辿るスクリプトを書いて表の全行を検査し、同じ構造の行が11件あることを確かめた記録です。