0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gemini 3.5 Flash コーディングエージェント入門 — MCP Atlas首位・4倍高速・API移行ガイド

0
Last updated at Posted at 2026-05-29

Gemini 3.5 Flash — アジェンティックコーディングモデル概要

はじめに

2026年5月19日、Google I/O 2026でGemini 3.5 Flashが正式リリースされました。エージェントとコーディングに特化した本モデルは、Gemini 3.1 Proを複数の主要ベンチマークで上回りながら、他のフロンティアモデルの4倍の出力速度を実現しています。

この記事では、Gemini 3.5 FlashをAPIで活用するための実践的なガイドを解説します。特にGemini 3.1 Flash/Proから移行する開発者向けに、thinking_levelパラメータの変更やFunctionResponse仕様の変更など、見落とすとサイレントな性能劣化を引き起こす破壊的変更を詳しく取り上げます。

この記事で学べること

  • Gemini 3.5 Flashの主要スペックとベンチマーク性能
  • Gemini 3.1 Flash/Proからの移行で必要な破壊的変更への対処
  • Python APIを使った基本的な呼び出し方法
  • thinking_levelの使い分け戦略
  • Function Callingを活用したコーディングエージェントの実装例

対象読者

  • Gemini APIを利用しているPython開発者
  • Gemini 3.1 Flash/ProからGemini 3.5 Flashへの移行を検討している方
  • MCPやコーディングエージェントを開発している方

前提環境

  • Python 3.10以上
  • google-genai SDK(最新版)
  • Gemini API キー(Google AI Studioで取得)

TL;DR

  • Gemini 3.5 Flashは2026年5月19日GA、モデルIDはgemini-3.5-flash
  • **MCP Atlas 83.6%**でフロンティアモデル最高水準のツール連携信頼性を達成
  • 他フロンティアモデルの4倍の出力速度、料金は$1.50/$9.00(入力/出力、1Mトークンあたり)
  • 破壊的変更: thinking_budgetthinking_levelへ変更、デフォルトがhigh相当→mediumに変更
  • temperature/top_p/top_kは削除、FunctionResponseにid/nameの付与が必須

Gemini 3.5 Flashとは

Gemini 3.5 Flash ベンチマークスコア一覧

Google公式ブログによると、Gemini 3.5 Flashは「エージェントとコーディングにおけるフロンティア性能」を目標に設計されており、「複雑な長期タスクで実世界の価値を発揮することに優れている」とされています。

主要スペック

項目
モデルID gemini-3.5-flash
リリース日 2026年5月19日
入力料金 $1.50 / 1Mトークン
出力料金 $9.00 / 1Mトークン(Thinkingトークン含む)
キャッシュ入力料金 $0.15 / 1Mトークン
キャッシュストレージ $1.00 / 1Mトークン / 時間
対応入力 テキスト、画像、音声、動画、PDF

最新の料金は公式料金ページを参照してください。

ベンチマーク性能

公式ブログによると、Gemini 3.5 FlashはGemini 3.1 Proを上回る以下のスコアを達成しています。

ベンチマーク スコア 評価内容
Terminal-Bench 2.1 76.2% コーディング能力
MCP Atlas 83.6% マルチステップツール連携の信頼性
GDPval-AA 1656 Elo 現実世界のエージェントタスク
CharXiv Reasoning 84.2% マルチモーダル理解

特にMCP Atlasは「スケールされたツール使用の信頼性」を測定するベンチマークです。MCPドリブンのエージェント開発において最も実務的な指標であり、ここでの高スコアはマルチステップのツール連携における高い安定性を示しています。

速度の優位性

公式発表によると、出力トークン速度が他のフロンティアモデルと比較して4倍速いとされています。これにより、従来は速度か品質かのトレードオフが生じていたエージェント開発において、応答品質を維持しつつ処理速度を大幅に向上できます。

Dynamic Thinking(デフォルト有効)

Gemini 3.5 FlashではDynamic Thinkingがデフォルトで有効です。より複雑な問題に対しては自動的に多くの計算資源を割り当て、単純な問題には少ない資源で応答します。これにより、一律に高い思考予算を設定しなくても、問題難易度に応じたコスト最適化が自動的に行われます。

サポートされない機能: Computer UseはGemini 3.5 Flashではサポートされていません。Computer Useが必要なワークロードには、引き続きgemini-3-flash-previewを使用してください(公式移行ガイド参照)。


Gemini 3.1 Flashからの移行ガイド

Gemini 3.1→3.5 Flash 移行の4つの破壊的変更

公式移行ガイドでは、Gemini 3.5 Flashへの移行における破壊的変更が4点まとめられています。

変更1: thinking_budgetからthinking_levelへ(最重要)

最も影響が大きい変更です。整数値のthinking_budgetが文字列Enumのthinking_levelに変更されました。

変更前(gemini-3-flash-preview):

config = types.GenerateContentConfig(
    thinking_config=types.ThinkingConfig(
        thinking_budget=8000  # 整数値で指定
    )
)

変更後(gemini-3.5-flash):

config = types.GenerateContentConfig(
    thinking_config=types.ThinkingConfig(
        thinking_level="high"  # 文字列enumで指定
    )
)

thinking_levelの値と推奨用途:

推奨用途
"minimal" 単純なクエリ、低遅延を最優先する場合
"low" コード・エージェントタスク、低遅延要件がある場合
"medium" 新デフォルト。ほとんどのタスクに最適
"high" 複雑な推論、難しいコーディング課題

サイレント性能劣化に注意: gemini-3-flash-previewのデフォルトthinkingは実質的にhigh相当でしたが、gemini-3.5-flashのデフォルトはmediumに変更されました。thinking_levelを明示しない場合、静かにモデル性能が低下する可能性があります。コーディングエージェントや精度重視の用途では"high"を明示的に指定することを推奨します。

変更2: temperature/top_p/top_kの削除

以下のパラメータはGemini 3.5 Flashでは削除されています。コードに含まれている場合は削除してください。

# 削除が必要なパラメータ
config = types.GenerateContentConfig(
    temperature=0.7,  # 削除
    top_p=0.9,        # 削除
    top_k=40,         # 削除
)

公式ドキュメントでは「デフォルト値を変更しないことを強く推奨する」とされており、これらのパラメータによるモデル挙動の微調整は非推奨となりました。

変更3: FunctionResponseの仕様変更

Function Callingを使用している場合、FunctionResponseidnameの付与が必須になりました。

変更前:

response_part = types.Part(
    function_response=types.FunctionResponse(
        name="get_weather",
        response={"temperature": 25, "condition": "sunny"}
    )
)

変更後(idとnameの両方が必須):

# FunctionCallオブジェクトからidを取得して使用する
function_call = response.candidates[0].content.parts[0].function_call

response_part = types.Part(
    function_response=types.FunctionResponse(
        id=function_call.id,      # 必須: 元のFunctionCallのidに一致させる
        name=function_call.name,  # 必須: 関数名も一致させる
        response={"temperature": 25, "condition": "sunny"}
    )
)

また、マルチモーダルコンテンツはfunction_response外側ではなく内側に配置する必要があります。インライン指示が必要な場合は、レスポンステキストに改行2つ(\n\n)で区切って追記します。

変更4: Thought Preservationのデフォルト有効化

内部推論トークンがマルチターン会話をまたいで自動的に保持されるようになりました。モデルが以前の推論コンテキストを参照できるため、長いエージェントループでの一貫性が向上します。ただし、トークン使用量が増加する点に注意してください。


基本的なAPI呼び出し(Python)

pip install google-genai

以下はgoogle-genai SDKを使った基本的な呼び出し例です。

from google import genai
from google.genai import types

client = genai.Client(api_key="YOUR_API_KEY")

response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents="Pythonで効率的な二分探索を実装する関数を書いてください",
    config=types.GenerateContentConfig(
        thinking_config=types.ThinkingConfig(
            thinking_level="high"  # コーディング用途では明示的に指定
        )
    )
)

print(response.text)

ストリーミング対応

長時間の推論が必要なタスクには、ストリーミングを使用することで応答を逐次処理できます。

for chunk in client.models.generate_content_stream(
    model="gemini-3.5-flash",
    contents="この100行のPythonコードをレビューして問題点を指摘してください",
    config=types.GenerateContentConfig(
        thinking_config=types.ThinkingConfig(
            thinking_level="high"
        )
    )
):
    if chunk.text:
        print(chunk.text, end="", flush=True)

コーディングエージェントの構築例:Function Calling実装

Gemini 3.5 Flash Function Callingによるコーディングエージェントループ

Gemini 3.5 FlashのMCP Atlas高スコアは、マルチステップのツール連携において高い信頼性を持つことを示しています。以下はFunction Callingを使ったシンプルなコーディングエージェントの実装例です。新仕様のFunctionResponseidname付き)に対応しています。

from google import genai
from google.genai import types

client = genai.Client(api_key="YOUR_API_KEY")

# ツール定義
tools = [
    types.Tool(
        function_declarations=[
            types.FunctionDeclaration(
                name="execute_python",
                description="Pythonコードを実行して結果を返す",
                parameters=types.Schema(
                    type="OBJECT",
                    properties={
                        "code": types.Schema(
                            type="STRING",
                            description="実行するPythonコード"
                        )
                    },
                    required=["code"]
                )
            ),
            types.FunctionDeclaration(
                name="read_file",
                description="ファイルの内容を読み込む",
                parameters=types.Schema(
                    type="OBJECT",
                    properties={
                        "path": types.Schema(
                            type="STRING",
                            description="読み込むファイルのパス"
                        )
                    },
                    required=["path"]
                )
            )
        ]
    )
]


def execute_tool(name: str, args: dict) -> str:
    """ツールを実行(実際の実装ではサンドボックス環境を推奨)"""
    if name == "execute_python":
        # ここに実際のコード実行ロジックを実装
        return f"実行完了: {args['code'][:100]}"
    elif name == "read_file":
        with open(args["path"], "r") as f:
            return f.read()
    return f"Unknown tool: {name}"


def run_coding_agent(task: str, max_turns: int = 10) -> str:
    """コーディングエージェントを実行"""
    contents = [types.Content(
        role="user",
        parts=[types.Part(text=task)]
    )]

    for _ in range(max_turns):
        response = client.models.generate_content(
            model="gemini-3.5-flash",
            contents=contents,
            config=types.GenerateContentConfig(
                tools=tools,
                thinking_config=types.ThinkingConfig(
                    thinking_level="high"
                )
            )
        )

        # Function Callがない場合はエージェントループ終了
        function_calls = [
            part.function_call
            for part in response.candidates[0].content.parts
            if hasattr(part, "function_call") and part.function_call
        ]

        if not function_calls:
            return response.text

        # モデルの応答をcontentsに追加
        contents.append(response.candidates[0].content)

        # Function Callを実行して結果を返す(新仕様: idとnameの付与が必須)
        function_responses = []
        for fc in function_calls:
            result = execute_tool(fc.name, dict(fc.args))

            function_responses.append(
                types.Part(
                    function_response=types.FunctionResponse(
                        id=fc.id,      # 必須: 元のFunctionCallのidに一致させる
                        name=fc.name,  # 必須: 関数名に一致させる
                        response={"result": result}
                    )
                )
            )

        contents.append(types.Content(
            role="user",
            parts=function_responses
        ))

    return "最大ターン数に達しました"


# エージェントを実行
result = run_coding_agent(
    "Pythonで二分探索ツリーを実装し、挿入・検索・削除のメソッドをテストコードと共に作成してください"
)
print(result)

thinking_levelの選択戦略

コーディングエージェントの用途に応じてthinking_levelを使い分けることで、コストとレイテンシを最適化できます。

シナリオ 推奨thinking_level 理由
複雑なアルゴリズム実装・最適化 "high" 精度重視
コードレビュー・バグ修正 "medium" バランス重視
定型的なコード補完・フォーマット "low" 速度重視
単純な質問応答・コメント生成 "minimal" 低遅延重視

ツール呼び出しが過剰になる場合: エージェントループ内でツール呼び出しが多くなりすぎる場合は、まずthinking_levelを下げることが推奨されています。それでも改善しない場合は、システムインストラクションでツール使用に関する制約を追記します。


まとめ

Gemini 3.5 Flashは、エージェントとコーディングに特化したGoogleの最新フロンティアモデルです。

主なポイント:

  • MCP Atlas 83.6%でマルチステップツール連携の高い信頼性を実現
  • 他フロンティアモデルの4倍の出力速度
  • $1.50/$9.00(入力/出力)の料金体系
  • Dynamic Thinkingがデフォルト有効

Gemini 3.1 Flashからの移行時の必須対応:

  1. モデルIDをgemini-3.5-flashに変更
  2. thinking_budget(整数)をthinking_level(文字列enum)に変更
  3. デフォルトがhigh→mediumに変わった点を考慮(コーディング用途では"high"の明示指定を推奨)
  4. temperature/top_p/top_kをコードから削除
  5. FunctionResponseidnameを追加

コーディングエージェント開発において、Gemini 3.5 Flashは速度・精度・コストの3軸でバランスの取れたモデルです。

参考リンク

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?