ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Agno 集成 Google Gemini Agents API(Antigravity):外部托管 Agent 与工具化沙箱实战指南

Agno 集成 Google Gemini Agents API(Antigravity):外部托管 Agent 与工具化沙箱实战指南 Agno 集成 Google Gemini Agents APIAntigravity外部托管 Agent 与工具化沙箱实战指南【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agnoAntigravityGemini Agents API是 Google 提供的托管式 Agent 循环服务一次 REST 调用即可拉起一个内置网页搜索、代码执行与文件 I/O 的沙箱 Linux 环境由服务端自主运行循环以完成任务并通过environment_id跨轮次保留环境状态。本文基于 cookbook/frameworks/antigravity 文档及其配套示例系统讲解 Agno 与 Antigravity 的两种集成方式——将 Antigravity 作为外部托管 AgentAntigravityAgent接入 AgentOS或将其作为工具包AntigravityTools交由普通 Agno Agent 委派子任务。读完本文你将掌握沙箱会话持久化、环境预置、自定义 Agent 注册、Agent 目录装载与快照下载等完整的实战方案。Antigravity 与 Agno 的集成模型Antigravity 是一种托管 Agent 循环客户端只需发送一个 REST 请求服务端便会在沙箱化 Linux 环境中完成网页搜索、代码执行和文件读写运行自主循环满足请求并将结果返回或流式推送。环境通过environment_id跨轮次持久化因此多轮对话可以共享沙箱内的文件与已安装依赖。Agno 提供两条集成路径选择标准取决于由谁驱动循环集成方式适用场景参考示例AntigravityAgent外部 Agent希望 Antigravity本身成为Agent通过 AgentOS 对外服务由 Agno 负责会话、流式输出与 UIantigravity_basic.py、antigravity_session_agentos.py本目录AntigravityTools工具包希望一个常规 Agno Agent任意模型将子任务委派给 Antigravity 沙箱作为一次工具调用cookbook/91_tools/antigravity/antigravity_tools.py从源码实现看AntigravityAgent继承自BaseExternalAgent位于 libs/agno/agno/agents/antigravity/agent.py本质是 Gemini Agents API 的适配器它封装了POST /interactions与 SSE 流式事件将 Antigravity 的文本增量、工具调用、思考流翻译为 Agno 的RunContentEvent、ToolCallStartedEvent、ToolCallCompletedEvent事件从而无缝接入 Agno 的run()/print_response()与 AgentOS 端点。环境准备两种集成方式都依赖 Gemini API Key且需要已加入 Agents API EAP抢先体验计划。设置环境变量export GEMINI_API_KEY...AntigravityAgent构造时若不传api_key会自动回退读取GEMINI_API_KEY环境变量两者均缺失时抛出ValueError见 agent.py 中的 _resolved_api_key。最小独立运行AntigravityAgent 基础用法antigravity_basic.py 展示了最精简的用法from agno.agents.antigravity import AntigravityAgent agent AntigravityAgent(nameAntigravity) agent.print_response( What is 2 2? Explain your reasoning briefly., streamTrue, )运行方式.venvs/demo/bin/python cookbook/frameworks/antigravity/antigravity_basic.pyAntigravityAgent关键构造参数源码 agent.pynameAgent 显示名称base_urlAPI 基地址默认https://generativelanguage.googleapis.com/v1betaagent基础 Agent 名称默认antigravity-preview-05-2026也可指向已注册的自定义 Agent idsources环境预置源列表gcs/repository/inline三种类型在会话首轮初始化沙箱timeout单请求超时默认 600 秒api_key显式传入密钥缺省回退环境变量。默认不配置数据库时每次运行都会新起一轮沙箱环境不跨轮保留若需跨轮复用沙箱状态则需要会话持久化。多轮会话与沙箱状态复用antigravity_session.py 演示了关键能力同一session_id内复用同一 Antigravity 环境沙箱状态、文件、已安装包并将聊天历史持久化到本地 SQLite对话可随时恢复。from agno.agents.antigravity import AntigravityAgent from agno.db.sqlite import SqliteDb db SqliteDb(db_filetmp/antigravity.db) agent AntigravityAgent( nameAntigravity Chat, dbdb, ) SESSION_ID antigravity-demo-1 # Turn 1 — provision the sandbox and run something agent.print_response( Write a file called notes.txt containing the string hello agno., streamTrue, session_idSESSION_ID, ) # Turn 2 — same session: the env_id is reused, so notes.txt is still there agent.print_response( Read notes.txt back and tell me what it contains., streamTrue, session_idSESSION_ID, ) print(f\n--- Session {SESSION_ID} persisted to tmp/antigravity.db ---)第一轮写入notes.txt第二轮同会话直接读取——这验证了沙箱环境在轮次之间被复用。其底层机制是适配器把environment_id与previous_interaction_id缓存进会话的session_data对应_ENV_KEY antigravity_env_id与_PREV_KEY antigravity_previous_interaction_id两个键后续请求体通过environment字段直接携带缓存的 env id 复用沙箱并通过previous_interaction_id串联交互历史见 agent.py 的 _read_session_env / _write_session_env / _build_request_body。这种按 session_id 缓存的设计使状态落在持久化会话上而非实例属性上线程安全且重启不丢失。环境预置sources 三种类型antigravity_sources.py 演示在沙箱初始化时预置文件使 Agent 能立即读取/操作这些文件from agno.agents.antigravity import AntigravityAgent agent AntigravityAgent( nameAntigravity with Sources, sources[ # Inline content: small files dropped straight into the sandbox { type: inline, content: agno is an open-source agent framework, target: /workspace/about.txt, }, # Repository: clone a Git repo into a target path # {type: repository, source: github://agno-agi/agno, target: /workspace/agno}, # GCS: pull a folder from a public GCS bucket # {type: gcs, source: gs://my-bucket/data/, target: /workspace/data}, ], ) agent.print_response( List the files under /workspace and show the contents of about.txt., streamTrue, )三种 source 类型type作用关键字段inline将小段文本直接写入沙箱目标路径content文件内容、target如/workspace/about.txtrepository将 Git 仓库克隆到目标路径source如github://agno-agi/agno、targetgcs从公共 GCS 桶拉取目录source如gs://my-bucket/data/、target从源码看sources 只在会话首轮随请求发送_environment_field在无缓存 env id 且设置了 sources 时返回{type: remote, sources: self.sources}否则复用缓存 env id 或返回remote见 agent.py 的 _environment_field。另外需要注意当使用自定义 Agentcustom_agent_name时sources 归属于 Agent 定义通过POST /agents发送不会再出现在/interactions请求体中。自定义 Agent 注册与调用antigravity_custom_agent.py 演示 Agents API 的完整流程不依赖临时指令运行基础antigravityAgent而是先注册一个具名 Agent 定义再按名称调用。这在需要稳定、可复用、可调度/共享/版本化的 Agent 身份时非常有用——指令与 sources 随 Agent 定义保存而非跟随每次调用。from agno.agents.antigravity import AntigravityAgent agent AntigravityAgent( nameHaiku Bot, custom_agent_nameagno-haiku-bot, custom_agent_instructions( You are a haiku-writing assistant. Always respond with exactly one haiku (three lines, 5-7-5 syllable structure) and nothing else. ), custom_agent_descriptionDemo custom Antigravity agent that only writes haikus., ) # Register the definition with the API. Idempotent — safe to re-run. agent.ensure_custom_agent() # Invoke the registered agent. agent.print_response(Write a haiku about Python., streamTrue) agent.print_response(Now one about the ocean., streamTrue)注册动作是显式的首次运行前调用一次agent.ensure_custom_agent()内部执行POST /v1beta/agents并把409已存在视为成功因此脚本重复运行具备幂等性见 agent.py 的 ensure_custom_agent。请求体包含name、base_agent以及可选的instructions、description、base_environment.sources。调用阶段适配器会把请求体的agent字段解析为custom_agent_name见_resolved_agent。从本地 Agent 目录装载 Agentantigravity_from_agent_directory.py 实现 Managed Agents 文档中的 agent directory 约定从本地文件夹解析出完整的 Agent 定义并注册。目录结构如下即仓库中的 example_agent 目录example_agent/ ├── agent.yaml # id, base_agent, description, system_instruction ├── AGENTS.md # System instructions (overrides agent.yaml.system_instruction) ├── skills/ # Mounted under /.agents/skills/name/ in the sandbox │ └── haiku/SKILL.md └── workspace/ # Mounted at the sandbox root └── about.txt示例agent.yaml内容id: agno-haiku-bot-from-dir base_agent: antigravity-preview-05-2026 description: Haiku-writing assistant defined from a local directory. # system_instruction is here as a fallback; AGENTS.md overrides it if present. system_instruction: You are a haiku-writing assistant.其中id与base_agent为必填键源码中二者缺失会抛出ValueErrorAGENTS.md存在时优先于agent.yaml.system_instruction作为系统指令。skills/下的SKILL.md会挂载到沙箱的/.agents/skills/name/路径workspace/下的文件则挂载到沙箱根目录——例如 SKILL.md 规定了俳句的 house style严格的 5-7-5 音节、具象意象、季节词、无 emoji而 AGENTS.md 指示 Agent 启动时先阅读该技能文件。装载代码from pathlib import Path from agno.agents.antigravity import AntigravityAgent AGENT_DIR Path(__file__).parent / example_agent # from_agent_directory POSTs to /agents before returning (registerTrue default). agent AntigravityAgent.from_agent_directory(str(AGENT_DIR)) agent.print_response(Topic: autumn maples., streamTrue) agent.print_response(Topic: a quiet beach at dawn., streamTrue)关键行为源码 agent.py 的 from_agent_directoryregisterTrue默认时返回前即执行POST /agents注册具名 Agent409 视为成功幂等可重复运行传registerFalse可推迟注册以便先检查解析结果首次运行前需自行调用agent.ensure_custom_agent()超过 75 KB 的文件会跳过并告警API inline-source 上限常量INLINE_SOURCE_MAX_BYTES 75 * 1024二进制文件会被跳过——API 目前仅支持文本文件需要额外依赖 PyYAMLpip install pyyaml。目录到 sources 的映射规则见_build_sources_from_directoryworkspace/rel→ 目标/relskills/name/rel→ 目标/.agents/skills/name/rel。下载沙箱快照antigravity_snapshot.py 演示交互修改沙箱文件后将整个环境文件系统以 tar 归档形式拉取下来用于检查 Agent 产出、归档运行记录或基于已知良好状态初始化新环境。其底层调用 Files APIGET /v1beta/files/environment-{environment_id}:download?altmedia。import tarfile from pathlib import Path from agno.agents.antigravity import AntigravityAgent OUT_PATH Path(tmp/antigravity_snapshot.tar) OUT_PATH.parent.mkdir(parentsTrue, exist_okTrue) SESSION_ID snapshot-demo agent AntigravityAgent(nameAntigravity Snapshot Demo) # Run something that writes a file into the sandbox. Non-streaming so the # adapter captures environment_id from the response (SSE doesnt carry it). agent.print_response( Create a file /workspace/hello.txt containing the line snapshot test and confirm it exists., streamFalse, session_idSESSION_ID, ) # Pull the env snapshot for the session we just ran. bytes_written agent.download_environment_snapshot( str(OUT_PATH), session_idSESSION_ID, ) print(f\nSnapshot saved: {OUT_PATH} ({bytes_written} bytes)) # Inspect the archive. with tarfile.open(OUT_PATH, r) as tf: members tf.getnames() print(fArchive contains {len(members)} entries. First 10:) for name in members[:10]: print(f {name})实操要点本示例特意使用非流式streamFalse适配器从非流式 JSON 响应中捕获environment_id而 SSE 流事件不携带该字段download_environment_snapshot的 env id 解析顺序为显式environment_id参数 → 从session_id对应会话的session_data中读取需配置 db→ 都没有则抛出ValueError见 agent.py 的 download_environment_snapshot方法返回写入的字节数适合打印日志或做完整性校验。通过 AgentOS 对外服务antigravity_session_agentos.py 将AntigravityAgent通过 AgentOS 对外服务并以 SQLite 作为会话后端——这样运行与会话在重启后依然存在并出现在 AgentOS UI 的会话列表中from agno.agents.antigravity import AntigravityAgent from agno.db.sqlite import SqliteDb from agno.os import AgentOS db SqliteDb(db_filetmp/antigravity_agentos.db) antigravity_agent AntigravityAgent( nameAntigravity, descriptionAntigravity with persisted sessions, dbdb, ) agent_os AgentOS( nameAntigravity Sessioned, descriptionAgentOS serving an Antigravity-backed agent with SQLite sessions, agents[antigravity_agent], ) app agent_os.get_app() if __name__ __main__: agent_os.serve(appantigravity_session_agentos:app, reloadTrue)运行后 AgentOS 会提供/agents列表端点与流式/runs端点TEST_LOG 中对应的验证项即这两项。由于 Antigravity 适配器实现了BaseExternalAgent的流式接口AgentOS 的 UI 与 API 可以原样呈现 Antigravity 的流式输出与工具调用事件。工具化方式把沙箱当作工具调用若你希望保留常规 Agno Agent 的大脑任意模型仅在需要时把任务委派给 Antigravity 沙箱则使用AntigravityTools工具包示例见 cookbook/91_tools/antigravity/antigravity_tools.pyfrom agno.agent import Agent from agno.models.google import Gemini from agno.tools.antigravity import AntigravityTools agent Agent( nameResearch Assistant with Antigravity tools, modelGemini(idgemini-2.5-pro), tools[AntigravityTools()], markdownTrue, instructions[ You have access to a managed Antigravity sandbox with web search, code execution, and file I/O., When the user asks for something that benefits from those capabilities — multi-step research, analysing a repo, generating files, or running code you cannot run locally — delegate the work to the sandbox via the run_antigravity_task tool., Otherwise, answer directly without invoking the tool., The sandbox persists across calls in the same session, so follow-up tasks can build on prior state., ], ) if __name__ __main__: agent.print_response( Use the Antigravity sandbox to find the latest stable Python release and summarize what changed in it. )此模式中Agno Agent 的模型此处为 Gemini自行决策何时调用run_antigravity_task工具同一 Agno 会话内沙箱跨调用持久化后续任务可以基于此前产生的文件与状态继续推进。同目录下还提供antigravity_agents_crud_tools.pyAgents API 完整 CRUDcreate / get / update / list / versions / delete / invokeantigravity_directory_tools.py将本地agent.yaml目录接入工具包解析、注册、后续工具调用路由到具名 Agentantigravity_snapshot_tools.py让 Agno Agent 先运行沙箱任务再以 tar 形式下载结果环境。测试与验证状态本目录的 TEST_LOG.md 跟踪了各示例的验证状态antigravity_from_agent_directory.py的目录解析器单元测试已通过必填键校验、AGENTS.md 优先级、workspace skills 目标映射、75 KB 大小限制antigravity_snapshot.py的快照工具方法单元测试env-id 从 session_state 解析、错误透出也已通过其余示例的实况 API 验证正在等待合作伙伴密钥。这意味着本文示例的代码形态与核心逻辑已有源码与单元测试背书但在接入真实 API 时仍应以实际返回为准。小结围绕 Antigravity 这一托管 Agent 循环服务Agno 提供了完整的两级集成Agent 级AntigravityAgent让 Antigravity 本身成为 Agent配合SqliteDb实现跨轮沙箱复用与断点恢复配合sources预置环境支持自定义 Agent 注册、本地目录装载与快照导出并通过 AgentOS 对外提供 UI 与 API工具级AntigravityTools让任意模型的 Agno Agent 将子任务委派给沙箱执行另有 CRUD、目录路由、快照下载等高级工具。选择哪种方式核心判断标准就是由谁驱动循环需要托管 Agent 身份与自主循环时选AntigravityAgent需要保留本地编排与模型决策时选AntigravityTools。所有示例均可直接运行只需先设置GEMINI_API_KEY并加入 Agents API EAP 计划。【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表