GEMINI LABEN
CLI — 本日6/18、Gemini CLIとGemini Code Assist IDE拡張がAI Pro/Ultra・無料個人利用向けにリクエスト提供を終了。後継はAntigravity CLIですFLASH — Gemini 3.5シリーズが始動し3.5 Flashが提供開始。エージェントとコーディング向けにフロンティア級、長時間タスクに強いと説明されていますDEEPTHINK — Gemini 3 Deep ThinkがGoogle AI Ultra向けに展開中。数学・科学・論理・多段推論の最上位モードですAPP — GeminiアプリにDaily Brief、再設計UI、AI動画モデルGemini Omni、個人AIエージェントGemini Sparkが加わりましたDESIGN — 新デザイン言語Neural Expressiveで、よりリッチな視覚出力とモダリティ間の素早い切替に向けて再構築されていますULTRA — Google AI Ultraはモデル最上位アクセス・Deep Research・Veo 3動画生成・100万トークンコンテキストを束ねるプレミアム枠ですCLI — 本日6/18、Gemini CLIとGemini Code Assist IDE拡張がAI Pro/Ultra・無料個人利用向けにリクエスト提供を終了。後継はAntigravity CLIですFLASH — Gemini 3.5シリーズが始動し3.5 Flashが提供開始。エージェントとコーディング向けにフロンティア級、長時間タスクに強いと説明されていますDEEPTHINK — Gemini 3 Deep ThinkがGoogle AI Ultra向けに展開中。数学・科学・論理・多段推論の最上位モードですAPP — GeminiアプリにDaily Brief、再設計UI、AI動画モデルGemini Omni、個人AIエージェントGemini Sparkが加わりましたDESIGN — 新デザイン言語Neural Expressiveで、よりリッチな視覚出力とモダリティ間の素早い切替に向けて再構築されていますULTRA — Google AI Ultraはモデル最上位アクセス・Deep Research・Veo 3動画生成・100万トークンコンテキストを束ねるプレミアム枠です
記事一覧/API / SDK
API / SDK/2026-06-16上級

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

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

Gemini API137Managed AgentsInteractions APIエージェント10サンドボックス

プレミアム記事

公開プレビューの 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-05-30
Gemini 3 の thought signatures を保持してマルチターン function calling を壊さない本番設計
Gemini 3 の思考モデルで function calling を組むと、2 ターン目以降に推論が浅くなる現象に当たります。原因は thought signature の欠落です。署名を保持する本番実装と検証手順をまとめました。
API / SDK2026-04-12
Gemini API Grounding × Structured Output — Web検索結果をJSON構造化データに変換する
Gemini APIのGrounding with Google SearchとStructured Outputを組み合わせ、リアルタイムWeb情報を型安全なJSONデータとして抽出する実装パターンを解説。
API / SDK2026-06-17
生成文の『文体の癖』を数値で見張る — 既定モデルの差し替えを文体ドリフトで検知する設計
既定モデルが頭越しに変わると、出力の正しさはそのままでも文体の癖が静かにズレます。生成文の敬体率や文長分布をフィンガープリント化し、統計的に文体ドリフトを検知してパイプラインを止める設計を、依存ライブラリなしの実装で解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →