:外部托管 Agent 與工具化沙箱實戰(zhàn)指南)
Agno 集成 Google Gemini Agents APIAntigravity外部托管 Agent 與工具化沙箱實戰(zhàn)指南【免費下載鏈接】agnoBuild, run, and manage agent platforms.項目地址: https://gitcode.com/GitHub_Trending/ag/agnoAntigravityGemini Agents API是 Google 提供的托管式 Agent 循環(huán)服務(wù)一次 REST 調(diào)用即可拉起一個內(nèi)置網(wǎng)頁搜索、代碼執(zhí)行與文件 I/O 的沙箱 Linux 環(huán)境由服務(wù)端自主運行循環(huán)以完成任務(wù)并通過environment_id跨輪次保留環(huán)境狀態(tài)。本文基于 cookbook/frameworks/antigravity 文檔及其配套示例系統(tǒng)講解 Agno 與 Antigravity 的兩種集成方式——將 Antigravity 作為外部托管 AgentAntigravityAgent接入 AgentOS或?qū)⑵渥鳛楣ぞ甙麬ntigravityTools交由普通 Agno Agent 委派子任務(wù)。讀完本文你將掌握沙箱會話持久化、環(huán)境預(yù)置、自定義 Agent 注冊、Agent 目錄裝載與快照下載等完整的實戰(zhàn)方案。Antigravity 與 Agno 的集成模型Antigravity 是一種托管 Agent 循環(huán)客戶端只需發(fā)送一個 REST 請求服務(wù)端便會在沙箱化 Linux 環(huán)境中完成網(wǎng)頁搜索、代碼執(zhí)行和文件讀寫運行自主循環(huán)滿足請求并將結(jié)果返回或流式推送。環(huán)境通過environment_id跨輪次持久化因此多輪對話可以共享沙箱內(nèi)的文件與已安裝依賴。Agno 提供兩條集成路徑選擇標準取決于由誰驅(qū)動循環(huán)集成方式適用場景參考示例AntigravityAgent外部 Agent希望 Antigravity本身成為Agent通過 AgentOS 對外服務(wù)由 Agno 負責會話、流式輸出與 UIantigravity_basic.py、antigravity_session_agentos.py本目錄AntigravityTools工具包希望一個常規(guī) Agno Agent任意模型將子任務(wù)委派給 Antigravity 沙箱作為一次工具調(diào)用cookbook/91_tools/antigravity/antigravity_tools.py從源碼實現(xiàn)看AntigravityAgent繼承自BaseExternalAgent位于 libs/agno/agno/agents/antigravity/agent.py本質(zhì)是 Gemini Agents API 的適配器它封裝了POST /interactions與 SSE 流式事件將 Antigravity 的文本增量、工具調(diào)用、思考流翻譯為 Agno 的RunContentEvent、ToolCallStartedEvent、ToolCallCompletedEvent事件從而無縫接入 Agno 的run()/print_response()與 AgentOS 端點。環(huán)境準備兩種集成方式都依賴 Gemini API Key且需要已加入 Agents API EAP搶先體驗計劃。設(shè)置環(huán)境變量export GEMINI_API_KEY...AntigravityAgent構(gòu)造時若不傳api_key會自動回退讀取GEMINI_API_KEY環(huán)境變量兩者均缺失時拋出ValueError見 agent.py 中的 _resolved_api_key。最小獨立運行AntigravityAgent 基礎(chǔ)用法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關(guān)鍵構(gòu)造參數(shù)源碼 agent.pynameAgent 顯示名稱base_urlAPI 基地址默認https://generativelanguage.googleapis.com/v1betaagent基礎(chǔ) Agent 名稱默認antigravity-preview-05-2026也可指向已注冊的自定義 Agent idsources環(huán)境預(yù)置源列表gcs/repository/inline三種類型在會話首輪初始化沙箱timeout單請求超時默認 600 秒api_key顯式傳入密鑰缺省回退環(huán)境變量。默認不配置數(shù)據(jù)庫時每次運行都會新起一輪沙箱環(huán)境不跨輪保留若需跨輪復用沙箱狀態(tài)則需要會話持久化。多輪會話與沙箱狀態(tài)復用antigravity_session.py 演示了關(guān)鍵能力同一session_id內(nèi)復用同一 Antigravity 環(huán)境沙箱狀態(tài)、文件、已安裝包并將聊天歷史持久化到本地 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第二輪同會話直接讀取——這驗證了沙箱環(huán)境在輪次之間被復用。其底層機制是適配器把environment_id與previous_interaction_id緩存進會話的session_data對應(yīng)_ENV_KEY antigravity_env_id與_PREV_KEY antigravity_previous_interaction_id兩個鍵后續(xù)請求體通過environment字段直接攜帶緩存的 env id 復用沙箱并通過previous_interaction_id串聯(lián)交互歷史見 agent.py 的 _read_session_env / _write_session_env / _build_request_body。這種按 session_id 緩存的設(shè)計使狀態(tài)落在持久化會話上而非實例屬性上線程安全且重啟不丟失。環(huán)境預(yù)置sources 三種類型antigravity_sources.py 演示在沙箱初始化時預(yù)置文件使 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作用關(guān)鍵字段inline將小段文本直接寫入沙箱目標路徑content文件內(nèi)容、target如/workspace/about.txtrepository將 Git 倉庫克隆到目標路徑source如github://agno-agi/agno、targetgcs從公共 GCS 桶拉取目錄source如gs://my-bucket/data/、target從源碼看sources 只在會話首輪隨請求發(fā)送_environment_field在無緩存 env id 且設(shè)置了 sources 時返回{type: remote, sources: self.sources}否則復用緩存 env id 或返回remote見 agent.py 的 _environment_field。另外需要注意當使用自定義 Agentcustom_agent_name時sources 歸屬于 Agent 定義通過POST /agents發(fā)送不會再出現(xiàn)在/interactions請求體中。自定義 Agent 注冊與調(diào)用antigravity_custom_agent.py 演示 Agents API 的完整流程不依賴臨時指令運行基礎(chǔ)antigravityAgent而是先注冊一個具名 Agent 定義再按名稱調(diào)用。這在需要穩(wěn)定、可復用、可調(diào)度/共享/版本化的 Agent 身份時非常有用——指令與 sources 隨 Agent 定義保存而非跟隨每次調(diào)用。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)注冊動作是顯式的首次運行前調(diào)用一次agent.ensure_custom_agent()內(nèi)部執(zhí)行POST /v1beta/agents并把409已存在視為成功因此腳本重復運行具備冪等性見 agent.py 的 ensure_custom_agent。請求體包含name、base_agent以及可選的instructions、description、base_environment.sources。調(diào)用階段適配器會把請求體的agent字段解析為custom_agent_name見_resolved_agent。從本地 Agent 目錄裝載 Agentantigravity_from_agent_directory.py 實現(xiàn) Managed Agents 文檔中的 agent directory 約定從本地文件夾解析出完整的 Agent 定義并注冊。目錄結(jié)構(gòu)如下即倉庫中的 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內(nèi)容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存在時優(yōu)先于agent.yaml.system_instruction作為系統(tǒng)指令。skills/下的SKILL.md會掛載到沙箱的/.agents/skills/name/路徑workspace/下的文件則掛載到沙箱根目錄——例如 SKILL.md 規(guī)定了俳句的 house style嚴格的 5-7-5 音節(jié)、具象意象、季節(jié)詞、無 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)關(guān)鍵行為源碼 agent.py 的 from_agent_directoryregisterTrue默認時返回前即執(zhí)行POST /agents注冊具名 Agent409 視為成功冪等可重復運行傳registerFalse可推遲注冊以便先檢查解析結(jié)果首次運行前需自行調(diào)用agent.ensure_custom_agent()超過 75 KB 的文件會跳過并告警API inline-source 上限常量INLINE_SOURCE_MAX_BYTES 75 * 1024二進制文件會被跳過——API 目前僅支持文本文件需要額外依賴 PyYAMLpip install pyyaml。目錄到 sources 的映射規(guī)則見_build_sources_from_directoryworkspace/rel→ 目標/relskills/name/rel→ 目標/.agents/skills/name/rel。下載沙箱快照antigravity_snapshot.py 演示交互修改沙箱文件后將整個環(huán)境文件系統(tǒng)以 tar 歸檔形式拉取下來用于檢查 Agent 產(chǎn)出、歸檔運行記錄或基于已知良好狀態(tài)初始化新環(huán)境。其底層調(diào)用 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 響應(yīng)中捕獲environment_id而 SSE 流事件不攜帶該字段download_environment_snapshot的 env id 解析順序為顯式environment_id參數(shù) → 從session_id對應(yīng)會話的session_data中讀取需配置 db→ 都沒有則拋出ValueError見 agent.py 的 download_environment_snapshot方法返回寫入的字節(jié)數(shù)適合打印日志或做完整性校驗。通過 AgentOS 對外服務(wù)antigravity_session_agentos.py 將AntigravityAgent通過 AgentOS 對外服務(wù)并以 SQLite 作為會話后端——這樣運行與會話在重啟后依然存在并出現(xiàn)在 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 中對應(yīng)的驗證項即這兩項。由于 Antigravity 適配器實現(xiàn)了BaseExternalAgent的流式接口AgentOS 的 UI 與 API 可以原樣呈現(xiàn) Antigravity 的流式輸出與工具調(diào)用事件。工具化方式把沙箱當作工具調(diào)用若你希望保留常規(guī) Agno Agent 的大腦任意模型僅在需要時把任務(wù)委派給 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自行決策何時調(diào)用run_antigravity_task工具同一 Agno 會話內(nèi)沙箱跨調(diào)用持久化后續(xù)任務(wù)可以基于此前產(chǎn)生的文件與狀態(tài)繼續(xù)推進。同目錄下還提供antigravity_agents_crud_tools.pyAgents API 完整 CRUDcreate / get / update / list / versions / delete / invokeantigravity_directory_tools.py將本地agent.yaml目錄接入工具包解析、注冊、后續(xù)工具調(diào)用路由到具名 Agentantigravity_snapshot_tools.py讓 Agno Agent 先運行沙箱任務(wù)再以 tar 形式下載結(jié)果環(huán)境。測試與驗證狀態(tài)本目錄的 TEST_LOG.md 跟蹤了各示例的驗證狀態(tài)antigravity_from_agent_directory.py的目錄解析器單元測試已通過必填鍵校驗、AGENTS.md 優(yōu)先級、workspace skills 目標映射、75 KB 大小限制antigravity_snapshot.py的快照工具方法單元測試env-id 從 session_state 解析、錯誤透出也已通過其余示例的實況 API 驗證正在等待合作伙伴密鑰。這意味著本文示例的代碼形態(tài)與核心邏輯已有源碼與單元測試背書但在接入真實 API 時仍應(yīng)以實際返回為準。小結(jié)圍繞 Antigravity 這一托管 Agent 循環(huán)服務(wù)Agno 提供了完整的兩級集成Agent 級AntigravityAgent讓 Antigravity 本身成為 Agent配合SqliteDb實現(xiàn)跨輪沙箱復用與斷點恢復配合sources預(yù)置環(huán)境支持自定義 Agent 注冊、本地目錄裝載與快照導出并通過 AgentOS 對外提供 UI 與 API工具級AntigravityTools讓任意模型的 Agno Agent 將子任務(wù)委派給沙箱執(zhí)行另有 CRUD、目錄路由、快照下載等高級工具。選擇哪種方式核心判斷標準就是由誰驅(qū)動循環(huán)需要托管 Agent 身份與自主循環(huán)時選AntigravityAgent需要保留本地編排與模型決策時選AntigravityTools。所有示例均可直接運行只需先設(shè)置GEMINI_API_KEY并加入 Agents API EAP 計劃。【免費下載鏈接】agnoBuild, run, and manage agent platforms.項目地址: https://gitcode.com/GitHub_Trending/ag/agno創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考