面向开发者的 Gemini Code Assist(以前称为 Duet AI)导览

1. 简介

在本实验中,您将使用 Gemini Code Assist(原 Duet AI for Developers),它是 Google Cloud 中依托 AI 技术的协作工具。您将学习如何使用 Gemini Chat 和内嵌代码助理来生成代码、理解代码等。

实践内容…

  • 您将使用 Cloud Shell IDE 下载某个 Web 应用的现有代码模板。
  • 您将使用 Cloud Shell IDE 中的 Gemini Chat 来询问有关 Google Cloud 的常见问题。
  • 您将使用 Cloud Shell IDE 中的 Gemini Code Assist 内嵌代码助理来生成、汇总和补全代码。

学习内容…

  • 如何使用 Gemini Code Assist 执行多项开发者任务,例如代码生成、代码补全和代码总结。
  • 如何使用 Cloud 专用 Gemini 了解 Google Cloud。

所需条件…

  • Chrome 网络浏览器
  • Gmail 账号
  • 启用了结算功能的 Cloud 项目
  • 已为您的 Cloud 项目启用 Gemini Code Assist

本实验的适用对象为各种水平的开发者,包括新手。虽然示例应用使用的是 Python 语言,但您无需熟悉 Python 编程就能理解代码内容。我们的重点是让开发者熟悉 Gemini Code Assist 的功能。

2. 设置

本部分涵盖了开始此实验所需执行的所有操作。

在 Google Cloud 项目中启用 Gemini for Cloud

现在,我们将在 Google Cloud 项目中启用 Gemini for Cloud。请按下面给出的步骤操作:

  1. 访问 https://console.cloud.google.com,并确保您已选择计划用于本实验的 Google Cloud 项目。点击显示在右上角的“打开 Gemini”图标。

28f084ec1e159938

  1. 云端专用 Gemini 聊天窗口会在控制台右侧打开。点击“启用”按钮,如下所示。如果您没有看到启用按钮,而是看到了 Chat 界面,可能是因为您已经为项目启用了 Gemini for Cloud,可以直接执行下一步。

e8df9adc4ea43a37.png

  1. 启用 Gemini for Cloud 后,您可以向其发出一两句查询来测试一下。下方显示了几个查询示例,不过您可以尝试诸如 What is Cloud Run? 之类的查询

9859ea86a8310cb.png

Cloud 专用 Gemini 会回答您的问题。你可以点击右上角的 f68286b2b2ea5c0a.png 图标关闭“云端专用 Gemini”聊天窗口。

在 Cloud Shell IDE 中启用 Gemini Code Assist

在此 Codelab 的其余部分,我们将使用 Cloud Shell IDE,这是一个基于 Code OSS 的全代管式开发环境。我们需要在 Cloud Shell IDE 中启用和配置代码助理,相关步骤如下所示:

  1. 访问 ide.cloud.google.com。IDE 可能需要一段时间才能显示,请耐心等待。
  2. 如图所示,点击底部状态栏中的 Cloud Code - 登录按钮。按照说明对插件进行授权。如果您在状态栏中看到 Cloud Code - no project,请选择该选项,然后从项目列表中选择您打算使用的 Google Cloud 项目。

6f5ce865fc7a3ef5

  1. 如图所示,点击右下角的 Gemini 按钮,然后最后一次选择正确的 Google Cloud 项目。如果系统要求您启用 Cloud AI Companion API,请启用该功能,然后继续操作。
  2. 选择 Google Cloud 项目后,请确保您能够在状态栏的 Cloud Code 状态消息中看到该信息,并且在右侧状态栏中看到代码助手,如下所示:

709e6c8248ac7d88

Gemini Code Assist 现在可以使用了!

可选:如果您没有在右下角的状态栏中看到 Gemini,则需要在 Cloud Code 中启用 Gemini。在执行此操作之前,请确保已在 IDE 中启用 Gemini,方法是前往 Cloud Code 扩展程序 → 设置,然后输入文本 Gemini,如下所示。确保选中此复选框。您应重新加载 IDE。这将启用 Cloud Code 中的 Gemini,并且 IDE 中会显示状态栏中的 Gemini 图标。

228c9c9c6b956c8e

3. 创建示例应用

我们将创建一个示例应用(一个 Python Flask 应用),用于探索 Gemini Code Assist 的功能。

请按照以下步骤操作:

  1. 点击下方状态栏中的 Google Cloud 项目名称

f151759c156c124e.png

  1. 系统会显示一个选项列表。点击下方列表中的新应用

91ea9836f38b7f74

  1. 选择 Cloud Run 应用。
  2. 选择 Python (Flask): Cloud Run 应用模板。
  3. 将新应用保存到首选位置。
  4. 系统会显示一条通知,确认已创建应用,并打开一个新窗口,其中加载了您的应用,如下所示。系统会打开一个 README.md 文件。您可以暂时关闭该视图。

aaa3725b17ce27cf.png

4. 与 Gemini 对话

首先,我们来学习如何与 Gemini 对话。Gemini 作为聊天助理在 Cloud Shell IDE 中提供,它是 VS Code 中 Cloud Code 扩展程序的一部分。点击左侧导航栏中的“Gemini”按钮即可打开 Gemini。在左侧导航工具栏中找到 Gemini 图标 a489f98a34898727.png,然后点击该图标。

系统随即会在 Cloud Shell IDE 中打开“聊天:GeminiI”窗格,您可以与 Gemini 聊天以获取 Google Cloud 方面的帮助。

14ad103efaa0ddaa

让我们在 Gemini 对话窗格中输入问题并查看 Gemini 的回答。输入以下提示:

What is Cloud Run? 

Gemini 应该会在回答中提供有关 Cloud Run 的详细信息。提示是描述您所需要的帮助的问题或陈述。提示可以包含现有代码中的上下文,Google Cloud 会分析这些上下文,以提供更实用或更完整的回答。如需详细了解如何撰写提示以生成优质回答,请参阅针对 Google Cloud 中的 Gemini 撰写更好的提示

您可以尝试使用以下示例提示或您自己的提示,来询问有关 Google Cloud 的问题:

  • What is the difference between Cloud Run and Cloud Functions?
  • What services are available on Google Cloud to run containerized workloads?
  • What are the best practices to optimize costs while working with Google Cloud Storage?

请注意顶部的垃圾箱图标,您可以通过此图标重置代码助理聊天记录的上下文。另请注意,此聊天互动与您在 IDE 中处理的文件相关。

5. 代码说明

为了在最大限度地减少上下文切换的同时提高工作效率,Gemini Code Assist 直接在代码编辑器中提供 AI 赋能的智能操作。在代码编辑器中选择代码时,您可以查看与上下文相关的操作列表,并从中进行选择。

您可以使用 Gemini Code Assist 来帮助理解应用代码的各个部分。返回我们在上一步中创建的应用,您可以使用 Gemini Code Assist 解释 IDE 中提供的文件和代码。

  1. 如果看不到这些文件,请在 IDE 活动栏中点击探索器 (Code OSS“Explorer”(探索器)菜单)。
  2. 在“探索器”窗格中,选择 Dockerfile
  3. 你可以选择文件内容的任意部分,点击灯泡 ( Code OSS Duet AI 灯泡),然后点击 Gemini: Explain this。例如,选择以 ENTRYPOINT 开头的行,点击灯泡 ( Code OSS Duet AI 灯泡),然后点击 Gemini: Explain this。Gemini 会针对您需要详细了解的特定 Dockerfile 部分,生成自然语言的说明。Gemini 会在回答中提供有关 ENTRYPOINT 指令的详细信息。您将了解到,使用该指令,Docker 会在容器启动时运行 app.py 文件。
  4. 若要查看 app.py 文件的内容,请在活动栏中点击探索器 (Code OSS 探索器菜单),然后选择 app.py
  5. hello() 函数定义中,选择任意想要详细了解的代码行。点击灯泡图标 ( Code OSS Duet AI 灯泡),然后点击 Gemini : Explain this。在我们的示例中,我们选择了以下两行代码,然后触发了 Gemini: Explain this 操作。

14d9c56af016b65d.png

  1. Gemini 会在回答中详细说明这两个 Cloud Run 环境变量 (K_SERVICE, K_REVISION) 以及它们在应用代码中的使用方式。请注意,Gemini 凭借对 Google Cloud 和 Cloud Run 等服务的了解,不仅解释了 Python 代码,还给出了这些变量在 Cloud Run 中的上下文含义。

尝试使用以下其他方式获取代码说明:

  1. app.py 保留为 IDE 中当前打开的文件。在 VS Code 中,进入左侧导航栏中的 Gemini 聊天窗格,然后输入提示 Explain this file。系统会考虑整个文件并向您解释。
  2. 你还可以选择文件的任意部分,然后在左侧的 Gemini 对话窗格中输入提示 Explain this。这样系统只会对文件的选定部分进行解释。这类似于你点击灯泡( Code OSS Duet AI 灯泡),然后点击 Gemini: Explain this
  3. 你还可以选择一段文本,然后点击 IDE 右上角的 Gemini: Smart Actions(如下所示),获取可对所选文本执行的操作列表。Explain this 操作是其中一个选项:

adeb72acd708174.png

6. 根据提示生成代码

本部分介绍了如何使用 Gemini Code Assist 通过注释生成代码。

我们来试试这些功能。请按下面给出的步骤操作:

  1. 创建名为 utils.py 的新文件。
  2. 在新代码文件中,另起一行输入 # Function to print a list of blobs in a Google Cloud Storage bucket,然后按 Enter(适用于 Windows 和 Linux)或 Return(适用于 MacOS)。Gemini 可能会尝试在你输入时生成代码,但不接受。我们将在下一步中专门触发代码生成。
  3. 如需触发代码生成,请按 Control+Enter(适用于 Windows 和 Linux)或 Control+Return(适用于 MacOS)。在 Python 文件中的提示文本旁边,Gemini Code Assist 以幽灵文本的形式生成代码。它将通过工具栏为您提供一条或多条代码建议,您可以通过工具栏从一条代码建议导航到另一条代码建议(如有多条建议)。您甚至可以通过工具栏接受任何代码建议。如果您看不到工具栏或工具栏消失了,请将鼠标悬停在生成的代码上,使其再次显示。
  4. 可选:若要接受生成的代码,请按 Tab。如果有多个建议,您可以多次按 Tab,从一个建议的代码段导航到下一个建议的代码段。

此操作会将您接受的代码插入 utils.py 文件中。示例屏幕截图如下所示。提供给您的代码可能与下方显示的代码不同。如果生成了其他方法,您可以在接受代码后删除这些方法。

d6d7915885c5e74b.png

请注意代码周围的波浪线。以下是代码引用的实际应用。如果您将鼠标悬停在任何行上,系统会显示代码出处,以及有关许可的其他相关信息。相关示例如下所示:

c7473cadcf15d887.png

然后,您可以点击 Quick Fix…选择忽略引用警告。系统将显示“Quick Fix”建议,其示例如下所示:

10f4672830954c90.png

如果您同意接受代码许可,可以选择 Ignore Citation Warning

(可选)以下是一些其他建议,您可以尝试使用这些建议生成代码:

  1. 还可以使用 Gemini 聊天功能提出相同的问题,并在聊天窗口中获得回答。然后,聊天界面会显示用于复制代码或将其插入当前文件的选项。
  2. 您可以根据需要,尝试使用您自己的提示生成示例代码。下面给出了一些建议(假设您位于其中一个 Python 文件中),或者从下面给出的一些提示中选择:
  • 编写 Python 代码以将消息发布到 Google Cloud Pub/Sub
  • 编写 Python 代码以初始化 BigQuery 客户端
  • 编写 Python 代码以将我的应用连接到 Cloud SQL

7. 在编码时获取内嵌代码建议

在您编写代码时,Gemini Code Assist 会提供内嵌代码建议,您可以选择接受或忽略这些建议。为了试用此功能,我们将修改在上一部分中创建的 utils.py 文件:

  1. 在 Cloud Shell IDE 中打开 utils.py 文件作为当前文件。
  2. 如果生成的代码中不包含 import 语句,我们可以采取的其中一项措施是提供正确的语句。
  3. 开始输入单词 import,您应该会看到 Gemini Code Assist 以幽灵文本的形式提供代码建议。如需接受 Gemini Code Assist 提供的代码建议,请按 Tab。否则,若要忽略建议,请按 Esc 或继续编写代码。在下面的示例屏幕中,系统建议导入 storage 类,因为代码正在使用该类。按 Tab 键可接受代码建议。系统还建议了 import os 语句,但由于不需要它,我们可以将其移除。

cb3dfff74172959d.png

  1. 前往 utils.py 文件的末尾,并添加用于调用该函数的代码行(如果未提供该行)。在这个例子中就是 print_blobs 函数。您只需开始输入函数名称,代码补全功能将帮助您完成语句。
  2. 您需要提供 bucket_name,并可以使用以下公共存储桶名称:gemini-codeassist-bucket。下面显示了该函数的示例调用。请注意,您可能会看到函数名称等方面的细微差异。

print_blobs(bucket_name="gemini-codeassist-bucket")

(可选)运行示例代码

由于我们编写了用于列出 Google Cloud Storage 存储桶中的 blob 的代码,因此我们需要安装 google-cloud-storage Python 库。

前往 requirements.txt 文件,然后添加一行包含 google-cloud-storage 依赖项的新代码,如下所示。示例 requirements.txt 文件如下所示。

Flask==2.3.3
requests==2.31.0
debugpy # Required for debugging.
google-cloud-storage

保存 requirements.txt 文件。

要查看代码的实际应用,我们需要通过左上角的菜单图标,从 Cloud Shell IDE 启动新的终端会话。点击菜单图标,然后点击终端 → New Terminal,如下所示:

289173c68f1addb5

在终端会话中,通过以下命令安装 Python 依赖项:

pip3 install -r requirements.txt

最后,您可以通过以下命令运行 utils.py 文件:

python utils.py

这应该会显示公共 Google Cloud Storage 存储桶中的 blob。理想情况下,您应该会在输出中看到 2 个列出的 blob(file1.txtfile2.txt)。

问题排查

如果您在显示上述公共存储桶中的对象时收到“访问”错误,可以选择创建自己的 Google Cloud Storage 存储桶,并使用该存储桶而不是 gemini-codeassist-bucket。下一部分将向您介绍如何执行此操作。

(可选)创建您自己的 Cloud Storage 存储桶

让我们借助 Gemini 提供用于创建存储分区的命令,使其可供公开访问,并将示例对象上传到存储分区中。

首先输入以下提示:What is the gcloud command to create a public bucket in Google Cloud Storage?

这应该会为您提供用于创建存储桶的 gcloud 命令。确切的命令如下所示:

gcloud storage buckets create gs://<BUCKET_NAME>

<BUCKET_NAME> 选择一个唯一的名称,然后在终端中执行该命令。

创建存储桶后,我们希望该存储桶可公开访问。让我们使用以下提示让 Gemini 提供命令来执行此操作:How do I make a google cloud storage bucket to public access?

这应该会为您提供一个 gcloud 命令,使存储桶可公开访问。回答应如下图所示:

gcloud storage buckets add-iam-policy-binding gs://<BUCKET_NAME> --member=allUsers --role=roles/storage.objectViewer

<BUCKET_NAME> 替换为您之前使用的存储桶名称,然后执行该命令。

最后,我们希望将一些示例文件上传到存储桶。在终端中执行以下命令(请务必将 <BUCKET_NAME> 变量替换为您的存储桶名称)。

touch f1.txt
touch f2.txt

gcloud storage cp f1.txt gs://<BUCKET_NAME>
gcloud storage cp f2.txt gs://<BUCKET_NAME>

您现在可以使用 <BUCKET_NAME>(而非 gemini-codeassist-bucket)执行 utils.py 文件。

清理

如果您已创建自己的 Google Cloud Storage 存储分区,我们强烈建议您删除该存储分区,以免产生任何费用和潜在的安全风险。

您可以使用以下命令删除存储分区:

gcloud storage buckets delete gs://<BUCKET_NAME>

8. 恭喜!

恭喜!您已成功在示例项目中使用 Gemini Code Assist,了解了 Gemini Code Assist 可如何协助您完成代码生成、代码补全和代码总结,并帮助您解答有关 Google Cloud 的问题。

参考文档