1. 简介
在此 Codelab 中,您将了解 Google Antigravity(在本文档的其余部分中称为 Antigravity),这是一个代理型开发平台,可将 IDE 发展为代理优先时代。
与仅自动补全代码行的标准编码助理不同,Antigravity 提供了一个“任务控制中心”,用于管理自主代理,这些代理可以规划、编码,甚至浏览网页来帮助您构建。
Antigravity 是一款“以代理为先”的平台。它预设 AI 不仅是编写代码的工具,而且是能够自主规划、执行、验证和迭代复杂工程任务的行动者,几乎无需人工干预。
学习内容
- 安装和配置 Antigravity
- 探索 Antigravity 的关键概念,例如代理管理器、编辑器、浏览器等
- 探索 Antigravity 的几个使用场景
所需条件
目前,Antigravity 仅面向个人 Gmail 账号提供预览版。它还附带免费配额,可用于使用高级模型。
Antigravity 需要在您的系统上本地安装。该产品适用于 Mac、Windows 和特定 Linux 发行版。除了您自己的机器之外,您还需要以下设备:
- Chrome 网络浏览器
- Gmail 账号(个人 Gmail 账号)。
本 Codelab 专为各种水平(包括新手)的用户和开发者而设计。
2. 安装
我们先从安装 Antigravity 开始。目前,该产品处于预览阶段,您可以使用个人 Gmail 账号开始使用。
前往下载页面,然后点击适用于您情况的相应操作系统版本。启动应用安装程序,并在您的计算机上安装该应用。安装完成后,启动 Antigravity 应用。您应该会看到类似于以下内容的界面:

请每次都点击下一步继续操作。关键步骤如下:
Choose setup flow:这会显示一个选项,供您从现有的 VS Code 或 Cursor 设置中导入。我们将重新开始。Choose an Editor theme type.我们将采用深色主题,但具体采用哪种主题完全取决于您的偏好。How do you want to use Antigravity agent:

让我们更详细地了解一下这一点,请记住,此设置并非一成不变,您可以随时更改,即使在与智能体互动时也是如此。
在深入探讨这些选项之前,我们先来看看对话框右侧的两个特定属性:
终端执行政策
这是关于赋予代理在终端中执行命令(应用/工具)的能力。这里有三个选项。
Off:绝不自动执行终端命令(可配置的允许列表中的命令除外)Auto:代理决定是否自动执行任何给定的终端命令。如果需要获得您的许可,它会自行决定并征求您的许可。Turbo:始终自动执行终端命令(可配置的拒绝列表中的命令除外)
查看政策
在执行任务的过程中,代理会创建各种制品(任务计划、实施计划等)。审核政策的设置方式可让您决定由谁来确定是否需要审核。您是否始终希望查看此内容,还是让代理决定是否查看。因此,这里也有三种选项。
Always Proceed:代理从不要求用户提供评价Agent Decides:代理将决定何时请求评价Request Review:代理始终要求进行审核
现在我们已经了解了这一点,这 4 个选项不过是终端执行和审核政策的特定预设,其中 3 个选项是预设,第 4 个选项可供我们完全自定义控制。我们提供了这 4 个选项,以便您可以选择希望为代理赋予多大的自主权,让其在终端中执行命令并获取待审核的制品,然后再继续执行任务。
这 4 个选项如下:
- 代理驱动型开发
- 代理辅助开发
- 以审核为导向的开发
- 自定义配置
代理辅助开发选项是一种不错的平衡方案,也是建议的方案,因为该选项允许代理做出决策,然后返回给用户以征求批准。
因此,请选择您喜欢的方式,不过目前最好采用推荐的方法。
Configure your Editor:选择您的偏好设置。Sign in to Google:如前所述,如果您拥有个人 Gmail 账号,则可以免费使用 Antigravity 的预览版。请立即使用您的账号登录。请确保为此创建新的 Chrome 个人资料。系统随即会打开浏览器,以便您登录。成功完成身份验证后,您会看到类似以下内容的消息,并且系统会将您引导回 Antigravity 应用。随遇而安。Terms of Use:您可以决定是否选择启用此功能,然后点击下一步。
接下来,您将迎来关键时刻,Antigravity 将等待与您协作。我们已准备好开始。
3. Agent Manager
Antigravity 基于开源 Visual Studio Code (VS Code) 基础版,但从根本上改变了用户体验,将代理管理置于文本编辑之上。界面分为两个不同的主要窗口:编辑器和代理管理器。这种关注点分离反映了个人贡献与工程管理之间的区别。
代理管理器:任务管理中心
启动 Antigravity 后,用户通常不会看到文件树,而是看到代理管理器,如下所示:

此界面充当 Mission Control 信息中心。它专为高级编排而设计,可让开发者生成、监控和与多个在不同工作区或任务中异步运行的代理进行交互。
在此视图中,开发者充当架构师。它们定义了高级目标,例如:
- 重构身份验证模块
- 更新依赖树
- 为结算 API 生成测试套件
如上图所示,每个请求都会生成一个专用代理实例。界面会直观呈现这些并行工作流,显示每个代理的状态、它们生成的制品(计划、结果、差异)以及任何待人工批准的请求。
此架构解决了之前 IDE 的一个主要限制,即之前 IDE 更像聊天机器人,是线性且同步的。在传统的聊天界面中,开发者必须等待 AI 完成代码生成,然后才能提出下一个问题。在 Antigravity 的 Manager View 中,开发者可以同时调度 5 个不同的代理来处理 5 个不同的 bug,从而有效提高吞吐量。
如果您点击上方的下一步,可以选择打开工作区。

将 Workspace 视为您在 VS Code 中所了解的 Workspace,这样就完成了。因此,我们可以点击按钮打开本地文件夹,然后选择一个文件夹开始操作。就我而言,我在主文件夹中有一个名为 my-agy-projects 的文件夹,我选择了该文件夹。您可以使用完全不同的文件夹。
请注意,如果您愿意,可以完全跳过此步骤,并且您也可以稍后随时打开工作区。
完成此步骤后,您将进入代理管理器窗口,如下所示:

您会注意到,应用会立即开始在所选的工作区文件夹 (my-agy-projects) 中启动新的对话。请注意,您可以利用自己在使用其他 AI 应用(Cursor、Gemini CLI)时积累的知识,并使用 @ 和其他方式在提示中添加更多上下文。
请务必查看 Planning 和 Model Selection 下拉菜单。您可以在“模型选择”下拉菜单中选择目前可供客服人员使用的模型。该列表如下所示:

同样,我们发现代理将处于默认的 Planning 模式。不过,我们也可以选择 Fast 模式。

我们来看看文档对此有何说明:
Planning:智能体可以在执行任务之前进行规划。适用于深度研究、复杂任务或协作工作。在此模式下,代理会以任务组的形式组织工作,生成制品,并采取其他步骤来彻底研究、仔细思考和规划工作,以实现最佳质量。您会在此处看到更多输出。Fast:代理将直接执行任务。适用于可以更快完成的简单任务,例如重命名变量、启动一些 Bash 命令或其他较小的本地化任务。如果速度是重要因素,且任务足够简单,无需担心质量变差,那么这种方法就很有用。
如果您熟悉代理中的思考预算和类似术语,可以将此功能视为能够控制代理的思考,从而直接影响思考预算。我们暂时使用默认设置,但请注意,在发布时,Gemini 3 Pro 模型会根据有限的配额向所有人提供,因此如果您已用完 Gemini 3 的免费配额,系统会显示相应的消息。
现在,我们花点时间了解一下这里的 Agent Manager(窗口),并了解一些内容,以便清楚了解基本构建块、如何在 Antigravity 中导航等。代理管理器窗口如下所示:

请参阅上图中的编号:
Inbox:您可以将此功能视为在一个位置跟踪所有对话的方式。当您派代理执行任务时,这些任务会显示在收件箱中,您可以点击收件箱来获取所有当前对话的列表。点按任何对话都会显示所有已交换的消息、任务状态、代理生成的内容,甚至还会显示代理是否在等待您批准任务。这样一来,您就可以稍后返回之前正在处理的任务。非常实用的功能。Start Conversation:点击此图标即可开始新的对话。这样可以直接找到显示Ask anything的输入源。Workspaces:我们提到了工作区,并说明了您可以在任意工作区中工作。您可以随时添加更多工作区,并且可以在开始对话时选择任何工作区。Playground:这是一种非常好的方式,您可以先与代理简单地开始对话,然后根据需要将其转换为工作区,以便更严格地控制文件等。您可以将此功能视为草稿区。Editor View:到目前为止,我们位于代理管理器视图中。如果您愿意,可以随时切换到编辑器视图。这会显示您的工作区文件夹和所有生成的文件。您可以直接在其中修改文件,甚至在编辑器中提供内嵌指南/命令,以便代理根据您修改后的建议/说明执行某些操作或进行更改。我们将在后面的部分详细介绍编辑器视图。Browser:最后,我们来谈谈 Antigravity 的一个明显优势,那就是它与 Chrome 浏览器的紧密集成。让我们在下一部分中开始设置浏览器。
4. 设置 Antigravity 浏览器
根据文档,当代理想要与浏览器互动时,它会调用浏览器子代理来处理手头的任务。浏览器子代理运行的是专门用于在 Antigravity 管理的浏览器中打开的网页上运行的模型,这与您为主代理选择的模型不同。
此子代理可以访问控制浏览器所需的各种工具,包括点击、滚动、输入、读取控制台日志等。它还可以通过 DOM 捕获、屏幕截图或 Markdown 解析来读取您打开的网页,以及拍摄视频。
这意味着我们需要启动并安装 Antigravity 浏览器扩展程序。我们来实际操作一下,在 Playground 中发起对话并完成相应步骤。
选择 Playground,然后向代理提供以下任务 go to antigravity.google,如下所示:

提交任务。您会看到智能体分析任务,并且可以检查思考过程。在某个时间点,它会正确继续,并提及需要设置浏览器代理,如下所示。点击设置。

此操作将打开浏览器并显示一条消息,提示您安装扩展程序,如下所示:

继续操作,系统会将您引导至 Chrome 扩展程序,然后您就可以安装该扩展程序了。

成功安装扩展程序后,Antigravity Agent 会开始工作,并提示您允许其执行任务。您应该会在已打开的浏览器窗口中看到一些活动:

切换回代理管理器视图,您应该会看到以下内容:

这正是我们预期的结果,因为我们要求代理前往 antigravity.google 网站。授予该权限后,您会发现系统已安全地导航到相应网站,如下所示:

检查制品
现在,有趣的部分来了。智能体完成工作后,您应该能够看到其全部工作内容。这样一来,您就可以引入制品,这是您建立信任的基础,包括您计划完成的工作、目前已完成的工作以及您如何验证这些工作。
制品可解决“信任缺口”。当客服人员声称“我已修复此 bug”时,开发者之前必须读取代码才能进行验证。在 Antigravity 中,代理会生成一个制品来证明这一点。
Antigravity 专注于根据任务生成关键制品。这可能包括任务计划、实施计划,以及最终的演练计划(含验证)。在这些计划中,您应考虑包含以下内容:
Task Lists & Plans:在编写代码之前,代理会生成结构化方案。用户可以查看、修改和批准此方案。Code Diffs:标准化差异视图,可准确显示哪些行会发生更改。Screenshots:代理会捕获界面在发生更改前后的状态。Browser Recordings:对于动态互动(例如,“点击登录按钮,等待微调器,验证信息中心是否加载”),代理会录制会话视频。开发者可以观看此视频,以验证功能需求是否得到满足,而无需自行运行应用。Test Results:由代理生成和执行的通过/失败测试的结构化日志。
在右上角,紧邻“在代理管理器视图中查看更改”旁边,您应该能够看到一个用于切换工件的按钮。如果该按钮处于开启状态,您可以看到生成的工件列表:

您应该会看到如下所示的“制品”视图。在本例中,我们指示代理访问 antigravity.google 页面,因此它截取了屏幕截图、创建了相应视频等。

开发者可以使用“Google 文档风格的注释”与这些制品进行互动。您可以选择特定操作或任务,以您希望的方式提供命令,然后将其提交给代理。然后,代理会接收此反馈并相应地进行迭代。考虑使用交互式 Google 文档,您可以在其中向作者提供反馈,然后作者根据反馈进行迭代。
5. 重温 Inbox
如果您已与代理开始了几次对话,现在应查看代理管理器窗口中的收件箱。这样一来,您就可以看到所有对话了。点击任意对话即可查看该对话的历史记录、生成的制品等。在我们的示例中,运行第一个对话后,收件箱中会显示该对话,如下所示:

