一个在终端关掉就「死掉」的 Agent,称不上生产级 Agent。Google 于 2026-07-07 通过 Interactions API 大幅扩展了 Gemini Managed Agents(自 6 月 GA),把「运行时」直接托管给 Google:隔离 Linux 沙箱、后台执行、远程 MCP、凭据刷新,一次 client.interactions.create() 调用全搞定。本教程面向想从原型走向可靠 Agent 的开发者,用 google-genai SDK 一步步跑通「云端后台长任务」。
先搞懂:Managed Agents 把什么从你肩上卸下了?
在 Interactions API 之前,做一个自主 Agent 意味着自己拼一套运行时:工具调用循环、代码执行沙箱、会话状态管理、异步任务队列、可观测层。每个团队都在重造轮子。Managed Agents 把运行时交给 Google,你只管「做什么」:
| 自己搭运行时(旧) | Managed Agents(新) |
|---|---|
| 手写 tool-use 循环 | 一个 API 调用跑完 推理→工具→观察 循环 |
| 自建沙箱 / 容器 | 每次调用自动开隔离 Linux 沙箱 |
| 自己管异步队列 | background=true 后台跑,不阻塞客户端 |
| 自己接 MCP | tools 里声明 mcp_server 即可复用 |
默认 Agent 是 Antigravity(antigravity-preview-05-2026),由 Gemini 3.5 Flash 驱动的托管沙箱。本教程所有示例都用这个默认 Agent,无需自己部署模型。
Step 1:准备 Python 3.10+ 与 google-genai SDK
# google-genai 要求 Python 3.10 起
python3 --version # 需显示 3.10 / 3.11 / 3.12
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade google-genai requests
# 在 Google AI Studio 创建 Key 并导出(切勿提交到代码库)
export GEMINI_API_KEY="your-api-key"
Step 2:第一次交互——在远端沙箱里跑任务
下面这段同步调用会在远端开一个全新沙箱,让 Agent 写脚本、存文件、打印结果:
from google import genai
client = genai.Client() # 自动读取 GEMINI_API_KEY
interaction = client.interactions.create(
agent="antigravity-preview-05-2026",
input=(
"写一段 Python 生成前 20 个斐波那契数,"
"存到 fibonacci.txt,然后打印文件内容。"
),
environment="remote",
)
print(f"Interaction ID: {interaction.id}")
print(f"Environment ID: {interaction.environment_id}")
print(f"Status: {interaction.status}")
print(f"Output:\n{interaction.output_text}")
interaction.id(对话上下文)和 environment_id(沙箱状态:文件、已装依赖),多轮对话和断点续跑都靠它们。Step 3:多轮——对话上下文与沙箱状态分开管
API 把两种状态拆开:对话历史靠 previous_interaction_id,沙箱文件靠 environment_id。这样第一轮生成的文件,第二轮还能继续用:
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)
长会话会「上下文腐烂」?Managed Agents 有自动压缩(约 135k token 触发),不用担心超长对话丢失。要拿回 Agent 产出的文件,用 Files API 下载沙箱快照(tar 包)。
Step 4:后台执行——长任务不阻塞客户端
克隆仓库、跑测试、生成报告可能要好几分钟。同步模式会卡住你的进程、还可能 HTTP 超时。解决:开后台。
interaction = client.interactions.create(
agent="antigravity-preview-05-2026",
input="克隆我的仓库,跑全套测试,写一份测试报告。",
environment="remote",
background=True, # 立即返回,不阻塞
store=True, # 保留沙箱状态,可后续取回
)
print(interaction.id, interaction.status) # 状态可能是 running
# 之后用 interaction.id 轮询 / 取结果,关掉终端任务也还在跑
Step 5:接远程 MCP——复用你已有的工具服务器
如果你已经部署了 MCP 工具服务器,Agent 可以直接连,不用为每个集成重写一遍:
interaction = client.interactions.create(
agent="antigravity-preview-05-2026",
input="用我们的内部 MCP 查本月销售额,生成图表。",
environment="remote",
tools=[{
"type": "mcp_server",
"mcp_server": {
"name": "internal-sales",
"url": "https://mcp.internal.example.com/sse",
},
}],
)
Step 6:自定义函数与凭据刷新
遇到 Google 沙箱里执行不了的内部 API,可以声明自定义函数并标记为 requires_action,由你的服务补执行;令牌过期也不必冷重启沙箱,用 environment_id 刷新凭据:
# 自定义函数:沙箱无法直连时,转交你的后端
tools=[{
"type": "function",
"function": {
"name": "charge_card",
"status": "requires_action", # 交给外部执行
},
}]
# 凭据刷新:同一 environment_id 下换新 token,沙箱状态不丢
client.environments.update(
environment_id=interaction.environment_id,
credentials={"api_key": refreshed_token},
)
涉及扣款 / 写操作的函数务必走 requires_action + 人工审批,别让沙箱里的 Agent 自行完成敏感动作。这与本中心《Agent 安全体检》教程的「允许动作最小化」原则一致。
Step 7:真实场景——云端后台持续干活的 Agent
把后台执行 + 远程 MCP + 凭据刷新组合起来,就是一个「下班后还在跑」的研究 / 运维 Agent:
# 场景:每天凌晨拉数据→分析→出报告→存云盘
1. 定时触发 client.interactions.create(background=True, store=True)
2. tools 声明内部 MCP(只读数据库)
3. input: "汇总昨日指标,生成 report.md 和 chart.png"
4. 用 Files API 取回产物,传到云盘 / 发 Slack
5. 令牌临近过期前用 environment_id 刷新,任务不中断
常见问题速查
| 现象 | 原因 & 解决 |
|---|---|
| SDK 报 Python 版本低 | 升级到 3.10+ 再建 venv |
| 后台任务卡 running | 长任务正常,用 id 轮询,别反复新建 |
| 沙箱文件取不到 | 确认 store=True,再用 Files API 下快照 |
| 远程 MCP 连不上 | 检查 URL 可达性与鉴权,别暴露内网端口 |