Google Antigravity 中文使用教程

一、简介

在此教程中,您将了解 Google Antigravity(在本文档的其余部分中称为 Antigravity),这是一个以智能体为主的开发平台,可将 IDE 发展为以智能体为主的时代。 与仅自动补全代码行的标准编码助理不同,Antigravity 提供了一个“任务控制中心”,用于管理自主代理,这些代理可以规划、编码,甚至浏览网页来帮助您构建。 Antigravity 是一款“以智能体为主”的平台。它预设 AI 不仅是编写代码的工具,而且是能够规划、执行、验证和迭代复杂工程任务的自主行动者,几乎无需人工干预。

如果只想了解下怎么注册和登录Antigravity,可以看这一文《Antigravity注册和登录教程

学习内容

  • 安装和配置 Antigravity

  • 探索 Antigravity 的关键概念,例如代理管理器、编辑器、浏览器等

  • 探索 Antigravity 的几个使用场景

所需条件

目前,Antigravity 仅面向个人 Gmail 账号提供预览版。它还提供免费配额,供您使用顶级模型。 Antigravity 需要在您的系统上本地安装。该产品适用于 Mac、Windows 和特定 Linux 发行版。除了您自己的机器之外,您还需要以下设备:

  • Chrome 网络浏览器

  • Gmail 账号(个人 Gmail 账号)。

此 Codelab 专为各种水平(包括初级)的用户和开发者而设计。

报告问题

在学习此 Codelab 并使用 Antigravity 时,您可能会遇到问题。 如果遇到与 Codelab 相关的问题(错别字、说明错误),请点击此 Codelab 左下角的 Report a mistake 按钮提交 bug: b06b582bcd847f6dpng

如需报告与 Antigravity 相关的 bug 或提出与 Antigravity 相关的功能请求,请在 Antigravity 中报告问题。您可以在代理管理器中执行此操作,只需点击左下角的 Provide Feedback 链接即可: 281ac826fb44d427png

您还可以通过个人资料图标下方的 Report Issue 链接前往编辑器: e8afd782a8f92129png

二. 安装

我们先从安装 Antigravity 开始。目前,该产品处于预览阶段,您可以使用个人 Gmail 账号开始使用。

前往下载页面,然后点击适合您情况的相应操作系统版本。启动应用安装程序,并在您的计算机上安装该应用。安装完成后,启动 Antigravity 应用。

29fada39721093cpng

关键步骤:

  • Choose setup flow: 导入设置或重新开始。

  • Editor theme: 选择深色或浅色主题。

  • 终端执行政策:

    • Off: 不自动执行。

    • Auto: 代理决定并请求许可。

    • Turbo: 始终自动执行。

  • 查看政策:

    • Always Proceed: 不请求评价。

    • Agent Decides: 代理决定何时请求。

    • Request Review: 始终要求审核。

建议选择 代理辅助开发 模式以平衡效率与安全性。

三. Agent Manager(任务管理中心)

我们已准备好开始!

Antigravity 基于开源 Visual Studio Code (VS Code) 基础,但从根本上改变了用户体验,将代理管理置于文本编辑之上。界面分为两个不同的主窗口:EditorAgent Manager。这种关注点分离反映了个人贡献与工程管理之间的区别。

Agent Manager:任务管理中心

启动 Antigravity 后,用户通常不会看到文件树,而是看到代理管理器,如下所示:

image

此界面充当 Mission Control 信息中心。它专为高级编排而设计,可让开发者生成、监控和交互多个在不同工作区或任务中异步运行的代理。

在此视图中,开发者充当架构师。它们定义了高级目标,例如:

  • 重构身份验证模块

  • 更新依赖树

  • 为结算 API 生成测试套件

如上图所示,每个请求都会生成一个专用代理实例。界面会直观呈现这些并行工作流,显示每个代理的状态、它们生成的制品(计划、结果、差异)以及任何待人工审批的请求。

此架构解决了之前 IDE 的一个主要限制,即之前 IDE 更像聊天机器人,是线性且同步的。在传统的聊天界面中,开发者必须等待 AI 完成代码生成,然后才能提出下一个问题。在 Antigravity 的管理器视图中,开发者可以同时调度 5 个不同的代理来处理 5 个不同的 bug,从而有效提高吞吐量。

如果您点击上方的 Next,可以选择打开工作区。

image

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

完成此步骤后,您将进入代理管理器窗口,如下所示:

image

您会注意到,应用会立即调整为在所选的工作区文件夹 (my-agy-projects) 中开始新对话。您可以利用自己在使用其他 AI 应用(Cursor、Gemini CLI)时积累的经验,并使用 @ 和其他方式在提示中添加更多上下文。

请务必查看 PlanningModel Selection 下拉菜单。您可以在“模型选择”下拉菜单中选择目前可供客服人员使用的模型。该列表如下所示:

image

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

image

我们来看看文档对此有何说明:

  • Planning:智能体可以在执行任务之前进行规划。适用于深度研究、复杂任务或协作工作。在此模式下,代理会按任务组组织工作、生成制品,并采取其他步骤来彻底研究、仔细思考和规划工作,以实现最佳质量。您会在此处看到更多输出。

  • Fast:代理将直接执行任务。适用于可以更快完成的简单任务,例如重命名变量、启动一些 Bash 命令或其他较小的本地化任务。如果速度是重要因素,并且任务足够简单,无需担心质量下降,那么这种方法就很有用。

如果您熟悉代理中的思考预算和类似术语,可以将此功能视为能够控制代理的思考,从而直接影响思考预算。我们暂时使用默认设置,但请注意,在发布时,Gemini 3 Pro 模型会根据有限的配额向所有人提供,因此如果您已用完 Gemini 3 的免费配额,系统会显示相应的消息。

现在,我们花点时间了解一下这里的 Agent Manager(窗口),并了解一些事项,以便清楚了解基本构建块、如何在 Antigravity 中导航等。代理管理器窗口如下所示:

image

请参阅上图中的编号:

  • Inbox:您可以将此功能视为在一个位置跟踪所有对话的方式。当您派代理执行任务时,这些任务会显示在收件箱中,您可以点击收件箱来获取所有当前对话的列表。点按任何对话都会显示所有已交换的消息、任务状态、代理生成的内容,甚至还会显示代理是否在等待您批准任务。这样一来,您就可以稍后返回之前正在处理的任务。一项非常实用的功能。

  • Start Conversation:点击此图标即可开始新的对话。这样可以直接找到显示 Ask anything 的输入源。

  • Workspaces:我们提到了工作区,并说明了您可以在任意工作区中工作。您可以随时添加更多工作区,并且可以在开始对话时选择任何工作区。

  • Playground:这是一种很棒的方式,您只需与代理开始对话,然后就可以根据需要将对话转换为工作区,以便更严格地控制文件等。您可以将此功能视为草稿区。

  • Editor View:到目前为止,我们位于代理管理器视图中。如果您愿意,可以随时切换到编辑器视图。这会显示您的工作区文件夹和所有生成的文件。您可以直接在其中修改文件,甚至在编辑器中提供内嵌指南/命令,以便代理根据您修改后的建议/说明执行某些操作或进行更改。我们将在后面的部分详细介绍编辑器视图。

  • Browser:最后,我们来谈谈 Antigravity 的一个明显优势,那就是它与 Chrome 浏览器的紧密集成。让我们开始下一部分,在其中设置浏览器。

四. Antigravity 浏览器

根据文档,当代理想要与浏览器互动时,它会调用浏览器子代理来处理手头的任务。浏览器子代理运行的是专门用于在 Antigravity 管理的浏览器中打开的网页上运行的模型,这与您为主代理选择的模型不同。

此子代理可以访问控制浏览器所需的各种工具,包括点击、滚动、输入、读取控制台日志等。它还可以通过 DOM 捕获、屏幕截图或 Markdown 解析来读取您打开的网页,以及拍摄视频。

这意味着我们需要启动并安装 Antigravity 浏览器扩展程序。我们来实际操作一下,在 Playground 中发起对话并完成相应步骤。

选择 Playground,然后向代理提供以下任务 go to antigravity.google,如下所示:

51a373d3da23db56png

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

e7119f40e093afd2png

系统会打开浏览器并显示一条 message,提示您安装扩展程序,如下所示:

9a5a43c17980e46cpng

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

f3468f0e5f3bb075png

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

7f0367e00ac36d5apng

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

b9d89e1ebefcfd76png

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

77fcc38b5fb4ca7cpng

五. Artifacts

Antigravity 在规划和完成工作时会创建Artifact,以便传达其工作内容并从人类用户那里获得反馈。这些文件包括富 Markdown 文件、架构图、图片、浏览器录制内容、代码差异等。

Artifact可解决*“信任缺口”*。当客服人员声称“我已修复此 bug”时,开发者之前必须读取代码才能进行验证。在 Antigravity 中,代理会生成一个Artifact来证明这一点。

以下是 Antigravity 生成的主要Artifacts:

  • Task Lists:在编写代码之前,代理会生成结构化方案。您通常不需要修改此计划,但可以查看该计划,并在必要时添加注释来更改该计划。

  • Implementation Plan:用于在代码库中设计变更以完成任务。这些计划包含有关需要进行哪些修订的技术细节,并且旨在供用户查看,除非您已将制品审核政策设置为“始终继续”。

  • Walkthrough:此文件在代理完成任务实现后创建,用于总结更改并说明如何测试这些更改。

  • Code diffs:虽然从技术上讲不是Artifact,但 Antigravity 也会生成代码差异,供您查看和添加注释。

  • Screenshots:代理会捕获更改前后的界面状态。

  • Browser Recordings:对于动态互动(例如,“点击登录按钮,等待微调器,验证信息中心是否加载”),代理会录制会话视频。开发者可以观看此视频,验证功能要求是否得到满足,而无需自行运行应用。

工件会生成并显示在代理管理器视图和编辑器视图中。

在编辑器视图中,您可以点击右下角的 Artifacts

5deff47fe0a93aa1png

在代理管理器视图中,您应该能够在右上角看到 Review changes 旁边的制品切换按钮;如果该按钮处于开启状态,您可以看到生成的Artifact列表:

5320f447471c43ebpng

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

19d9738bb3c7c0c9png

您可以在编辑器视图的 Review Changes 中查看代码差异:

e1d8fd6e7df4daf3png

开发者可以使用“Google 文档风格的评论”与这些制品和代码差异进行互动。您可以选择特定操作或任务,以您希望的方式提供命令,然后将其提交给代理。然后,智能体将接收此反馈并相应地进行迭代。考虑使用交互式 Google 文档,您可以在其中向作者提供反馈,然后作者根据反馈进行迭代。

六. 重新检查收件箱

如果您已与代理进行过几次对话,现在应查看 Agent Manager 窗口中的 Inbox 。这样一来,您就可以看到所有对话了。点击任意对话即可查看该对话的历史记录、生成的Artifacts等。在我们的示例中,在运行第一个对话后,收件箱中会显示列出的对话,如下所示:

1a2a1bbdd4464ecfpng

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

b7e493765cfb1b1apng

您也可以从此处继续对话。

七. 编辑器

该编辑器保留了 VS Code 的熟悉感,确保经验丰富的开发者的肌肉记忆得到尊重。它包括标准文件浏览器、语法突出显示和扩展程序生态系统。

您可以点击代理管理器右上角的 Open Editor 按钮前往编辑器。

设置和扩展程序

在典型设置中,您会看到编辑器、终端和代理:

7996408528de93e1png

如果不是这种情况,您可以按如下方式切换终端和代理面板:

  • 如需切换终端面板,请使用 Ctrl + `` 快捷键。

  • 如需切换代理面板,请使用 Cmd + L 快捷键。

此外,Antigravity 可以在设置期间安装一些扩展程序,但根据您使用的编程语言,您可能需要安装更多扩展程序。例如,对于 Python 开发,您可以选择安装以下扩展程序:

bd33a79837b5a12apng

编辑器

自动补全

当您在编辑器中输入代码时,系统会启动智能自动补全功能,您只需按 Tab 键即可使用:

e90825ed7a009350png

按 Tab 键即可导入

系统会显示导入标签页建议,提示您添加缺失的依赖项:

bcab60794caa0aecpng

按 Tab 键即可跳转

您会获得按 Tab 键跳转建议,以便将光标移至代码中的下一个逻辑位置:

8610ae5217be7fe5png

命令

您可以在编辑器或终端中使用 Cmd + I 触发命令,以使用自然语言进行内嵌补全。

在编辑器中,您可以要求提供一种计算斐波那契数的方法,然后接受或拒绝该方法:

13a615e515cea100png

在终端中,您可以获取终端命令建议:

5a75e560f998cedcpng

代理侧边栏

在编辑器中,您可以通过多种方式切换代理侧边栏。

手动打开

您可以使用 Cmd + L 快捷键手动切换右侧的代理面板。

您可以开始提问,使用 @ 添加更多上下文信息(例如文件、目录、MCP 服务器),或使用 / 引用工作流(已保存的提示):

95c5a6d31d771748png

您还可以选择以下两种对话模式:FastPlanning

d3d1449f12510e3epng

Fast 适用于快速任务,而 Planning 适用于更复杂的任务,在这种情况下,代理会制定您可以批准的方案。

您还可以为对话选择不同的模型:

af709bcc03c1e21epng

解释并修正

触发代理的另一种方法是将鼠标悬停在问题上,然后选择 Explain and fix

e45cbe02ed76b9c1png

向代理发送问题

您还可以前往 Problems 部分,然后选择 Send all to Agent,让代理尝试解决这些问题:

e4992d14708005d0png

将终端输出发送给代理

您甚至可以选择终端输出的一部分,然后使用 Cmd + L 将其发送给代理:

c40293bab474c9b1png

在编辑器和代理管理器之间切换

在编辑器模式下,您可以随时通过右上角的 Open Agent Manager 按钮在编辑器模式和完整代理管理器模式之间切换;在代理管理器模式下,您可以点击右上角的 Open Editor 按钮返回编辑器模式。

或者,您也可以使用 Cmd + E 键盘快捷键在这两种模式之间切换。

八. 提供反馈意见

Antigravity 的核心功能是在体验的每个阶段轻松收集您的反馈。当智能体处理任务时,会在此过程中创建不同的Artifacts:

  • 实施计划和任务列表(编码前)

  • 代码差异(在生成代码时)

  • 验证结果(编码后)的演练

这些Artifacts是 Antigravity 传达其计划和进度的途径。更重要的是,您还可以通过 Google 文档样式的评论向代理提供反馈。这对于有效地引导智能体朝着您期望的方向发展非常有用。

我们来尝试构建一个简单的待办事项列表应用,看看如何在此过程中向 Antigravity 提供反馈。

规划模式

首先,您需要确保 Antigravity 处于 Planning 模式(而非 Fast 模式)。您可以在代理侧边栏聊天中选择此模式。这样可确保 Antigravity 在开始编写代码之前制定实现方案 and 任务列表。然后,尝试使用如下提示:Create a todo list web app using Python。这会触发代理开始规划并生成实施方案。

实施计划

实施方案概述了 Antigravity 打算执行的操作、将使用的技术堆栈以及建议的更改的高级说明。

Implementation Plan - Python Todo AppGoalCreate a simple, functional, and aesthetically pleasing Todo List web application using Python (Flask).Tech StackBackend: Python with FlaskFrontend: HTML5, CSS3 (Vanilla), Jinja2 templates...

您还可以在此处提供反馈。在本例中,代理希望使用 Flask 作为 Python Web 框架。我们可以向实施计划添加注释,以改用 FastAPI。添加评论后,您可以提交评论,也可以要求 Antigravity Proceed 包含更新后的实施方案。

任务列表

更新实施计划后,Antigravity 会创建任务列表。这是 Antigravity 将遵循的创建和验证应用的具体步骤列表。

Task Plan Create requirements.txt Create directory structure (static/css, templates) Create static/css/style.css Create templates/index.html Create main.py with FastAPI setup and Database logic Verify application

这是您可以提供反馈的第二个位置。

例如,在我们的使用情形中,您可以通过添加以下注释来添加更详细的验证说明:Verify application by adding, editing, and deleting a todo item and taking a screenshot.

Warning: 在处理反馈时,请注意以下几点:

  1. 每当您向方案或任务添加评论时,请务必记得提交评论。这会触发 Antigravity 更新其方案。

  2. 有时,Antigravity 会在制定实现方案和任务列表后直接开始编码,而不会等待您确认。在这种情况下,您仍然可以对方案/任务发表评论,然后重新提交。之后,我们会更新代码和演练。您还可以停止编码任务、向方案/任务添加注释,然后重试。

代码更改

此时,Antigravity 将在新文件中生成一些代码。您可以在代理聊天侧边栏中Accept allReject all这些更改,而无需查看详细信息。

您还可以点击 Review changes 查看更改的详细信息,并添加有关代码的详细注释。例如,我们可以在 main.py 中添加以下注释:Add basic comments to all methods

这是使用 Antigravity 迭代代码的好方法。

演示

Antigravity 完成编码后,会启动服务器,打开浏览器以验证应用。它会进行一些手动测试,例如添加任务、更新任务等。这一切都要归功于 Antigravity 浏览器扩展程序。最后,它会创建一个演示文件,总结其验证应用所执行的操作。这包括屏幕截图或包含浏览器录制的验证流程。

您还可以在演练中对屏幕截图或浏览器录制内容发表评论。例如,我们可以添加评论 Change the blue theme to orange theme 并提交。提交注释后,Antigravity 会进行更改、验证结果并更新演练

撤消更改

最后但同样重要的是,在完成每个步骤后,如果您对所做的更改不满意,可以选择在对话中撤消更改。只需在聊天中选择 ↩️ Undo changes up to this point 即可。

九. 规则和工作流

Antigravity 提供了多种自定义选项:规则工作流

点击右上角的 ...,然后选择 Customizations,您会看到 RulesWorkflows

ff8babd8d8bcfa83png

规则有助于引导代理的行为。您可以提供这些指导原则,以确保智能体在生成代码和测试时遵循这些原则。例如,您可能希望代理遵循特定的代码样式,或者始终记录方法。您可以将这些内容添加为规则,然后代理会将其纳入考虑范围。

工作流程是已保存的提示,您可以在与代理互动时使用 / 按需触发。它们还会引导代理的行为,但由用户按需触发。

一个很好的类比是,规则更像是系统指令,而工作流更像是您可以根据需要选择的已保存提示。

规则工作流都可以全局应用或按工作区应用,并保存到以下位置:

  • 全局规则:~/.gemini/GEMINI.md

  • 全局工作流:~/.gemini/antigravity/global_workflows/global-workflow.md

  • 工作区规则:your-workspace/.agent/rules/

  • 工作区工作流:your-workspace/.agent/workflows/

我们来在工作区中添加一些规则 and 工作流。

添加规则

首先,我们来添加一个代码样式规则。前往 Rules,然后选择 +Workspace 按钮。为其指定一个名称,例如 code-style-guide,并遵循以下代码样式规则:

* Make sure all the code is styled with PEP 8 style guide
* Make sure all the code is properly commented

其次,我们再添加一条规则,以确保代码以模块化方式生成,并在 code-generation-guide 规则中提供示例:

* The main method in main.py is the entry point to showcase functionality.
* Do not generate code in the main method. Instead generate distinct functionality in a new file (eg. feature_x.py)
* Then, generate example code to show the new functionality in a new method in main.py (eg. example_feature_x) and simply call that method from the main method.

这两条规则已保存并可供使用:

bfd179dfef6b2355png

添加工作流

我们再定义一个用于生成单元测试的工作流。这样一来,我们就可以在对代码感到满意时触发单元测试(而不是让代理一直生成单元测试)。

前往 Workflows,然后选择 +Workspace 按钮。为其指定一个名称,例如 generate-unit-tests,并包含以下内容:

* Generate unit tests for each file and each method
* Make sure the unit tests are named similar to files but with test_ prefix

工作流也已准备就绪,可以开始运行:

d22059258592f0e1png

试试看

现在,我们来看看规则和工作流的实际应用。在工作区中创建框架 main.py 文件:

def main():
    pass

if __name__ == "__main__":
    main()

现在,前往代理聊天窗口,向代理提问:Implement binary search and bubble sort.

过了一两分钟后,您应该会在工作区中看到三个文件:main.pybubble_sort.pybinary_search.py。您还会注意到,所有规则都已实现:主文件不会杂乱无章,并且包含示例代码;每项功能都在各自的文件中实现;所有代码都有文档记录,并且风格良好:

from binary_search import binary_search, binary_search_recursive
from bubble_sort import bubble_sort, bubble_sort_descending


def example_binary_search():
    """
    Demonstrate binary search algorithm with various test cases.
    """
    ...

def example_bubble_sort():
    """
    Demonstrate bubble sort algorithm with various test cases.
    """
    ...

def main():
    """
    Main entry point to showcase functionality.
    """
    example_binary_search()
    example_bubble_sort()
    print("\n" + "=" * 60)


if __name__ == "__main__":
    main()

现在,我们对代码感到满意,接下来看看是否可以触发生成单元测试工作流。

前往聊天界面,开始输入 /generate,Antigravity 已经了解我们的工作流程:

8a3efd9e3be7eb6fpng

选择 generate-unit-tests,然后按 Enter 键。几秒钟后,您会在工作区中看到新文件:test_binary_search.pytest_bubble_sort.py,其中已实现多项测试!

11febd7940ef8199png

很好!

十. 代理安全限制

向 AI 智能体授予对终端和浏览器的访问权限是一把双刃剑。它支持自主调试和部署,但也为提示注入和数据渗出打开了通道。

Antigravity 通过围绕终端命令自动执行政策、允许列表和拒绝列表的细化权限系统来解决此问题。

首次配置 Antigravity 时,或通过设置菜单配置时,您必须选择一项Terminal Command Auto Execution政策。此设置决定了代理在执行 shell 命令方面的自主性。

您可以前往 Antigravity — Settings,然后前往 Advanced Settings,查看您当前的相应设置。您应该会看到“代理”设置的 Terminal 部分。如果您想将此设置更改为其他值,请参考下表:

政策模式

说明

关闭

除非明确允许,否则代理绝不会自动执行终端命令。

自动

代理会根据内部安全模型决定是否执行。它会请求获得风险较高的命令的权限。

增强型

除非明确拒绝,否则代理始终会自动执行命令。

配置许可名单

许可名单主要与关闭政策搭配使用。它代表一种积极的安全模型,意味着除非明确允许,否则一切都被禁止。这是最安全的配置。

分步配置

  • 将终端命令自动执行设置设为关闭。

  • 点击允许列表终端命令旁边的添加按钮,在其中添加以下命令:ls -al。您也可以根据需要添加其他终端命令。

测试许可名单

  • 向智能体提问:List the files in this directory

  • 代理会自动运行 ls

  • 向代理提问:Delete the <some file>

  • 代理会尝试 rm <filepath>,但 Antigravity 会阻止该操作并强制进行用户审核,因为 rm 不在许可名单中。在运行该命令之前,Antigravity 应该会询问您是否授予权限。

注意:您可能需要重启 Antigravity 才能使许可名单生效。

配置拒绝名单

拒绝名单是“Turbo”(有时是“自动”)政策的保障措施。它代表一种负面安全模型,即除非明确禁止,否则允许所有操作。这依赖于开发者预测每种可能的危险,虽然风险很大,但可提供最快的速度。

分步配置

  • 将终端命令自动执行设置设为极速。

  • 点击旁边的添加按钮,在拒绝列表终端命令中添加以下命令。

  • rm

  • rmdir

  • sudo

  • curl

  • wget

测试拒绝名单

  • 向智能体提问:Check the version of python

  • 代理会自动运行 python --version

  • 向代理提出问题:Download www.google.com home page

  • 代理尝试 curl。Antigravity 会检测到拒绝列表中的 curl 并阻止执行,同时提示您进行手动批准。

注意:您可能需要重启 Antigravity 才能使拒绝列表生效。

浏览器安全性

Antigravity 能够浏览网页是一项超能力,但也是一个漏洞。访问遭入侵的文档网站的代理可能会遇到提示注入攻击。

为防止出现这种情况,您可以为浏览器代理实现浏览器网址许可名单。

您可以前往 Antigravity — Settings,然后前往 Advanced Settings,查看此功能的当前设置。您应该会看到“浏览器网址许可名单”部分,如下所示:

5ed231150122ecc5png

点击“打开许可名单文件”,系统会在文件夹 HOME/.gemini/antigravity/browserAllowlist.txt. 中打开该文件。您可以在此处确保只输入受信任的网域。

十一. 使用场景

现在,我们已经对该产品有了基本的了解,接下来,让我们深入了解几个使用场景,看看它的实际应用。请注意,Antigravity 是一个以智能体为主的平台。这意味着,在大多数情况下,我们只是向代理发出指令,然后代理会自行完成任务、在需要时请求权限、生成Artifacts,并在任务完成后通知我们。因此,我们无法在以下每种使用情形中生成代理对话的每个输出。我们会分享说明和一些必要的结果预期屏幕截图,但您的结果可能会略有不同。

我们将介绍的应用场景包括:自动执行与外部网站相关的少量任务、为项目生成和验证单元测试用例,以及完整的网站开发。出发吧。

新闻摘要

这是一个简单的使用情形,但您可以基于此情形使用 Web 浏览器访问网站、提取信息、执行一些操作,然后将数据返回给用户。

在这种情况下,我们将访问 Google 新闻网站并从中提取一些信息。不过,您可以轻松地选择一个网站进行实验,看看效果如何。

确保您位于 Agent Manager 中,并已选择 Playground,如下所示:

cffa12c98a68cb6cpng

然后,给出以下指令:

8513d489eea0b014png

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

9d594588f2ffe6bcpng

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

dc6cf4e7d8425df8png

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

fb7397cd2cce0682png

请注意,左侧是“思路”,您还可以滚动浏览各个点,查看播放情况和其他数据。

尝试以下任务

  • 了解这一点后,选择一个可访问的网站,您希望代理前往该网站并从中获取/总结一些数据。考虑某个您知道包含信息中心和图表的网站,并让 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. 

您可以先给出上述提示,开始对话:

当代理执行任务时,它会继续创建工件:

  • 任务制品

  • 实现工件

  • 演示Artifacts

以下任务Artifacts是代理根据分配给它的任务破译出的初始任务序列。执行后的示例屏幕截图如下所示:

c95d82e1c040698fpng

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

632169a236bc62ccpng

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

e3f6152d6f54d4f9png

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

abf879f2ce53d055png

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

b0fea8aa65c3a1c5png

现在,假设我们要为活动添加更多讲座。我们可以留在编辑器和代理面板中,然后发出类似 Add two more talks to the schedule 的指令。

这样一来,智能体就会分析要求、更新任务和实施方案,然后验证更新后的功能。以下是对话示例:

ba8455e6f68973e9png

如果您愿意,可以切换回代理管理器。此流程应有助于您了解从代理管理器切换到编辑器、相应地进行更改等过程。

注意:执行此任务时,代理尝试在当前机器上正在使用的端口 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.

请注意,它会先创建任务列表 and 实施方案,然后再执行这些方案。请继续关注流程,在某些情况下,系统可能会提示您进行检查。运行示例见下文。

5be0a668e5a67d85png

在这种情况下,它还应启动 Antigravity 浏览器,执行自己的测试,然后确认测试成功。它生成的内容之一是包含验证视频的媒体制品。这样可以清楚地了解测试内容。我还建议进行一些样式更改,因为这些更改未生效,但系统能够执行这些更改。

最终的应用如下图所示,效果相当不错。

c9ab6bca97a51a8cpng

我们可以在应用中添加一个漂亮的计时器图片。我们只需发出如下后续指令:

Add an image to the application that displays a timer.

这导致代理向任务制品添加了一个新任务:

498dd946d4e9ae55png

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

c291da9bdb37ff96png

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

de8f418ba8e4600dpng

尝试以下任务

  • 请注意,应用中沙漏图标的背景不是透明的。您可以尝试让代理将此内容设为透明。

  • 尝试生成您想要的任何申请的几种变体。尝试不同的样式和图片,要求进行更改等。

生成单元测试、模拟桩和验证测试

我们将在此处尝试的最后一个使用情形是,为我们拥有的特定代码文件生成单元测试,并让代理执行测试并验证测试结果。

为此,我们将创建一个包含单个 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 函数中具有以下关键功能:

  1. 验证购物车是否不为空。

  2. 检查所有商品的库存。

  3. 计算最终价格。

  4. 扣款。

  5. 更新商品目录。

我们将为代理分配生成单元测试用例、提供模拟实现和执行测试的任务,以确保测试成功。

我们将打开特定的工作区文件夹,您会注意到,我们现在也可以使用 @ 符号来引用文件。例如,我们可以执行以下操作:

8368856e51a7561apng

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

b69c217d3372d802png

我们可以通过提示让它生成更好的可视化图表:

Can you visually show this class for better understanding

da5bd701323818d4png

下一步是生成单元测试,并让代理进行测试。我输入了以下提示:

generate unit tests for this module and test it out with mock implementations.

它生成了以下任务制品,并开始执行任务。

21425379db336dc6png

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

48f3320cd76b5cd8png

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

8ee68905942825dpng

尝试以下任务

使用您自己的代码,看看您可以让智能体做些什么,从添加更多功能到重构部分代码,应有尽有。

License:  CC BY 4.0

©2025 AI全书. Some rights reserved.

    备案号: 浙ICP备06043869号-8