点击相应对话即可查看详细信息:

您也可以从这里继续对话。
6. 编辑器
编辑器保留了 VS Code 的熟悉感,确保经验丰富的开发者的肌肉记忆得到尊重。它包括标准文件浏览器、语法突出显示和扩展程序生态系统。
您可以点击代理管理器右上角的打开编辑器按钮前往编辑器。

编辑器已增强“代理感知”功能。
Inline Command:编辑器支持氛围编码和内嵌指令,用户可以突出显示代码并指示代理执行"Make this more efficient"或"Add comments explaining this logic"。Agent Side Panel:使用编辑器右侧的面板直接与智能体互动。您可以在此处发起新的对话,也可以提供指令来更改代码。
接下来,我们将介绍一些与 Web 开发相关的应用场景,在这些场景中,代理会创建多个代码文件,然后我们可以查看编辑器中的文件,进行更改并直接与代理互动。
7. 在编辑器和代理管理器之间切换
请注意,Antigravity 具有主观性,因为编辑器和代理管理器都是单独的窗口,并且两者都有明确的需求。您可以从一个切换到另一个,方法是:在编辑器中点击右上角的打开代理管理器按钮,或者在代理管理器中点击右上角的打开编辑器按钮。
或者,您也可以使用以下键盘快捷键在两种模式之间切换:Cmd + E
8. 使用场景
现在,我们已经对该产品有了基本的了解,接下来,让我们深入了解几个使用场景,看看它的实际应用。请注意,Antigravity 是一个以代理为先的平台。这意味着,在大多数情况下,我们只需向代理发出指令,然后代理就会自行完成任务,在需要时请求权限,生成制品,并在任务完成后通知我们。因此,我们无法在以下每种使用情形中生成代理对话的每个输出。我们会分享说明和一些必要的结果预期屏幕截图,但您的结果可能会略有不同。
我们将介绍的应用场景包括:自动执行与外部网站相关的一些任务、为项目生成和验证单元测试用例,以及完整的网站开发。出发吧。
新闻集锦
这是一个简单的使用情形,但您可以基于此情形使用 Web 浏览器访问网站、提取信息、执行一些操作,然后将数据返回给用户。
在这种情况下,我们将访问 Google 新闻网站并从中提取一些信息。不过,您可以轻松地选择一个网站进行实验,看看效果如何。
确保您位于 Agent Manager 中,并已选择 Playground,如下所示:

然后,给出以下指令:

这会启动代理进程,并确定需要启动浏览器等。您应密切关注思考过程,了解代理如何完成工作。如果一切顺利,它应该会启动 Antigravity 浏览器并访问相应网站,如下所示。网站周围的蓝色边框表示代理正在控制浏览器并浏览网站以获取信息。

完成工作后,您还应该会看到工件正在生成,如下所示:

下面展示了代理的执行示例:

请注意,左侧是“思路”,您还可以滚动浏览各个点,查看播放情况和其他数据。
尝试以下任务
- 了解这一点后,选择一个可访问的网站,并指定您希望代理前往该网站获取/总结一些数据。考虑某个您知道包含信息中心和图表的网站,并让 Gemini 从中选择一些值。
- 不妨试试以下提示:
Visit https://docs.cloud.google.com/release-notes and get me a summary of the release notes, categorized by product.
使用 Python + Flask 生成动态网站
现在,我们来生成一个完整的 Web 应用。我们将要创建的 Web 应用是一个网站,其中包含为期 1 天的技术活动的相关信息,该活动由多位演讲者在一天内进行多场讲座。
再次确保您位于 Agent Manager 中,并且已选择 Playground。
输入以下提示:
I would like to generate a website that is a 1-day technical conference informational site.
The website should have the following functionality:
1. A home page that shows the current date, location, schedule and time table.
2. The 1-day event is a list of 8 talks in total.
3. Each talk has 1 or 2 max. speakers.
4. A talk has an ID, Title, Speakers, Category (1 or 2), Description and time of the talk.
5. Each speaker has a First Name, Last Name and LinkedIn url.
6. Allow for users to search by category, speaker, title.
7. Give a lunch break of 60 minutes.
8. Use dummy data for events and speakers, come up with a schedule, the event is about Google Cloud Technologies.
9. Tech Stack: Python and Flask framework on server side. Front-end is basic HTML, CSS and JavaScript.
10. Test out the site on your own for all functionality and provide a detailed README on how to setup, run and make any further changes.
11. Launch the web application for me to review.
您可以先给出上述提示,开始对话:
当代理执行任务时,它会继续创建工件:
- 任务制品
- 实现工件
- 演示制品
以下任务制品是代理根据分配给它的任务破译出的初始任务序列。执行后的示例屏幕截图如下所示:

然后,您可以点击实施计划制品。示例屏幕截图如下所示:

最后,您会获得 Walkthrough 制品。它包含智能体执行的所有操作,如下所示:

请注意,它已启动服务器并向我提供了网址,我点击该网址后即可访问应用,下面显示了示例屏幕截图:

如果我切换到编辑器,请注意屏幕中包含生成 Python Flask 应用的文件夹。您还会注意到,Agent mode标记位于右侧,您也可以在那里继续对话。

现在,假设我们要为活动添加更多讲座。我们可以留在编辑器和代理面板中,然后给出类似 Add two more talks to the schedule 的指令。
这样一来,智能体就会分析需求、更新任务和实施方案,然后验证更新后的功能。以下是对话示例:

如果您愿意,可以切换回代理管理器。此流程应有助于您了解从代理管理器切换到编辑器、相应地进行更改等过程。
注意:在执行此任务期间,代理尝试在当前机器上正在使用的端口 5000 上启动 Flask 服务器。它不断尝试下一个空闲端口,直到决定使用 8080 端口并成功启动服务器。
尝试以下任务
- 向应用添加您需要的其他功能。向代理提供详细信息,并注意它如何完成任务,首先修改任务列表,然后修改实施方案,依此类推。
- 让代理为应用生成 README 或更多文档。
生成一个简单的效率类应用
接下来,我们将生成一个简单的番茄工作法计时器 Web 应用。
确保您位于 Agent Manager 中,并且已选择 Playground。输入以下提示:
Create a productivity app that features a Pomodoro timer. Give a calm and aesthetic look to the application.
请注意,它会先创建任务列表和实施方案,然后再执行这些方案。请继续关注流程,在某些情况下,系统可能会提示您进行检查。运行示例见下文。

在这种情况下,它还应启动 Antigravity 浏览器,执行自己的测试,然后确认测试成功。它生成的内容之一是包含验证视频的媒体制品。这种方法非常适合查看测试内容。我还建议进行一些样式更改,因为样式更改未生效,但系统能够进行这些更改。
最终的应用如下图所示,效果相当不错。

我们可以在应用中添加一个漂亮的计时器图片。我们只需发出如下后续指令:
Add an image to the application that displays a timer.
这导致代理向任务制品添加了一个新任务:

然后,在执行任务的过程中生成了一张图片:

最后,应用显示了我们要求的图片:

