はじめに
Gemini 3 Flash のリリース以来、ずっと試してみたかったことがありました。Function Calling と Google Search グラウンディングを組み合わせた自律エージェントの構築です。
週末に実際に作ってみたところ、想像以上にスムーズに動いたので、その過程と気づきをまとめます。
作ったもの
「最新ニュースを取得して、指定トピックについて要約レポートを自動生成するエージェント」です。
ユーザーがトピック(例: "AI規制の最新動向")を投げると、エージェントが以下を自動実行します:
- Google Search でリアルタイム情報を取得
- 複数のソースから情報を統合
- 指定フォーマットで日本語レポートを生成
- ソース一覧を末尾に付与
コードは200行程度で実装できました。
Function Calling の基本的な流れ
Gemini API における Function Calling の流れはシンプルです。
- ツール定義をモデルに渡す
- モデルが「このツールを呼び出してほしい」と返す
- アプリ側でツールを実行してその結果を返す
- モデルが最終回答を生成する
この「人間とモデルの往復」が 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 でも今後、具体的なエージェント実装の記事を増やしていく予定です。