Antigravity IDE で Gemma 4 をモデルに設定してエージェントにツールを呼び出させようとすると、「ツールを全く呼ばずにテキストで答えてしまう」「呼び出し JSON の形式が壊れているというエラーが出る」「ローカル実行ではうまくいくのに IDE 経由だと失敗する」という3つのパターンで詰まることがあります。
2014年から個人でアプリ開発を続け、累計5,000万ダウンロードを超えるアプリ群の保守や新機能開発に Antigravity を活用していますが、Gemma 4 のツール呼び出し(Function Calling)問題はクラウドモデルとは動作の癖が異なるため、最初に戸惑う部分のひとつです。ここでは3つのパターン別に原因と解決策を整理します。
なぜ Gemma 4 のツール呼び出しは失敗しやすいのか
Gemma 4 は OpenAI 互換の JSON ツール仕様を受け付けますが、いくつかの制約があります。
まずツール使用の自律判断の面では、Gemini Pro 系と比べると「ツールをいつ呼ぶべきか」の判断精度にばらつきがあります。システムプロンプトでツール使用を明示しないと、テキスト回答で済ませようとする傾向が強い傾向があります。
次にJSON スキーマの解釈については、ネストが深いスキーマや enum の複合条件を正確に解釈できないことがあります。ツールの定義を複雑にするほど、呼び出し失敗率が上がります。
さらにローカル実行時のコンテキスト制約として、Ollama や LM Studio 経由で動かす場合、デフォルトのコンテキスト長設定が小さいと、ツール定義の JSON がコンテキスト末尾で切れてしまい、モデルがツールの存在自体を認識できなくなります。
この3点を念頭に置くと、診断が格段に速くなります。
パターン1: ツールを無視してテキスト応答してしまう
症状: Antigravity エージェントがツールを一切呼ばず、自分の知識だけで答えてしまう。
原因: Gemma 4 はシステムプロンプトにツール使用の明示的な指示がないと、ツールが使えるのに使わない判断をすることがあります。
対処法: システムプロンプトにツール優先の指示を加えます。
system_instruction = """
ユーザーの質問に答える際は、利用可能なツールを積極的に使用してください。
情報の取得・計算・外部操作が必要な場合は、必ずツールを呼び出してから回答してください。
自分の知識だけで答えようとしないでください。
"""Antigravity の AGENTS.md でも同様の設定が可能です。
## ツール使用方針
外部情報が必要なすべての質問では、利用可能なツールを呼び出すこと。
ツールを使わずにテキスト応答のみで解決しようとすることを禁止する。「ツールを使わない選択肢」を明示的に制限することで、呼び出し率が安定します。
パターン2: JSON 形式エラーが発生する
症状:
Error: Invalid tool_call format: expected JSON object, got malformed output
原因: Gemma 4 が生成するツール呼び出し JSON に、不要なコメント行や末尾カンマが混入することがあります。temperature が高い(0.7以上)場合に特に頻発します。
対処法1: temperature を下げる
Antigravity のモデル設定で temperature を 0.1〜0.3 に設定します。ツール呼び出しが必要なエージェントタスクでは、創造性より出力の正確性を優先します。
対処法2: ツール定義をシンプルにする
# ❌ 複雑すぎるスキーマ(Gemma 4 で失敗しやすい)
tools = [{
"name": "search_product",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"enum": ["exact", "fuzzy", "regex"] # enumの複合条件
},
"filters": {
"type": "object",
"properties": {
"category": {"type": "string"},
"price_range": {
"type": "array",
"items": {"type": "number"} # ネスト3階層以上
}
}
}
}
}
}]
# ✅ シンプルなスキーマ(Gemma 4 推奨)
tools = [{
"name": "search_product",
"description": "商品を検索します。queryに検索キーワード、categoryに商品カテゴリを指定してください。",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "検索キーワード"
},
"category": {
"type": "string",
"description": "商品カテゴリ(例: electronics, clothing)"
}
},
"required": ["query"]
}
}]ネストを1〜2階層に収めてシンプルに設計し直すだけで、成功率が大きく改善するケースがほとんどです。スキーマは「Gemma 4 が確実に読める範囲」で設計するという原則で考えると、複雑な条件を入れたくなる衝動を抑えやすくなります。
パターン3: ローカル実行でツール定義が欠落する
症状: ローカルの Gemma 4(Ollama 経由)では動作するのに、Antigravity IDE 経由で実行すると毎回失敗します。
原因: Antigravity のデフォルトコンテキスト長(4,096〜8,192 トークン)が、ツール定義の JSON + システムプロンプト + 会話履歴の合計トークン数を下回っている場合があります。この状態ではモデルがツールの存在を認識できません。
診断方法: Antigravity のデベロッパーツール(Cmd+Shift+J で起動)の Network タブで、chat completions リクエストのペイロードを確認します。
{
"model": "gemma4:latest",
"context_length": 4096,
"tools": []
}tools が空配列または存在しない場合、コンテキスト不足が原因です。
対処法: Antigravity のモデル設定で context_length を 32768 以上に引き上げます。
{
"models": {
"gemma4:latest": {
"context_length": 32768,
"num_ctx": 32768
}
}
}Ollama 経由の場合は Modelfile でも設定できます。
FROM gemma4
PARAMETER num_ctx 32768
コンテキスト長を増やすとメモリ使用量が増えますので、メモリ不足でクラッシュする場合はGemma 4 の OOM エラー対処法もあわせて参照してください。
それでも解決しない場合
上記3パターンで解決しない場合は、以下を順番に試してみてください。
1. Gemma 4 モデルを最新版に更新する
ollama pull gemma4:latest古いバージョンでは Function Calling の実装に不具合が含まれていることがあります。
2. structured output(構造化出力)に切り替える
どうしてもツール呼び出しが安定しない場合は、ツール定義を使わず JSON 形式の応答を直接求めるアプローチも検討できます。Antigravity の response_format 設定でスキーマを指定する方法です。
3. クラウドモデルとのハイブリッド構成にする
ローカルの Gemma 4 は「コスト削減・プライバシー確保」の目的で選ぶことが多いですが、Function Calling の信頼性が重要なビジネスロジックには、Gemini 2.5 Flash などのクラウドモデルと使い分けるハイブリッド構成が現実的な選択肢です。ローカルとクラウドをタスク特性で使い分ける設計については、Gemma 4 を使ったエージェント構築の記事も参考になります。
Function Calling 以外のデバッグ全般については、エージェントのデバッグガイドもあわせてご覧ください。
次のアクション
まず temperature: 0.2 の設定とシンプルなツールスキーマの2点から試してください。この2点だけで体感では7割の問題は解決します。残り3割がコンテキスト長の問題ですので、デベロッパーツールでリクエストペイロードを確認するのが最短の診断ルートです。
同じ問題で時間を溶かしている方の参考になれば幸いです。