GEMINI LABEN
FLASH35 — Gemini 3.5 Flashが一般提供となり、gemini-flash-latestが指す実体になりました。日常的な生成を速く安価にこなせますAGENTS — Gemini APIのManaged Agentsがpublic previewに。Google管理の隔離Linuxサンドボックスで自律的なエージェントを構築できますMEDIA — Nano Banana 2 Lite(画像)とGemini Omni Flash(動画・会話的編集)がAI Studio・API・Enterprise Agent Platformで利用可能にTTS — gemini-3.1-flash-tts-previewの音声生成がstreamGenerateContent経由でストリーミング対応になりましたTRANSLATE — 新しい音声モデルが70以上の言語を自動判別し、話者の自然な抑揚を保ったままライブ音声翻訳を行いますSPENDCAP — AI Studioにプロジェクト単位の費用上限が導入され、支出を安全側に抑えられるようになりましたFLASH35 — Gemini 3.5 Flashが一般提供となり、gemini-flash-latestが指す実体になりました。日常的な生成を速く安価にこなせますAGENTS — Gemini APIのManaged Agentsがpublic previewに。Google管理の隔離Linuxサンドボックスで自律的なエージェントを構築できますMEDIA — Nano Banana 2 Lite(画像)とGemini Omni Flash(動画・会話的編集)がAI Studio・API・Enterprise Agent Platformで利用可能にTTS — gemini-3.1-flash-tts-previewの音声生成がstreamGenerateContent経由でストリーミング対応になりましたTRANSLATE — 新しい音声モデルが70以上の言語を自動判別し、話者の自然な抑揚を保ったままライブ音声翻訳を行いますSPENDCAP — AI Studioにプロジェクト単位の費用上限が導入され、支出を安全側に抑えられるようになりました
記事一覧/API / SDK
API / SDK/2026-06-16上級

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

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

Gemini API182Managed Agents5Interactions API3エージェント14サンドボックス2

プレミアム記事

公開プレビューの 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-07-01
静かに止まる自動処理を防ぐ — Gemini 基盤変更に備える事前検証ゲートの設計
制限なしAPIキーの拒否、CLIのEOL、Interactions APIへの一本化。2026年後半のGemini基盤変更は、動いていた自動処理を無言で止めます。バッチ実行の手前で失敗を検出する事前検証ゲートを、実行可能なコードとともに設計します。
API / SDK2026-06-30
投げて終了する定期実行で、結果を取りこぼさない — Gemini バックグラウンド実行を再取得台帳で回す設計
Interactions API のバックグラウンド実行を cron 駆動の定期実行で安全に回すための設計です。送信前に冪等キーで台帳へ予約し、次のティックで未取得ハンドルだけを再取得する二段コミットを、動くコードで示します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →