GEMINI LABEN
HOOKS — Managed Agents に environment hooks が入りました。ツール呼び出しの前後でサンドボックス内のスクリプトを走らせ、検証・記録・外部パイプラインの起動を境界で挟めますDEFAULT — antigravity-preview-05-2026 の既定モデルが Gemini 3.6 Flash になりました。コード変更は不要で、次の対話から自動的に切り替わりますBUDGET — Managed Agents にトークン予算・明示的なモデル選択・スケジュール実行・無料枠が加わり、サンドボックス環境を直接扱う API も公開されましたBG — 7月7日の更新で長時間のバックグラウンドタスクとリモート MCP サーバー連携が入っており、今回の hooks はその土台の上に積まれていますSUNSET — 旧来の画像生成モデルは8月17日、gemini-robotics-er-1.6-preview は8月31日に停止します。移行先の確認は早めが安全ですSAMPLING — temperature・top_p・top_k が非推奨になりました。あわせて gemini-3.1-flash-tts-preview で音声生成のストリーミングが使えるようになっていますHOOKS — Managed Agents に environment hooks が入りました。ツール呼び出しの前後でサンドボックス内のスクリプトを走らせ、検証・記録・外部パイプラインの起動を境界で挟めますDEFAULT — antigravity-preview-05-2026 の既定モデルが Gemini 3.6 Flash になりました。コード変更は不要で、次の対話から自動的に切り替わりますBUDGET — Managed Agents にトークン予算・明示的なモデル選択・スケジュール実行・無料枠が加わり、サンドボックス環境を直接扱う API も公開されましたBG — 7月7日の更新で長時間のバックグラウンドタスクとリモート MCP サーバー連携が入っており、今回の hooks はその土台の上に積まれていますSUNSET — 旧来の画像生成モデルは8月17日、gemini-robotics-er-1.6-preview は8月31日に停止します。移行先の確認は早めが安全ですSAMPLING — temperature・top_p・top_k が非推奨になりました。あわせて gemini-3.1-flash-tts-preview で音声生成のストリーミングが使えるようになっています
記事一覧/API / SDK
API / SDK/2026-06-16上級

Gemini Managed Agents を自動化に組み込む ― 会話状態と環境状態を分けて扱う実装メモ

Managed Agents は1回の API 呼び出しで Linux サンドボックスを立て、エージェントを走らせて結果を返します。自前ループから移すとき最初につまずく「会話状態と環境状態は別物」という設計を、実際に動かしながら整理しました。

Gemini API200Managed Agents8Interactions API4エージェント15サンドボックス3

プレミアム記事

公開プレビューの Managed Agents をはじめて自分の自動化に差し込んだとき、最初の30分でいちばん混乱したのは、エラーでもコスト見積もりでもなく「状態がどこに残るのか」でした。client.interactions.create(...) を一度叩くだけで、Google 側に Linux サンドボックスが立ち、Gemini 3.5 Flash がその中でコードを書いて実行し、結果のテキストが返ってきます。ここまでは拍子抜けするほど簡単です。問題は2回目の呼び出しでした。「さっきの続き」をやってもらおうとして、私は会話の履歴とサンドボックスのファイルを同じものだと思い込み、片方だけ引き継いで小一時間ハマりました。

このメモは、その勘違いを正面から扱います。自前でエージェントループを書いてきた人ほど、ここで一度つまずくはずだからです。題材は、私自身が個人開発で回している記事整形の補助タスク(テキストを受け取って整形し、図を1枚作って書き出す)です。

1回の呼び出しで何が起きているのか

まずは最小の1回を動かします。グラウンディングのためにも、自分の手で叩いてレスポンスの形を見ておくのが確実です。

# pip install google-genai
from google import genai
 
client = genai.Client()  # GEMINI_API_KEY を環境変数で読む
 
interaction = client.interactions.create(
    agent="antigravity-preview-05-2026",   # 既定の汎用 Managed Agent
    input="最初の20個のフィボナッチ数を生成し fibonacci.txt に保存。"
          "そのファイルを読み戻して中身を表示してください。",
    environment="remote",                  # 新しいサンドボックスを毎回プロビジョニング
)
 
print("interaction.id      =", interaction.id)
print("environment_id      =", interaction.environment_id)
print("output_text         =", interaction.output_text)
print("steps               =", len(interaction.steps))  # 推論・ツール呼び出し・コード実行の足跡

この create 1回が、サンドボックスのプロビジョニング・エージェントループの実行・結果の返却までをまとめて行います。返ってくる Interaction オブジェクトで、私が運用上いつも見るのは次の3つです。output_text が最終的な回答、steps がエージェントが踏んだ各ステップ(reasoning・tool call・code execution)の配列、そして environment_id が「いま使ったサンドボックスの識別子」です。最後のひとつが、続きをやる鍵になります。

手元の整形タスクでは、steps の長さはおおむね6〜11でした。短い指示でも、計画→コード生成→実行→ファイル確認、と複数ステップを踏むので、output_text だけ見て満足せず steps を覗いておくと、エージェントが何をどう解いたかが追えます。

つまずきの正体 ― 状態は2軸ある

Managed Agents は、状態を2つの独立した次元で管理します。ここを一本だと思い込むのが、自前ループ出身者の典型的な落とし穴です。

ひとつは会話コンテキストです。チャット履歴・推論トレース・ツール使用の流れで、previous_interaction_id に直前の interaction.id を渡すと引き継がれます。

もうひとつは環境状態です。サンドボックス内のファイル・インストール済みパッケージ・作業ディレクトリの中身で、environment に前回の environment_id を渡すと引き継がれます。

この2つは、混ぜずに別々に渡します。

interaction_2 = client.interactions.create(
    agent="antigravity-preview-05-2026",
    previous_interaction_id=interaction.id,          # 会話を継ぐ
    environment=interaction.environment_id,          # ファイルも継ぐ
    input="さっきの数列を折れ線グラフにして chart.png として保存してください。",
)
print(interaction_2.output_text)

ここで fibonacci.txt は2回目でも残っていますし、エージェントは「さっきの数列」という指示語の意味も覚えています。私が最初にやった失敗は、previous_interaction_id だけ渡して environment="remote"(=新しい箱)にしてしまったことでした。会話は続くのにファイルが消えているので、エージェントは「さっきのファイルが見当たりません」と正直に返してきます。状態が2軸だと腹落ちすれば、当たり前の挙動です。

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

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
previous_interaction_id(会話)と environment(ファイル)は独立した2軸であることを、4通りの組み合わせで使い分ける具体例
自前のエージェントループから Managed Agents へ寄せる before/after のコードと、消えたボイラープレートの内訳
サンドボックスの7日 TTL・135k トークン自動圧縮・ファイル取り出しまで、運用で引っかかる点の実測メモ
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

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

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

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

関連記事

API / SDK2026-07-04
Managed Agents を並列で回すと同じリポジトリを奪い合う ― 隔離サンドボックスに効く外部リースとフェンシング
Managed Agents は実行ごとに隔離サンドボックスが立つため、複数実行が同じリポジトリやレコードに同時に触れてもローカルロックが効きません。外部リースとフェンシングトークンで単一実行を保証する実装をまとめました。
API / SDK2026-08-02
environment hooks に置いた門番の実測 — 判定は46マイクロ秒、起動は23ミリ秒
Managed Agents の environment hooks に破壊的コマンドのガードを置くまでの記録です。正規表現の denylist が20件中9件を素通りさせた実測から、argv 分解による検出率100パーセントまでの3段階と、判定より500倍重い起動コストの内訳をまとめました。
API / SDK2026-07-29
出力トークンが17%減ると聞いて、総額はいくら下がるのかを分解した
出力単価16.67%減と出力トークン17%減。二つの数字を足しても総額の下がり方は出ません。単価・数量・交差項への厳密分解と、エージェントループで削減率がむしろ下がった実行結果をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →