GEMINI LABEN
NANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定ですNANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定です
記事一覧/高度な活用
高度な活用/2026-04-28中級

Gemma 4のFunction Callingでローカルエージェントを構築する

Gemma 4の専用Function Callingトークンを活用して、プライベートなローカルエージェントを実装する方法を解説します。

Gemma 412Function Calling16エージェント14ローカルLLM10オープンモデル

Googleが最近リリースしたGemma 4は、単なる言語モデルの性能向上にとどまりません。最も注目すべき点は、専用のFunction Callingトークンが実装されたこと。これによってローカルマシンで、クラウドAPIに依存しないエージェントシステムが現実的になりました。

オンプレミスのAIツール導入を検討している方、あるいはプライバシーを重視する開発者にとって、この変化は大きな意味を持ちます。

Gemma 4のFunction Callingとは

Gemma 4には4つのモデルサイズが用意されています。

  • E2B(超小型): 2Bパラメータ、エッジデバイス向け
  • E4B(小型): 4Bパラメータ、Raspberry Pi等で動作
  • 26B MoE(Mixture of Experts): 26Bパラメータのうち4Bのみアクティブ化
  • 31B Dense(フル): 31Bパラメータ、最高品質

Function Callingの観点では、26B MoEが特に興味深いです。メモリ上には26Bロードする必要がありますが、推論時には4Bのパラメータのみ活性化されるため、レイテンシが低い。つまり、エージェントループの応答速度が現実的なレベルに保たれます。

旧世代では、Function Callingを実装するために複雑なプロンプトエンジニアリングが必要でした。Gemma 4の場合、トークンレベルで関数呼び出しの意図を表現できるため、より確実で予測可能な動作が期待できます。

実装例:ローカルエージェント

Pythonで実装した簡単な例を示します。

import json
from transformers import AutoTokenizer, AutoModelForCausalLM
 
# モデルをロード(26B MoEの場合)
model_name = "google/gemma-4-26b-moe"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto",
    torch_dtype="auto"
)
 
# 利用可能なツール定義
tools = [
    {
        "name": "search_web",
        "description": "ウェブから情報を検索します",
        "parameters": {
            "type": "object",
            "properties": {
                "query": {
                    "type": "string",
                    "description": "検索クエリ"
                }
            },
            "required": ["query"]
        }
    },
    {
        "name": "fetch_document",
        "description": "URLからドキュメントを取得します",
        "parameters": {
            "type": "object",
            "properties": {
                "url": {
                    "type": "string",
                    "description": "ドキュメントのURL"
                }
            },
            "required": ["url"]
        }
    }
]
 
def build_system_prompt(tools):
    """ツール情報を含むシステムプロンプトを構築"""
    prompt = "あなたは有能なアシスタントです。以下のツールを使用してタスクを完了します。\n\n"
    prompt += "利用可能なツール:\n"
    for tool in tools:
        prompt += f"- {tool['name']}: {tool['description']}\n"
    prompt += "\n関数を呼び出す際は、JSONフォーマットで以下のように記述してください:\n"
    prompt += '{"tool": "tool_name", "params": {...}}'
    return prompt
 
def run_agent_loop(user_query, max_iterations=5):
    """エージェントループを実行"""
    system_prompt = build_system_prompt(tools)
    messages = [
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": user_query}
    ]
    
    for i in range(max_iterations):
        # モデルの応答を生成
        input_ids = tokenizer.apply_chat_template(
            messages,
            tokenize=True,
            add_generation_prompt=True,
            return_tensors="pt"
        ).to(model.device)
        
        outputs = model.generate(
            input_ids,
            max_new_tokens=512,
            temperature=0.7,
            top_p=0.9
        )
        
        response = tokenizer.decode(
            outputs[0][input_ids.shape[-1]:],
            skip_special_tokens=True
        )
        
        messages.append({"role": "assistant", "content": response})
        
        # レスポンスからツール呼び出しを抽出(簡略版)
        if '{"tool":' in response:
            try:
                # JSONを抽出(実際はより堅牢なパーサが必要)
                tool_call = json.loads(
                    response[response.find('{"tool":'):response.rfind('}')+1]
                )
                
                # ツールを実行(ここでは文字列を返す)
                tool_result = f"ツール '{tool_call['tool']}' の結果"
                messages.append({"role": "user", "content": tool_result})
                
            except json.JSONDecodeError:
                break
        else:
            # ツール呼び出しなし、終了
            return response
    
    return response
 
# 使用例
result = run_agent_loop("2024年の主要なAI動向を調べて、簡潔にまとめてください")
print(result)

このコードのポイント:

  1. chat_template対応: Gemma 4はチャット形式を完全サポートしているため、apply_chat_templateで簡潔に処理できます
  2. ストリーミング出力: 実際にはstreaming=Trueで逐次出力すれば、ユーザー体験が向上します
  3. エラーハンドリング: JSONパース失敗時に安全に落ち着く仕組みが重要です

クラウドAPIと比較する

Gemma 4ローカル実装とGoogle Gemini APIの違いを整理します。

項目Gemma 4ローカルGemini API
初期投資GPU購入(¥100,000~)なし
ランニングコスト電気代のみAPI従量課金
レイテンシ秒単位(ハードウェア依存)1~2秒
プライバシー完全プライベートGoogle側に送信
カスタマイズFine-tuningが可能不可
スケール単一マシン限定無制限スケール

スタートアップやセキュリティを重視する企業であれば、ローカル実装のメリットは大きいです。一方で、高精度・大規模スケールが必要な場合はAPI利用が現実的です。

256Kコンテキストウィンドウの活用

Gemma 4は256Kトークンのコンテキストウィンドウを持ちます。これは何を意味するのか?

複雑なマルチステップワークフローが単一リクエストで完結できるということです。例えば:

  • ドキュメント全体(数万トークン)をロード
  • 複数のツール呼び出しの履歴をメモリに保持
  • 最初のクエリから10ステップ後の決定でも、コンテキストは失われない

オンプレミスの場合、このメリットを最大限活かすには、エージェントループが長くなるほど有効です。

実装時の注意点

Gemma 4をローカルで動かす際、いくつかの落とし穴があります。

メモリ管理: 26B MoEであっても26GB必要です。RTX 4090(24GB)では難しく、A100(80GB)かH100推奨です。

推論速度: CPU推論は実用的ではありません。NVIDIA GPUは必須。AMD ROCmでも動きますが、最適化度は劣ります。

量子化とトレードオフ: メモリ削減のため4bit量子化も可能ですが、Function Callingの精度が若干低下します。テストは必須です。

複数のオンプレミスAIシステムの導入経験から、メモリと精度のバランス取りが成功の鍵だと感じています。

次のステップ

Gemma 4を試す準備ができたら、こちらの記事も参考になります:

Gemma 4のFunction Calling実装は、個人開発者にとって「本当に使えるAIエージェント」を手に入れるチャンスです。プライバシーとコスト削減の両立を目指すなら、ぜひ試してみてください。

シェア

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

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

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

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

高度な活用2026-07-04
Gemini 3 × Function Calling + Built-in Tools + Context Circulation: プロダクション向けマルチツールエージェント設計と実装
Gemini 3の最新ツール機能を深掘り。Built-in ToolsとFunction Callingの組み合わせ、Context Circulation、並列ツール呼び出しIDによる本番エージェント設計を、実測とつまずきの記録を交えて解説します。
高度な活用2026-07-03
ツール結果が会話を静かに食いつぶす — Gemini Function Calling の巨大レスポンスをハンドル渡しで軽くする設計
Function Calling のツール結果が会話履歴に滞留し、入力トークンを複利で膨らませる問題を分解します。トークン予算つき圧縮とハンドル渡しの2実装で、実測で入力を約1/8に抑えた手順と落とし穴をまとめます。
高度な活用2026-06-13
Gemini で自律エージェントを動かす最小構成 — ツールループ設計で学んだこと
google-genai SDK の自動 Function Calling で自律エージェントを最小構成から作る手順。ステップ上限・ツール許可リスト・再試行の設計判断を、ブログ運用の自動化で得た実体験とともにまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →