ANTIGRAVITY LABEN
記事一覧/Antigravity 基本
Antigravity 基本/2026-04-16中級

Gemma 4 をAntigravityで動かすエージェント構築:ツール呼び出しとメモリ設計の実践

Gemma 4 を Antigravity プラットフォームでエージェントとして動かす実践ガイド。ツール呼び出しの設計、メモリ管理の実装パターン、本番展開前のチェックリストを解説します。

Gemma 421Antigravity338エージェント64ツール呼び出しメモリ管理2

Gemma 4 がリリースされて以来、Antigravity 上でのエージェント構築を試みる開発者が急増しています。「Gemma 4 を動かすことはできた、でも思ったように動かない」という声をよく聞きます。多くの場合、問題はモデルの能力にあるのではなく、ツール設計とメモリ管理にあります。

ここではGemma 4 を Antigravity でエージェントとして動かすための実装パターンを、具体的なコードと設計判断の理由とともに解説します。

なぜ Gemma 4 × Antigravity の組み合わせが効くのか

Gemma 4 は Google が 2026年4月にリリースしたオープンモデルです。特筆すべき点は、同サイズ帯のモデルと比較してツール呼び出し(Function Calling)の精度が大幅に向上している点です。小規模なモデルでは「ツールを呼ぶべきタイミング」の判断が苦手なことが多いのですが、Gemma 4 はこのタイミング判断がかなり改善されています。

Antigravity は Google のエージェント開発プラットフォームとして、Gemma 4 との統合が前提で設計されています。ツールの登録・実行・結果の受け渡しの仕組みがシームレスで、他のフレームワークと比べてボイラープレートが少なく済みます。

この組み合わせが特に力を発揮するのは、外部APIやツールを多用するタスクです。検索、計算、データベース参照、ファイル操作などを組み合わせた業務フローを、比較的シンプルなコードで実現できます。

環境セットアップ:Antigravity に Gemma 4 を接続する

まず Antigravity の環境を用意します。Google Cloud の Vertex AI を経由するのが現時点での標準的なセットアップです。

pip install google-cloud-aiplatform antigravity-sdk
import vertexai
from antigravity import AgentBuilder, Tool
from vertexai.preview.generative_models import GenerativeModel
 
# Vertex AI の初期化
vertexai.init(project="your-project-id", location="us-central1")
 
# Gemma 4 モデルの接続
model = GenerativeModel("gemma-4-pro")  # または gemma-4-it
 
# エージェントビルダーの初期化
agent_builder = AgentBuilder(model=model)

ここでモデルのバリアントの選択について一点補足します。gemma-4-pro はより高精度ですが応答が遅く、コストも高めです。gemma-4-it は Instruction Tuned 版で、エージェントタスクへの応答速度と精度のバランスが良く、多くのユースケースではこちらで十分です。

ツール呼び出しの設計:何を使わせ、何を禁じるか

エージェント開発で最もよくある失敗の一つは「ツールを多く与えすぎること」です。Gemma 4 はツール選択の精度が向上しましたが、それでも利用可能なツールが多すぎると混乱が起きます。設計の基本原則は「1エージェント=3〜5ツール以内」です。

ツールの定義方法を示します。

from antigravity import Tool, ToolParameter
 
# 検索ツールの定義
search_tool = Tool(
    name="web_search",
    description="最新情報や事実確認が必要な場合にウェブを検索する。一般的な知識には使わない。",
    parameters=[
        ToolParameter(
            name="query",
            type="string",
            description="検索クエリ。具体的な検索語を使い、自然文は避ける。",
            required=True
        ),
        ToolParameter(
            name="max_results",
            type="integer",
            description="取得する結果の最大数(1〜5)",
            required=False,
            default=3
        )
    ],
    function=execute_web_search  # 実際の検索を行う関数
)
 
# 計算ツールの定義
calculator_tool = Tool(
    name="calculate",
    description="数値計算を行う。掛け算・割り算・複雑な数式の評価など。",
    parameters=[
        ToolParameter(
            name="expression",
            type="string",
            description="評価する数式。例: '1234 * 5678' または '(100 * 0.08) + 1000'",
            required=True
        )
    ],
    function=safe_calculate
)
 
# エージェントにツールを登録
agent = agent_builder.build(
    tools=[search_tool, calculator_tool],
    system_instruction="""
    あなたは業務支援アシスタントです。
    ウェブ検索は最新情報が必要なときだけ使ってください。
    すでに知っている情報にはツールを使わないでください。
    計算は必ず calculator ツールを使ってください。頭の中で計算しないこと。
    """
)

description に「いつ使うか」と「いつ使わないか」の両方を書くのが重要です。Gemma 4 はこの記述を参考にツールを選択するため、使うべきでないケースを明示することで誤ったツール呼び出しを大幅に減らせます。

メモリとコンテキスト管理の実装パターン

エージェントが長い会話や複数ステップのタスクを扱う場合、メモリ管理は避けられない課題になります。Antigravity には 3種類のメモリ機構があります。

インメモリ(セッション内): デフォルトで有効。会話の全履歴をコンテキストに保持します。長い会話ではコンテキストが膨れ上がり、精度が落ちたり速度が低下したりします。

サマリーメモリ: 一定のメッセージ数ごとに過去の会話を要約し、圧縮してコンテキストに保持します。長期的なタスクに向いています。

外部メモリ: Vector DB(Vertex AI Vector Search など)に記憶を外出しする方式です。大量の情報を参照しながら動くエージェントに使います。

from antigravity.memory import SummaryMemory, ExternalMemory
 
# サマリーメモリの設定
memory = SummaryMemory(
    max_recent_messages=10,    # 最新10件はそのまま保持
    summary_interval=20,        # 20件ごとに要約を生成
    summary_model=model         # 要約にも同じモデルを使用
)
 
# または外部メモリ(大規模ナレッジが必要な場合)
external_memory = ExternalMemory(
    vector_store="vertex-ai-vector-search",
    index_id="your-index-id",
    top_k=5  # 関連する過去情報を上位5件取得
)
 
agent = agent_builder.build(
    tools=[search_tool, calculator_tool],
    memory=memory,  # または external_memory
    system_instruction="..."
)

実際の選択基準として、タスクが1セッション内で完結するなら インメモリで十分です。数日・数週間にわたるプロジェクト支援のようなユースケースにはサマリーメモリが適しています。ドキュメントや過去の事例を大量に参照するナレッジベースエージェントには外部メモリが必要です。

エージェントの実行と結果の受け取り

実際にエージェントを動かすコードです。

import asyncio
 
async def run_agent_task(user_request: str) -> str:
    """エージェントにタスクを依頼し、結果を受け取る"""
    
    response = await agent.run_async(
        user_message=user_request,
        session_id="session-001"  # セッションを継続する場合に指定
    )
    
    # ツール呼び出しのログを確認(デバッグ時に有用)
    for step in response.steps:
        if step.type == "tool_call":
            print(f"ツール使用: {step.tool_name}({step.arguments})")
            print(f"結果: {step.result[:100]}...")
    
    return response.final_answer
 
# 実行例
async def main():
    result = await run_agent_task(
        "2026年4月時点のPythonの最新バージョンを調べて、"
        "それを使った仮想環境の作成コマンドを教えてください。"
    )
    print(result)
 
asyncio.run(main())

本番環境への展開前に確認すること

エージェントを実際の業務に組み込む前に、いくつかの点を確認しておく必要があります。

ツールの安全性: 外部APIを呼び出すツールには、レート制限のチェックとエラーハンドリングを必ず入れてください。エージェントがループ状態に陥ってAPIを大量呼び出しするケースが実際に起きます。

import time
from functools import wraps
 
def rate_limited(calls_per_second: float):
    """シンプルなレート制限デコレータ"""
    min_interval = 1.0 / calls_per_second
    last_called = [0.0]
    
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            elapsed = time.time() - last_called[0]
            if elapsed < min_interval:
                time.sleep(min_interval - elapsed)
            result = func(*args, **kwargs)
            last_called[0] = time.time()
            return result
        return wrapper
    return decorator
 
@rate_limited(calls_per_second=1)
def execute_web_search(query: str, max_results: int = 3) -> str:
    # 実際の検索処理
    ...

最大ステップ数の設定: エージェントが無限に動き続けないよう、タスクあたりの最大ステップ数を設定します。Antigravity では max_steps パラメータで制御できます。

人間によるレビューポイント: 高リスクな操作(データの削除・外部への送信など)の前には、人間の確認を挟む設計にしてください。完全な自動化は「確認しなくても大丈夫なタスク」に限定するのが原則です。

Gemma 4 × Antigravity の組み合わせは、個人開発者がエージェントを試すには今がベストなタイミングです。まずは小さな・安全なタスク(情報収集、下書き生成など)から始めて、動作を確認しながら徐々にスコープを広げていくアプローチをお勧めします。

シェア

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

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

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

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

関連記事

Antigravity 基本2026-07-01
背景スケジューリングで自分のピークを作らない時刻分散設計
Antigravity 2.0 のデスクトップは背景でタスクを自動スケジュールします。便利な反面、丸い時刻に寄せると自分でピークを作り、深夜のジョブがまとめてこけます。時刻を散らして重なりを禁じる設計を実例でまとめます。
Antigravity 基本2026-06-24
Antigravity 4サーフェスを1案件で組み合わせる — SDKで自作エージェントを動かすまで
Antigravity 2.0・CLI・IDE・SDK を1つの案件の中でどう使い分け、どう橋渡しするか。設計の発散から本番の収束、そして Python SDK で小さなカスタムエージェントを動かすところまでを、実際の運用フローに沿って実装込みで解説します。
Antigravity 基本2026-06-24
Antigravity 2.0・CLI・IDE・SDK — 4つのサーフェスを実プロジェクトで束ねる
Antigravity 2.0(デスクトップ)・CLI・IDE・SDK の4つの入り口を、選び方の基準だけでなく、1つのプロジェクトの中で実際にどう束ねて回すかまで掘り下げます。ヘッドレス実行を自動化に組み込むコード例と、コストと移行の落とし穴も添えました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →