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日に停止される予定です
ブログ一覧

Gemini 3 Flash の Function Calling で自律エージェントを作った話

geminifunction-callingagentgoogle-search開発メモ

はじめに

Gemini 3 Flash のリリース以来、ずっと試してみたかったことがありました。Function Calling と Google Search グラウンディングを組み合わせた自律エージェントの構築です。

週末に実際に作ってみたところ、想像以上にスムーズに動いたので、その過程と気づきをまとめます。

作ったもの

「最新ニュースを取得して、指定トピックについて要約レポートを自動生成するエージェント」です。

ユーザーがトピック(例: "AI規制の最新動向")を投げると、エージェントが以下を自動実行します:

  1. Google Search でリアルタイム情報を取得
  2. 複数のソースから情報を統合
  3. 指定フォーマットで日本語レポートを生成
  4. ソース一覧を末尾に付与

コードは200行程度で実装できました。

Function Calling の基本的な流れ

Gemini API における Function Calling の流れはシンプルです。

  1. ツール定義をモデルに渡す
  2. モデルが「このツールを呼び出してほしい」と返す
  3. アプリ側でツールを実行してその結果を返す
  4. モデルが最終回答を生成する

この「人間とモデルの往復」が Function Calling の本質で、モデルが「何をすべきか」を判断し、実際の実行は開発者側が担います。

実装で気づいたこと

1. ツール定義の精度が肝

ツールの description が曖昧だと、モデルが不適切なタイミングで呼び出してしまいます。「いつ使うか」「何を入力するか」「何が返るか」を明確に記述することで精度が上がりました。

tools = [
    {
        "name": "search_web",
        "description": "指定したクエリでウェブ検索を実行し、最新情報を取得する。ユーザーが現在の出来事や最新データを必要としているときに使用する。",
        "parameters": {
            "type": "object",
            "properties": {
                "query": {
                    "type": "string",
                    "description": "検索クエリ(日本語または英語)"
                }
            },
            "required": ["query"]
        }
    }
]

2. Google Search グラウンディングとの使い分け

Gemini API には「Google Search グラウンディング」という機能もあり、モデルが自動でウェブ検索を行ってくれます。Function Calling との違いは:

  • Google Search グラウンディング: モデルが自律的に検索。コードが少なく済む
  • Function Calling: 開発者がツールを定義して制御。複数ツールの組み合わせや独自API連携が可能

今回のエージェントでは、社内APIとの連携も念頭に置いて Function Calling を選択しました。

3. 推論レベルの設定が効く

Gemini 3 Flash の推論レベル(thinking_budget)を high にすると、ツールを呼び出すタイミングの判断がかなり正確になります。コスト最適化を重視するなら medium でも十分でした。

4. ループ制御は必須

エージェントがツールを呼び出し続けるループに入らないよう、最大ステップ数の制限を入れることを強く推奨します。テスト中に API コストが想定外に膨らんだ経験があります。

MAX_STEPS = 5
for step in range(MAX_STEPS):
    response = model.generate_content(messages, tools=tools)
    if not response.candidates[0].function_calls:
        break  # ツール呼び出しなし → 最終回答
    # ツール実行 → 結果をメッセージに追加

Gemini 3 Flash を選んだ理由

今回のエージェント用途には Gemini 3 Flash が最適でした。

  • 速度: エージェントはループが多いので、レスポンスが遅いとUXが壊れる
  • コスト: $0.50/1M入力トークンは、ループ込みでも現実的なコスト
  • Function Calling精度: ProレベルのSWE-bench 78%のおかげで、ツール選択の判断が正確

Gemini 3.1 Pro に比べてコストは大幅に低く、エージェント用途では Flash の方がむしろ実用的だと感じました。

今後やりたいこと

  • 複数のツール(Web検索 + メール送信 + カレンダー登録)を組み合わせたマルチツールエージェント
  • Google Antigravity との統合による完全自律ワークフロー
  • ストリーミング対応で、エージェントの思考プロセスをリアルタイム表示

Function Calling は思ったよりシンプルに実装でき、応用範囲が広いです。Gemini Lab でも今後、具体的なエージェント実装の記事を増やしていく予定です。