GEMINI LABEN
ROBOTICS — 8月31日に停止した ER 1.6 preview には後継があります。Gemini Robotics ER 2 が公開プレビュー中で、通常版とストリーミング版の2種類が提供されていますVIDEO — ER 2 の成功・失敗判定は静止画ではなく生の映像フィード上で動きます。こぼれ・滑り・位置ずれのような、実行の途中で起きる失敗を捉えられる設計ですDEADLINE — 次の期限は9月30日、gemini-omni-flash-preview の廃止です。移行先は8月27日に GA になった gemini-omni-1.1-flash で、残り4週間を切りましたAPIKEY — 残りの標準 API キーは、制限付きのものも含めて9月中に全面停止します。移行先は Google Cloud サービスアカウントに紐付く auth キー形式ですPRICE — Gemini 3.7 Flash の導入価格 $0.75/$3.75 per 1M は12月31日までです。2027年1月1日から $1.50/$7.50 になるため、年を跨ぐ見積もりは2本立てが要りますAUDIO — Gemini 3.5 Transcribe は85言語以上の言語検出、話者ダイアライゼーション、単語単位タイムスタンプ、最大1,000語のカスタム語彙バイアスに対応していますROBOTICS — 8月31日に停止した ER 1.6 preview には後継があります。Gemini Robotics ER 2 が公開プレビュー中で、通常版とストリーミング版の2種類が提供されていますVIDEO — ER 2 の成功・失敗判定は静止画ではなく生の映像フィード上で動きます。こぼれ・滑り・位置ずれのような、実行の途中で起きる失敗を捉えられる設計ですDEADLINE — 次の期限は9月30日、gemini-omni-flash-preview の廃止です。移行先は8月27日に GA になった gemini-omni-1.1-flash で、残り4週間を切りましたAPIKEY — 残りの標準 API キーは、制限付きのものも含めて9月中に全面停止します。移行先は Google Cloud サービスアカウントに紐付く auth キー形式ですPRICE — Gemini 3.7 Flash の導入価格 $0.75/$3.75 per 1M は12月31日までです。2027年1月1日から $1.50/$7.50 になるため、年を跨ぐ見積もりは2本立てが要りますAUDIO — Gemini 3.5 Transcribe は85言語以上の言語検出、話者ダイアライゼーション、単語単位タイムスタンプ、最大1,000語のカスタム語彙バイアスに対応しています
ブログ一覧

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 でも今後、具体的なエージェント実装の記事を増やしていく予定です。