Google Gemini托管代理新功能:配置驱动开发与持久化环境管理
如果你正在构建AI代理应用,可能已经体会过传统方案的复杂性:选择框架、定义工具、编写编排代码、打包容器、部署到云服务……整个过程在代理真正执行任务前就需要大量工程投入。但现在,Google为Gemini API的托管代理带来了四项关键功能扩展,彻底改变了这一局面。
这些新功能的核心价值在于: 将代理开发从基础设施管理转变为纯业务逻辑配置 。过去需要数十行代码和复杂部署流程的任务,现在只需几个Markdown配置文件和一次API调用就能完成。更重要的是,这些扩展不是简单的功能叠加,而是构建了一个完整的代理开发生态系统。
本文将深入解析这四项新功能的具体实现方式、适用场景以及与传统方案的对比。无论你是正在评估代理技术选型,还是已经在使用现有框架,这些扩展都将显著降低你的开发门槛和运维成本。
1. 托管代理新功能的核心价值
1.1 从基础设施到业务逻辑的转变
传统代理开发面临的最大挑战不是算法复杂度,而是工程复杂度。以构建一个简单的新闻摘要代理为例,传统方案需要:
# 传统方案:ADK + Cloud Run
from google.adk.agents import LlmAgent
from google.adk.tools import google_search, built_in_code_execution
from google.adk.runners import FastApiRunner
# 定义代理和工具
agent = LlmAgent(
name="digest-agent",
model=MODEL,
instruction=AGENTS_MD,
tools=[google_search, built_in_code_execution],
)
# 部署为HTTP服务
runner = FastApiRunner(agent=agent)
app = runner.app
# 还需要Dockerfile、部署脚本、监控配置等
而新的托管代理方案只需:
# 新方案:纯API调用
from google import genai
client = genai.Client()
stream = client.interactions.create(
agent="antigravity-preview-05-2026",
input="Fetch tech news and generate digest PDF",
stream=True,
environment={
"type": "remote",
"sources": [config_files] # 你的业务逻辑配置
},
)
这种转变的核心在于 责任边界的重新划分 :Google负责所有基础设施(沙盒环境、工具执行、状态管理、扩缩容),开发者只需关注业务逻辑(指令、技能、工作流)。
1.2 四项扩展功能概述
新扩展的四个核心功能构成了完整的代理开发闭环:
- 配置驱动的代理定制 :通过Markdown文件定义代理行为和技能,无需代码变更
- 持久化环境状态管理 :沙盒环境可保持7天活跃状态,支持多轮对话和文件持久化
- 技能库与自动发现 :技能作为可复用组件,支持跨项目共享和自动加载
- 命名代理与配置烘焙 :一次配置,永久生效,后续调用只需代理ID
这四项功能共同解决了代理开发中的四个关键痛点:定制复杂度、状态丢失、代码重复和部署繁琐。
2. 配置驱动的代理定制
2.1 配置文件结构与作用
新功能的核心是配置文件驱动模式。代理的所有行为都通过三个层级的配置文件定义:
.agents/
├── AGENTS.md # 全局指令和角色设定
└── skills/
└── digest-pdf/
├── SKILL.md # 具体技能的工作流程
└── scripts/
└── generate_pdf.py # 技能执行的具体代码
AGENTS.md 定义代理的"人格"和工作原则:
# Tech Digest Agent
## Role
You are a tech news curator that identifies important developments.
## Workflow
1. Scan Hacker News front page
2. Extract top 5 stories with scores and comments
3. Write concise summaries focusing on technical impact
4. Generate formatted PDF report
## Constraints
- Prioritize open source and developer tools
- Avoid marketing fluff and hype
- Keep summaries under 150 words each
SKILL.md 定义具体技能的执行步骤:
# digest-pdf Skill
## Description
Generates a formatted PDF from news summaries
## Steps
1. Read summaries.json from workspace
2. Format content with headers and bullet points
3. Apply consistent styling
4. Save as digest.pdf
2.2 配置加载机制
配置文件通过environment参数的sources字段注入:
environment={
"type": "remote",
"sources": [
{
"type": "inline",
"target": ".agents/AGENTS.md",
"content": AGENTS_MD,
},
{
"type": "inline",
"target": ".agents/skills/digest-pdf/SKILL.md",
"content": SKILL_MD,
}
]
}
这种机制的优势在于:
- 版本控制友好 :配置文件可与代码库一起管理
- 热更新支持 :修改配置无需重新部署代理
- 环境隔离 :不同环境可使用不同配置版本
2.3 与传统配置方式的对比
| 方面 | 传统方式 | 新配置驱动方式 |
|---|---|---|
| 修改代理行为 | 需要代码变更+重新部署 | 修改Markdown文件+重新调用 |
| 版本管理 | 代码版本与配置混合 | 纯文本配置,diff清晰 |
| 环境差异 | 需要条件代码或多个部署 | 不同环境加载不同配置文件 |
| 学习曲线 | 需要理解框架API | 只需编写Markdown说明 |
3. 持久化环境状态管理
3.1 环境生命周期模型
新功能引入了明确的环境生命周期管理:
# 首次调用创建新环境
stream1 = client.interactions.create(
agent=BASE_AGENT,
input="Initial task",
environment="remote", # 创建新沙盒
stream=True
)
# 获取环境ID用于后续调用
environment_id = get_environment_id_from_stream(stream1)
# 后续调用复用同一环境
stream2 = client.interactions.create(
agent=BASE_AGENT,
input="Follow-up task",
environment=environment_id, # 复用现有沙盒
stream=True
)
环境的关键特性:
- 7天活跃期 :最后一次交互后保持7天可用
- 完整文件系统 :包含所有安装的包和生成的文件
- 计算资源隔离 :4CPU/16GB RAM专用资源
- 自动清理 :非活跃期后自动回收资源
3.2 多轮对话支持
对话状态的保持通过两个ID实现:
# 第一轮交互
stream1 = client.interactions.create(
agent=BASE_AGENT,
input="Fetch Hacker News headlines",
environment=environment_id,
stream=True
)
interaction_id1 = get_interaction_id_from_stream(stream1)
# 第二轮交互(保持对话上下文)
stream2 = client.interactions.create(
agent=BASE_AGENT,
input="Now summarize the most technical story",
environment=environment_id,
previous_interaction_id=interaction_id1, # 关键参数
stream=True
)
这种设计解决了代理应用中的关键问题: 任务执行的连续性和上下文保持 。
3.3 实际应用场景
场景一:迭代优化输出
# 第一轮:生成初版摘要
input1 = "Generate tech news digest"
# 第二轮:基于初版进行优化
input2 = "Make the summaries more concise and add technical depth ratings"
# 第三轮:格式调整
input3 = "Convert to PDF with better formatting"
场景二:复杂任务分解
# 任务1:数据收集
input1 = "Scrape latest AI research papers"
# 任务2:数据分析(复用任务1的结果)
input2 = "Analyze trends in the collected papers"
# 任务3:报告生成(基于前两步)
input3 = "Generate research trend report"
4. 技能库与自动发现机制
4.1 技能作为一等公民
技能(Skills)在新架构中不再是附属功能,而是核心组件。每个技能包含:
# 技能元数据(自动发现部分)
- Name: digest-pdf
- Description: Generates PDF reports from structured data
- Version: 1.0
- Input: summaries.json
- Output: digest.pdf
# 技能实现(按需加载部分)
## Steps
1. Validate input JSON structure
2. Apply report template
3. Generate PDF with reportlab
4. Save to workspace
4.2 自动发现与按需加载
技能系统采用"渐进式披露"设计:
# 代理启动时只加载技能元数据
# 当代理决定使用某个技能时,才加载完整实现
# 技能触发流程:
1. 代理分析任务需求
2. 匹配可用技能元数据
3. 按需加载完整SKILL.md
4. 执行技能中定义的步骤
这种设计显著减少了初始上下文长度,提高了代理的响应速度。
4.3 技能开发最佳实践
技能设计原则:
- 单一职责:每个技能只做一件事
- 明确接口:定义清晰的输入输出格式
- 错误处理:包含完整的验证和异常处理
- 文档完整:提供使用示例和限制说明
示例技能结构:
skills/
├── web-scraper/
│ ├── SKILL.md
│ └── scripts/
│ └── scrape.py
├── data-analyzer/
│ ├── SKILL.md
│ └── scripts/
│ └── analyze.py
└── report-generator/
├── SKILL.md
└── scripts/
└── generate_report.py
5. 命名代理与配置烘焙
5.1 从临时配置到持久化代理
新功能最重要的改进之一是命名代理支持:
# 创建持久化命名代理
agent = client.agents.create(
id="tech-digest-agent", # 唯一标识符
base_agent=BASE_AGENT,
description="Daily tech news digest with PDF generation",
base_environment={
"type": "remote",
"sources": [all_config_files] # 烘焙所有配置
}
)
# 后续调用只需代理ID
stream = client.interactions.create(
agent="tech-digest-agent", # 使用命名代理
input="",
environment="remote",
stream=True
)
5.2 配置烘焙的优势
简化调用流程:
- 无需每次传递配置文件内容
- 调用代码更加简洁
- 减少网络传输数据量
版本控制与治理:
- 代理配置集中管理
- 变更控制和安全审计
- 环境间的一致性保证
5.3 代理生命周期管理
完整的代理管理API:
# 创建代理
agent = client.agents.create(...)
# 列出所有代理
agents = client.agents.list()
# 获取代理详情
agent_details = client.agents.get("tech-digest-agent")
# 更新代理配置
updated_agent = client.agents.update("tech-digest-agent", ...)
# 删除代理
client.agents.delete("tech-digest-agent")
6. 完整实战示例:技术摘要代理
6.1 环境准备与依赖安装
# 克隆示例项目
git clone https://github.com/Saoussen-CH/tech-digest-managed-agent.git
cd tech-digest-managed-agent
# 安装依赖管理工具uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# 配置API密钥
cp .env.example .env
# 编辑.env文件设置GEMINI_API_KEY
# 安装依赖
uv sync
6.2 核心代码实现
run_digest.py - 主执行逻辑:
from google import genai
import os
from dotenv import load_dotenv
load_dotenv()
def run_digest():
client = genai.Client()
# 加载配置文件
AGENTS_MD = load_source(".agents/AGENTS.md")
SKILL_MD = load_source(".agents/skills/digest-pdf/SKILL.md")
GENERATE_PDF_PY = load_source(".agents/skills/digest-pdf/scripts/generate_pdf.py")
stream = client.interactions.create(
agent="antigravity-preview-05-2026",
input="", # AGENTS.md中已定义完整工作流
stream=True,
environment={
"type": "remote",
"sources": [
{
"type": "inline",
"target": ".agents/AGENTS.md",
"content": AGENTS_MD,
},
{
"type": "inline",
"target": ".agents/skills/digest-pdf/SKILL.md",
"content": SKILL_MD,
},
{
"type": "inline",
"target": ".agents/skills/digest-pdf/scripts/generate_pdf.py",
"content": GENERATE_PDF_PY,
},
],
},
)
# 处理流式响应
environment_id, interaction_id = run_stream(stream)
# 保存ID用于后续操作
set_key(".env", "ENVIRONMENT_ID", environment_id)
set_key(".env", "INTERACTION_ID", interaction_id)
print(f"Digest completed. Environment: {environment_id}")
if __name__ == "__main__":
run_digest()
6.3 结果下载与验证
download_pdf.py - PDF下载逻辑:
import requests
import tarfile
import tempfile
import os
from dotenv import load_dotenv
load_dotenv()
def download_pdf():
environment_id = os.getenv("ENVIRONMENT_ID")
api_key = os.getenv("GEMINI_API_KEY")
# 下载环境快照
r = requests.get(
f"https://generativelanguage.googleapis.com/v1beta/files/environment-{environment_id}:download",
params={"alt": "media"},
headers={"x-goog-api-key": api_key},
allow_redirects=True,
)
r.raise_for_status()
# 提取PDF文件
with tempfile.NamedTemporaryFile() as tmp:
tmp.write(r.content)
tmp.flush()
with tarfile.open(tmp.name, "r") as tar:
# 查找PDF文件
member = next(m for m in tar.getmembers() if m.name.endswith("workspace/digest.pdf"))
tar.extract(member, path=".", filter="data")
print("PDF downloaded successfully")
if __name__ == "__main__":
download_pdf()
6.4 运行验证
# 运行摘要生成
uv run python run_digest.py
# 下载生成的PDF
uv run python download_pdf.py
# 查看结果
open digest.pdf
7. 与传统方案的详细对比
7.1 基础设施需求对比
| 能力 | ADK + Cloud Run方案 | 托管代理新方案 |
|---|---|---|
| 沙盒配置 | Dockerfile + 自定义镜像 | 自动提供Ubuntu沙盒 |
| 工具定义 | Python代码注册 | 内置工具+技能配置 |
| 包管理 | Dockerfile中pip install | 沙盒内动态安装 |
| 流式传输 | 自定义SSE基础设施 | stream=True参数 |
| 会话管理 | 数据库+上下文注入 | environment_id + interaction_id |
| 部署流程 | CI/CD流水线 | 无需部署 |
7.2 开发体验对比
传统方案开发流程:
- 编写代理逻辑代码
- 定义工具函数
- 配置Dockerfile
- 设置Cloud Run部署
- 测试部署结果
- 迭代优化
新方案开发流程:
- 编写配置文件
- 调用API测试
- 迭代优化配置
- (可选)保存为命名代理
7.3 成本对比分析
传统方案成本构成:
- Cloud Run实例费用
- 容器镜像存储费用
- 网络出口费用
- 开发维护时间成本
新方案成本构成:
- API调用token费用
- 环境计算资源(预览期免费)
- 显著降低的开发时间成本
8. 最佳实践与注意事项
8.1 配置管理最佳实践
文件组织规范:
.agents/
├── AGENTS.md # 主配置文件
├── skills/
│ ├── common/ # 通用技能
│ │ ├── SKILL.md
│ │ └── scripts/
│ └── project-specific/ # 项目特定技能
│ ├── SKILL.md
│ └── scripts/
└── templates/ # 配置模板
├── basic-agent.md
└── advanced-skills.md
配置版本控制策略:
- 配置文件与代码同步版本化
- 使用语义化版本命名代理
- 维护配置变更日志
8.2 性能优化建议
上下文长度优化:
- 保持AGENTS.md简洁明了
- 使用技能目录代替详细描述
- 按需加载技能详细内容
调用模式优化:
- 批量处理相关任务,减少环境创建
- 合理设置stream参数平衡实时性和性能
- 使用命名代理避免配置重复传输
8.3 安全注意事项
权限最小化原则:
- 代理只拥有执行任务所需的最小权限
- 敏感配置通过环境变量管理
- 定期审查代理行为和输出
数据安全保护:
- 避免在配置中硬编码敏感信息
- 使用沙盒隔离保护本地系统
- 实施输出内容审核机制
9. 常见问题与解决方案
9.1 环境管理问题
问题:环境ID丢失或失效
- 症状:无法恢复之前的环境状态
- 原因:环境超过7天非活跃期被清理
- 解决方案:实现环境ID的持久化存储和定期刷新
问题:环境状态不一致
- 症状:同一环境不同调用结果异常
- 原因:并发访问或状态污染
- 解决方案:确保环境单线程使用或实现状态隔离
9.2 配置相关问题
问题:技能未正确加载
- 症状:代理无法识别或执行特定技能
- 原因:文件路径错误或格式不正确
- 解决方案:验证技能元数据和文件路径配置
问题:代理行为不符合预期
- 症状:输出结果与配置指令不一致
- 原因:指令冲突或上下文过长
- 解决方案:简化指令结构,使用技能分解复杂任务
9.3 性能与成本问题
问题:API调用成本过高
- 症状:简单任务消耗大量token
- 原因:上下文过长或指令不精确
- 解决方案:优化配置结构,使用更精确的指令
问题:响应时间过长
- 症状:代理执行简单任务需要较长时间
- 原因:工具调用链过长或网络延迟
- 解决方案:优化任务分解,减少不必要的工具调用
10. 未来发展方向与应用场景
10.1 技术演进趋势
基于当前的功能扩展,可以预见以下发展方向:
生态系统完善:
- 官方技能市场或仓库
- 第三方技能开发和分发机制
- 企业级代理管理和监控工具
能力增强:
- 更丰富的内置工具集
- 多模态处理能力扩展
- 实时协作和共享环境支持
10.2 典型应用场景
技术内容聚合:
- 每日技术新闻摘要
- 开源项目更新跟踪
- 学术论文趋势分析
开发辅助工具:
- 代码审查助手
- 文档生成和维护
- 自动化测试报告
业务自动化:
- 数据分析和报告生成
- 客户支持自动化
- 内部流程优化
这四项新功能扩展标志着AI代理开发进入了一个新阶段:从技术探索转向规模化应用。对于开发者而言,现在正是深入学习和实践的最佳时机,这些能力将为你的项目带来显著的效率提升和成本优化。
建议从简单的用例开始实践,逐步掌握配置驱动开发和状态管理的核心模式,为构建更复杂的代理应用打下坚实基础。
更多推荐

所有评论(0)