尝试以下任务
- 请注意,应用中沙漏图标的背景不是透明的。尝试让代理将该内容设为透明。
- 尝试生成您想要的任何应用的一些变体。尝试不同的样式和图片,要求进行更改等。
生成单元测试、模拟桩和验证测试
我们将在此处尝试的最后一个使用情形是,为我们拥有的特定代码文件生成单元测试,并让代理执行测试并验证测试结果。
为此,我们将创建一个包含单个 Python 文件的工作区,如下所示:
from typing import Dict
# --- Custom Exceptions ---
class InventoryShortageError(Exception):
"""Raised when there is not enough item stock."""
pass
class PaymentFailedError(Exception):
"""Raised when the payment gateway rejects the transaction."""
pass
class InvalidOrderError(Exception):
"""Raised when the order violates business rules."""
pass
# --- External Service Interfaces (To be Mocked) ---
class InventoryService:
def get_stock(self, product_id: str) -> int:
"""Connects to DB to check stock."""
raise NotImplementedError("Real connection required")
def decrement_stock(self, product_id: str, quantity: int):
"""Connects to DB to reduce stock."""
raise NotImplementedError("Real connection required")
class PaymentGateway:
def charge(self, amount: float, currency: str) -> bool:
"""Connects to Stripe/PayPal."""
raise NotImplementedError("Real connection required")
# --- Main Business Logic ---
class Order:
def __init__(self,
inventory_service: InventoryService,
payment_gateway: PaymentGateway,
customer_email: str,
is_vip: bool = False):
self.inventory = inventory_service
self.payment = payment_gateway
self.customer_email = customer_email
self.is_vip = is_vip
self.items: Dict[str, Dict] = {} # {product_id: {'price': float, 'qty': int}}
self.is_paid = False
self.status = "DRAFT"
def add_item(self, product_id: str, price: float, quantity: int = 1):
"""Adds items to the cart. Rejects invalid prices or quantities."""
if price < 0:
raise ValueError("Price cannot be negative")
if quantity <= 0:
raise ValueError("Quantity must be greater than zero")
if product_id in self.items:
self.items[product_id]['qty'] += quantity
else:
self.items[product_id] = {'price': price, 'qty': quantity}
def remove_item(self, product_id: str):
"""Removes an item entirely from the cart."""
if product_id in self.items:
del self.items[product_id]
@property
def total_price(self) -> float:
"""Calculates raw total before discounts."""
return sum(item['price'] * item['qty'] for item in self.items.values())
def apply_discount(self) -> float:
"""
Applies business logic:
1. VIPs get flat 20% off.
2. Regulars get 10% off if total > 100.
3. No discount otherwise.
"""
total = self.total_price
if self.is_vip:
return round(total * 0.8, 2)
elif total > 100:
return round(total * 0.9, 2)
return round(total, 2)
def checkout(self):
"""
Orchestrates the checkout process:
1. Validates cart is not empty.
2. Checks stock for all items.
3. Calculates final price.
4. Charges payment.
5. Updates inventory.
"""
if not self.items:
raise InvalidOrderError("Cannot checkout an empty cart")
# 1. Check Inventory Logic
for product_id, data in self.items.items():
available_stock = self.inventory.get_stock(product_id)
if available_stock < data['qty']:
raise InventoryShortageError(f"Not enough stock for {product_id}")
# 2. Calculate Final Price
final_amount = self.apply_discount()
# 3. Process Payment
try:
success = self.payment.charge(final_amount, "USD")
if not success:
raise PaymentFailedError("Transaction declined by gateway")
except Exception as e:
# Catching generic network errors from the gateway
raise PaymentFailedError(f"Payment gateway error: {str(e)}")
# 4. Decrement Stock (Only occurs if payment succeeded)
for product_id, data in self.items.items():
self.inventory.decrement_stock(product_id, data['qty'])
self.is_paid = True
self.status = "COMPLETED"
return {"status": "success", "charged_amount": final_amount}
确保您已将上述 Python 文件本地保存在文件夹中,并将其作为 Antigravity 中的工作区加载。
这是一个简单的 Order 服务,在 checkout 函数中具有以下关键功能:
- 验证购物车是否不为空。
- 检查所有商品的库存。
- 计算最终价格。
- 扣款。
- 更新商品目录。
我们将为代理分配生成单元测试用例、提供模拟实现和执行测试的任务,以确保测试成功。
我们将打开特定的工作区文件夹,您会注意到,我们现在也可以使用 @ 符号来引用该文件。例如,我们可以执行以下操作:

系统会显示一些有关此文件的说明:

我们可以通过提示让它生成更好的可视化图表:
Can you visually show this class for better understanding

我的下一步是生成单元测试,并让代理对其进行测试。我输入了以下提示:
generate unit tests for this module and test it out with mock implementations.
它生成了以下任务制品,并开始执行任务。

您还可以查看其运行的测试的详细信息:

它生成的文件之一也是测试文件。其屏幕截图如下所示:

尝试以下任务
使用您自己的代码,看看您可以让智能体做些什么,从添加更多功能到重构部分代码,应有尽有。
9. 恭喜
恭喜,您已成功安装 Antigravity(以代理为先的开发平台),并了解了如何使用它。我们尝试的不同用例应该有助于您了解自己的需求,并探索 Antigravity 如何与您合作来完成这些需求。
参考文档
- 官方网站:https://antigravity.google/
- 文档:https://antigravity.google/docs
- 使用情形:https://antigravity.google/use-cases
- 下载:https://antigravity.google/download
- Google Antigravity 的 YouTube 频道:https://www.youtube.com/@googleantigravity