Google Antigravity SDKでAIに「道具」を使わせる方法を調べて試してみた

Antigravity SDK入門 AI

前回の記事では、話題のAIエージェント開発ツール「Google Antigravity SDK」について、基本的な特徴やインストールの手順を調べてまとめました。

今回は、AIエージェントの本領である「AIに自分でネット検索をさせたり、ファイルに結果を書き込ませたりして、自律的に働かせる仕組み(Tool Use)」について調べて、実際に簡単なプログラムを動かしてみました!

Antigravity SDKを初めて触る私でも、「AIが自分で考えて道具を使いこなす様子」を体験できたので、その手順と調べて分かった注意点をレポートします。

「AIに道具(ツール)を持たせる」仕組み

通常のAIチャットは、こちらが質問したことに対して学習データにある知識だけで答えます。そのため、最新の情報を調べたり、パソコン内のファイルを書き換えたりすることはできませんでした。

それに対し、AIエージェントには「道具(ツール)」を持たせることができます。今回の実験では、エージェントに以下の2つの道具を持たせてみました。

  • 道具1:Web検索ツール(指定されたキーワードでネット検索し、最新情報を集める機能)
  • 道具2:ファイル保存ツール(調べた結果をテキストファイルに書き出してパソコンに保存する機能)

これらを登録しておくと、AIが「まずはネットで調べて、次にその内容をファイルに書き込もう!」と自分で考えて、これらの道具を順番に呼び出してくれます。

実際に書いて動かしてみたPythonコード

最小限のプログラムコードがこちらです。同じフォルダに .env ファイルを作成し、GEMINI_API_KEY="APIキー" を事前に設定して実行しました。

import os
import sys
import asyncio
from google.antigravity import Agent, LocalAgentConfig

# .env ファイルから環境変数を自動で読み込む
try:
    from dotenv import load_dotenv
    load_dotenv()
except ImportError:
    pass

# 💡 道具1:Web検索ツールを定義する
# (初めて動かす際に試しやすいよう、デモ用にシンプルな検索結果を返す関数にしています)
def web_search(query: str) -> str:
    """指定されたキーワードでインターネットを検索し、最新情報を取得します。

    Args:
        query: 検索キーワード (例: "AIエージェント")
    """
    if "AIエージェント" in query:
        return "最新のAIエージェントは、ただ会話するだけでなく、自律的にツールを選択して動作する機能が注目されています。"
    else:
        return f"「{query}」に関する検索結果:最新のIT技術動向において、業務自動化が急激に進んでいます。"

# 💡 道具2:ファイル保存ツールを定義する
def save_to_file(filename: str, content: str) -> str:
    """テキストデータを指定された名前のファイルに保存します。

    Args:
        filename: 保存するファイル名 (例: "report.txt")
        content: 保存するテキスト本文
    """
    with open(filename, "w", encoding="utf-8") as f:
        f.write(content)
    return f"ファイル『{filename}』に正常に保存しました。"

async def main():
    # APIキーが正しく設定されているかチェック
    if not os.environ.get("GEMINI_API_KEY"):
        print("エラー: GEMINI_API_KEY が環境変数に設定されていません。")
        sys.exit(1)

    # 1. エージェントの構成(持たせる道具をリストで指定します)
    config = LocalAgentConfig(
        tools=[web_search, save_to_file],
        system_instructions="あなたは優秀なリサーチアシスタントです。指示された調査を行い、必ずファイルに保存してください。"
    )

    # 2. エージェントを起動して指示を出す
    async with Agent(config) as agent:
        prompt = "最新のAIエージェントの動向をネットで調べて、結果を『ai_report.txt』という名前のファイルで保存して。"
        print(f"指示: 「{prompt}」")
        print("エージェントが考えて行動を開始します...\n")

        # AIの回答をリアルタイムで画面に表示
        response = await agent.chat(prompt)
        async for chunk in response:
            print(chunk, end="", flush=True)
        print("\n\n処理が完了しました!")

if __name__ == "__main__":
    asyncio.run(main())

このプログラムで記述している各行の処理内容を、上から順番に詳しく見ていきましょう。

1. 必要なライブラリのインポート

プログラムの冒頭では、動作に必要な部品(ライブラリ)を読み込んでいます。

  • import os / import sys: パソコンのシステム環境変数(APIキーなど)を読み込んだり、エラー時にプログラムを終了(sys.exit)させるための標準機能です。
  • import asyncio: AIエージェントのように、処理の完了を待ちながら並行して別の処理を進める「非同期処理」をPythonで制御するための標準機能です。
  • from google.antigravity import Agent, LocalAgentConfig: 今回の主役である、AIエージェントを動かすための設定クラス(LocalAgentConfig)と本体クラス(Agent)を読み込んでいます。
  • from dotenv import load_dotenv: プログラムと同じフォルダにある .env ファイルに書き込まれた内容を、環境変数としてPythonプログラム内に自動で読み込むためのライブラリです。try/except で囲んでいるのは、万が一このライブラリがインストールされていなくてもプログラム全体がクラッシュして停止しないようにするための安全対策です。

2. 道具(関数)の作成とAIへの取扱説明書

AIに使わせるための2つの道具を通常のPython関数(def)で作っています。ここがAntigravity SDKの最も特徴的な部分です。

例えば、web_search 関数の以下の部分を見てみましょう。

def web_search(query: str) -> str:
    """指定されたキーワードでインターネットを検索し、最新情報を取得します。

    Args:
        query: 検索キーワード (例: "AIエージェント")
    """

なぜこの """...""" で囲まれた説明文(Docstring)を記述するのでしょうか?通常、これらは開発者向けのメモですが、Antigravity SDKにおいては「AI(Gemini)がこの道具の役割を理解するための取扱説明書」としてそのままAIへ送信されます。

AIはこの説明文を読み、「この道具は検索のためのものだ」「引数には検索キーワードを入れるのだな」と判断します。また、query: str(引数)や -> str(戻り値)といった型ヒントも、AIが「どのような形式で値を入力し、どんな形式でデータが返ってくるか」を理解するための必須のルールとなります。

3. メインの処理とAPIキーの確認

実際の実行の起点となる main 関数です。os.environ.get("GEMINI_API_KEY") を使って、安全対策用のAPIキーが正しく設定されているかを確認し、無ければエラーを表示してプログラムを終了させます。

4. エージェントの構成とキャラクター付け

LocalAgentConfig を作成し、AIエージェントの各種設定を決定します。

  • tools=[web_search, save_to_file]: 先ほど定義した2つの道具をリスト形式で渡すことで、AIがこれらを自由に使用できるようになります。
  • system_instructions="...": AIエージェントに「あなたは優秀なリサーチアシスタントです」などの役割(システム指示)を与え、振る舞いをコントロールします。

5. エージェントの起動と自律実行

async with Agent(config) as agent: を使ってエージェントの接続を確立し、初期化します。そして、response = await agent.chat(prompt) でユーザーからの大まかな指示(プロンプト)を送信します。AIは指示を満たすためにどの道具が必要かを自律的に考えて実行し、結果をリアルタイムで出力(ストリーミング)します。

6. プログラムの実行トリガー

if __name__ == "__main__": はPythonの標準的な記述で、このファイルが直接実行された場合に asyncio.run(main()) を呼び出して非同期イベントループを開始するためのトリガー(起動スイッチ)となっています。

プログラムを実際に動かす手順

手元のパソコンでこのプログラムを動かすには、以下のステップで行います。

ステップ1:APIキーの設定
プログラムと同じフォルダに .env という名前のテキストファイルを作成し、以下の内容を記述して保存します。

GEMINI_API_KEY="あなたの実際のGemini APIキー"

ステップ2:プログラムの保存
上記のPythonプログラムコードを test_sdk2.py というファイル名で同じフォルダに保存します。

ステップ3:コマンドの実行
ターミナル(Windowsの場合はPowerShellやコマンドプロンプト)を開き、ファイルがあるフォルダへ移動して、以下のコマンドを実行します。

python3 test_sdk2.py

ステップ4:結果ファイルの確認
プログラムの実行が完了すると、同じフォルダに自動的に ai_report.txt という名前のテキストファイルが作成されます。ファイルを開き、AIエージェントが調べてまとめたテキストデータが正常に保存されているか確認してみましょう!

実際に使ってみて分かったこと

プログラムを動かす中で、注意点が2つありました。

⚠️ 注意点1:関数の「説明文(Docstring)」を適当に書くとバグる

コード内で def web_search... の下に記述している """指定されたキーワードで...""" という解説文(Docstring)があります。通常のプログラミングでは単なるメモ書き(コメント)ですが、Antigravity SDKにおいては「AIに道具の役割を教えるための説明書」として読み取られます。

そのため、ここを白紙にしたり、適当な説明で済ませたりすると、AIが「この道具はいつ使えばいいのか」を理解できず、全く関係のない場面で道具を使おうとしてエラーになるなどのバグを引き起こしてしまいます。人間用のメモではなく、AIに教えるための取扱説明書として、丁寧な日本語で書くのがコツです。

⚠️ 注意点2:引数の「型ヒント」を省略できない

関数の引数にある query: strfilename: str のように、コロンの後にデータ型(文字なら str)を指定する「型ヒント」という書き方があります。Pythonでは普段省略されることも多いですが、エージェントを動かす際は必須レベルの記述です。

これがないと、AIは道具に何を渡せば良いのか(文字なのか、数字なのか)判断できなくなり、エラーの原因になります。

AIが自ら考えて動くステップ

このプログラムを実行すると、AIエージェントの頭脳(Gemini)は裏側で以下のように自律的に判断して仕事を進めていました。

1. 手持ちの道具を確認する
指示された「AIエージェントの動向を調べる」を達成するため、登録された道具をチェックします。➔ 「web_search という道具を使おう!」と判断します。

2. 道具の自動実行
自動的に web_search(query="AIエージェントの動向") を実行し、ネットの検索結果(最新トレンドのテキスト)を受け取ります。

3. 次のステップを考える
検索結果を得たAIは、次に「ファイルに保存する」というゴールを達成するため、どう動くべきか考えます。➔ 「save_to_file という道具を使って、ファイル名を『ai_report.txt』にして結果を書き込もう!」と判断します。

4. 報告を行う
ファイルへの保存が成功したことを確認し、「指示された内容を調べ、ai_report.txtに保存しました」とユーザーへ最終報告を行います。

このように指示を出すだけで、AI自身が「どの順番でどの道具を使うか」を組み立てて完了まで持っていきます。

まとめと次のステップ

今回は、Google Antigravity SDKを使い、道具(ツール)を登録してエージェントに自律的な仕事をさせる方法を調べて試してみました。

道具を追加するのは非常に簡単で、Pythonで新しい関数を書き、それを LocalAgentConfigtools リストに追記するだけです。ぜひ、皆さんも自分専用の便利なアシスタントエージェントを自作してみてください!

コメント

タイトルとURLをコピーしました