google-antigravity/antigravity-sdk-python
GitHub: google-antigravity/antigravity-sdk-python
一个基于 Python 的 AI agent 构建框架,由 Gemini 和 Google Antigravity 驱动,提供有状态会话管理、工具调用和多模态处理能力。
Stars: 2431 | Forks: 910
# Google Antigravity SDK
Google Antigravity SDK 是一个 Python SDK,用于构建由 Antigravity 和 Gemini 驱动的 AI agent。它提供了一个安全、可扩展且有状态的基础设施层,抽象了 agentic loop,让您可以专注于 agent *做什么*,而不是它如何运行。
## 安装
```
pip install google-antigravity
```
## 快速开始
通过运行 [`examples/`](examples/) 中的示例来入门,例如使用以下命令运行 `hello_world` 示例:
```
export GEMINI_API_KEY="your_api_key_here"
python ./examples/getting_started/hello_world.py
```
## Gemini Enterprise Agent Platform(原 Vertex AI)
要将 SDK 与 Gemini Enterprise Agent Platform(原 Vertex AI)配合使用,请使用 `vertex=True` 配置 `LocalAgentConfig`,并指定您的 GCP `project` 和 `location`。
默认情况下,SDK 使用 Application Default Credentials (ADC) 进行身份验证。
```
from google.antigravity import Agent, LocalAgentConfig
config = LocalAgentConfig(
vertex=True,
project="your-gcp-project",
location="us-central1",
)
async with Agent(config) as agent:
response = await agent.chat("Hello!")
print(await response.text())
```
在运行 agent 之前,请确保您已在本地完成身份验证:
```
gcloud auth application-default login
```
## 概念
### 简单 Agent
`Agent` 类是最简单的入门方式。它在一个异步 context manager 背后管理着完整的生命周期——二进制发现、工具连接、hook 注册和策略默认值。
`system_instructions` 参数是可选的。
```
import asyncio
from google.antigravity import Agent, LocalAgentConfig
async def main():
config = LocalAgentConfig(
system_instructions="You are an expert assistant for codebase navigation.",
# api_key="your_api_key_here",
)
async with Agent(config) as agent:
response = await agent.chat("What files are in the current directory?")
print(await response.text())
async def run():
await main()
if __name__ == "__main__":
asyncio.run(run())
```
### 流式响应
要实时流式传输 agent 输出(例如,用于流畅的 UI 或控制台应用程序),只需使用 `async for` 循环遍历 `ChatResponse` 对象。stream wrapper 会在对话 `str` 文本 token 到达时原生地将其输出,且没有任何网络开销:
```
import asyncio
import sys
from google.antigravity import Agent, LocalAgentConfig
async def main():
config = LocalAgentConfig()
async with Agent(config) as agent:
# Returns instantly — does not block
response = await agent.chat("Write a short poem about space.")
async for token in response:
sys.stdout.write(token)
sys.stdout.flush()
print()
asyncio.run(main())
```
### Sugar 化 Thoughts 和 Tool Call 流(高级)
对于更复杂的用例,您还可以使用专用的 async stream 属性,流式传输内部模型推理/thinking 或实时拦截 tool call 分发:
```
# 1. 流式传输推理/思考增量
async for thought in response.thoughts:
show_thinking_bubble(thought)
# 2. 流式传输强类型 ToolCall 事件
async for call in response.tool_calls:
show_executing_spinner(call.name)
```
为了安全起见,`Agent` 默认在**只读模式**下运行。传入 `capabilities=CapabilitiesConfig()` 以启用所有工具(包括写入)。
### 交互式循环
```
from google.antigravity import LocalAgentConfig, CapabilitiesConfig
from google.antigravity.utils.interactive import run_interactive_loop
config = LocalAgentConfig(
# api_key="your_api_key_here",
capabilities=CapabilitiesConfig(),
)
await run_interactive_loop(config)
```
### Conversation 的高级用法
要完全控制连接生命周期,请直接使用带有 `ConnectionStrategy` 的 `Conversation`。`Conversation` 是一个有状态的 session,它会累积 step 历史记录,提供便捷的 `chat()` 方法,并公开状态内省:
```
import asyncio
from google.antigravity.connections.local import LocalConnectionStrategy
from google.antigravity.conversation.conversation import Conversation
from google.antigravity.tools.tool_runner import ToolRunner
async def main():
tool_runner = ToolRunner()
strategy = LocalConnectionStrategy(
tool_runner=tool_runner,
)
async with Conversation.create(strategy) as conversation:
# High-level: one-call send + collect
response = await conversation.chat("What files are here?")
print(await response.text())
# Step history accumulates automatically
print(f"Total steps: {len(conversation.history)}")
print(f"Turns: {conversation.turn_count}")
print(f"Last response: {conversation.last_response}")
# Low-level: streaming steps
await conversation.send("Tell me more.")
async for step in conversation.receive_steps():
if step.is_complete_response:
print(step.content)
asyncio.run(main())
```
## 功能
### 多模态摄取
将丰富的多媒体文件附件(图像、视频、音频和文档)与文本 instruction prompt 列表一起传递给 agent。
您可以**直接使用内容类附加资产**(非常适合内存中的 bytes),也可以**方便地从文件系统路径附加**(它会自动解析类型并猜测 MIME 格式):
```
from google.antigravity import Agent, LocalAgentConfig
from google.antigravity.types import Image, from_file
config = LocalAgentConfig(system_instructions="You are an expert software architect.")
async with Agent(config) as agent:
# 1. Flat filesystem shortcut (automatically resolves as types.Document)
pdf_spec = from_file("spec.pdf")
# 2. Direct constructor instantiation (perfect for in-memory raw bytes)
chart_image = Image(
data=b"raw_png_bytes_here",
mime_type="image/png",
description="Architecture blueprint"
)
# Send a mixed list of text instructions and content classes
prompt = [
"Analyze this chart against the specification and list three security vulnerabilities:",
chart_image,
pdf_spec
]
response = await agent.chat(prompt)
print(await response.text())
```
### 自定义工具
将 Python 函数注册为 agent 可以调用的工具:
```
def get_weather(city: str) -> str:
"""Returns the current weather for a city."""
return f"It's sunny in {city}."
config = LocalAgentConfig(
tools=[get_weather],
)
async with Agent(config) as agent:
response = await agent.chat("What's the weather in Tokyo?")
```
### MCP 集成
连接到外部 [MCP](https://modelcontextprotocol.io/) 服务器,并将其工具暴露给 agent:
```
from google.antigravity import Agent, LocalAgentConfig
from google.antigravity.types import McpStdioServer
config = LocalAgentConfig(
mcp_servers=[McpStdioServer(name="my_server", command="npx", args=["my-mcp-server"])],
)
async with Agent(config) as agent:
response = await agent.chat("Use the MCP tools to help me.")
```
### Hooks 和策略
使用声明式策略系统控制 agent 行为:
```
from google.antigravity import LocalAgentConfig, CapabilitiesConfig
from google.antigravity.hooks.policy import deny, allow, ask_user, enforce
from google.antigravity.utils.interactive import run_interactive_loop
policies = [
deny("*"), # Block all tools by default
allow("view_file"), # Allow reading files
ask_user("run_command", handler=my_handler), # Ask before running commands
]
config = LocalAgentConfig(
capabilities=CapabilitiesConfig(),
policies=policies,
)
await run_interactive_loop(config)
```
### 触发器
运行响应外部事件的后台任务,并将消息推送给 agent:
```
from google.antigravity import LocalAgentConfig
from google.antigravity.triggers import every
from google.antigravity.utils.interactive import run_interactive_loop
async def check_status(ctx):
await ctx.send("Check the deployment status.")
config = LocalAgentConfig(
triggers=[every(60, check_status)],
)
await run_interactive_loop(config)
```
## 架构
SDK 遵循三层架构:
| 层 | 用途 | 关键类 |
|:------|:--------|:------------|
| **第 1 层** — 简化 | 高级、开箱即用的入口点 | `Agent` |
| **第 2 层** — Session | 具有 history 和便捷方法的有状态 session | `Conversation`, `ChatResponse`, `Step`, `ToolCall`, `AgentConfig`, `HookRunner`, `ToolRunner`, `TriggerRunner` |
| **第 3 层** — Adapter | 传输和后端抽象 | `Connection`, `ConnectionStrategy`, `LocalConnection` |
## 组件文档
有关特定组件的更多详细文档,请参阅:
- [Agent](google/antigravity/agent.py) — 高级、开箱即用的入口点。
- [Connections](google/antigravity/connections/README.md) — 传输和后端抽象。
- [Conversation](google/antigravity/conversation/README.md) — 有状态的 session 管理。
- [Hooks](google/antigravity/hooks/README.md) — Agent 生命周期拦截和策略。
- [MCP](google/antigravity/mcp/README.md) — Model Context Protocol 集成。
- [Tools](google/antigravity/tools/README.md) — 进程内工具执行。
- [Triggers](google/antigravity/triggers/README.md) — 后台任务和外部事件。
## 许可证
[Apache License 2.0](LICENSE)
标签:AI智能体, GCP, Gemini, Python, 大模型SDK, 开发框架, 无后门, 计算机取证, 逆向工具