1. 准备工作
此 Codelab 介绍了如何准备 Gemini Code Assist,以提供专为您的私有代码库量身定制的代码自定义建议。这可以让代码辅助功能提供的结果变得更加实用,对于经常重复执行类似工作的团队而言,尤其如此。请放心,允许 Gemini 为此功能编制私有代码库的索引并不会使 Gemini 能够对您的私有代码进行广泛训练。
我们还将讨论如何使用 .aiexclude
文件排除敏感文件或不相关文件,以免在进行代码自定义时考虑这些文件。
前提条件
- 基本了解 Gemini Code Assist,并有权访问已启用 Gemini Code Assist 的项目
- 熟悉支持的编码语言,以便进行代码自定义
- 能够在
us-central1
或europe-west1
中创建资源,因为代码自定义需要在这些位置建立 Developer Connect 连接。 - 已通过身份验证且处于最新状态的 Google Cloud CLI
学习内容
- 如何在 Gemini Code Assist Enterprise 中使用代码自定义
- 代码自定义可为您的团队节省时间的众多用例之一
所需条件
- 已启用 Gemini Code Assist 的 Google Cloud 项目
- 用于为自定义请求编制索引的私有代码库
- 为自定义请求编制代码索引。此过程最多可能需要 24 小时
- 安装了 Gemini Code Assist 的 IDE
2. 环境
如需试用代码自定义功能,您需要满足以下两项条件:
- 访问已启用 Gemini 的 Google Cloud 项目
- 以及用于为 Gemini 提供回答的私有存储库。
最适合 Gemini 编入索引的代码库应包含在贵组织中经常重复使用的代码。为此 Codelab 提供的示例代码库包含一个标准的 Spring Boot Web 服务,其中包含一个包含符合此条件的数据传输对象的文件夹,因为系统会创建类似的类来描述数据库中每个实体在传输到呈现层时的情况。
3. (可选)代码库设置
如果您想使用示例代码库,而不是自己的私有代码库,可以在您选择的终端编辑器或 Cloud Shell 中按照以下步骤操作。首先创建一个私有代码库,帮助我们了解代码自定义的实际运用:
mkdir customization-starter
cd customization-starter
curl https://start.spring.io/starter.zip -d dependencies=web,lombok \
-d javaVersion=21 \
-d type=maven-project \
-d bootVersion=3.3.4 -o cc-starter.zip
unzip cc-starter.zip
rm cc-starter.zip
pushd src/main/java/com/example/demo
mkdir dtos
touch dtos/LedgerDTO.java
将以下内容添加到 LedgerDTO 文件中:
package com.example.demo.dtos;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
@Getter
@Setter
@Accessors(chain = true)
public class LedgerEntryDto {
private Long id;
private String accountName;
private double amount;
private String transactionType;
private String description;
private java.util.Date transactionDate;
}
这足以证明,启用代码自定义后,此代码库的其他贡献者预计会使用的访问器将被准确生成。
创建一个新代码库,并务必将其设为私有。请按照以下步骤将起始代码库推送到您的新代码库:
popd
gh auth login
git init
git add .
git commit -m "code customization starter"
git remote add origin git@github.com:<YOUR_GITHUB_ID>/customization-starter.git
git branch -M main
git push -u origin main
4. 排除文件
在向 Gemini 授予对私有代码库的访问权限之前,请务必了解如何排除您的团队不希望编入索引的无关文件或敏感文件。为此,您可以使用 .aiexclude
文件,该文件与 .gitignore
类似,但存在一些关键区别:
- 空的
.aiexclude
文件会屏蔽其所在目录和所有子目录中的所有文件。- 这与包含
**/*
的文件相同。
- 这与包含
.aiexclude
文件不支持否定运算符(以!
作为前缀格式)。
有鉴于此,请考虑您的团队希望排除的文件类型或目录,并将它们分别列在一行中:
#Block all files with .key extensions
*.key
#Block all files under sensitive/dir
my/sensitive/dir/
#Block all .key files under sensitive/dir
my/sensitive/dir/ /.key
5. 配置 Developer Connect
Developer Connect 是一项服务,可帮助您在 GitHub 或 GitLab 中关联和链接到您的私有代码库。借助此机制,Gemini Code Assist 可以安全地连接到您的私有代码库,以创建用于改进回答的指数。
这两个概念有助于理解 Developer Connect 如何安全地提供对代码的访问权限:
连接
- 表示 Google 与第三方源代码管理平台之间的桥梁。
链接
- 表示与您在关联的源代码管理平台中选择的单个源代码库的关联。
了解这些概念后,请先前往 Developer Connect 页面,为您的项目启用该 API。
接下来,按照相应步骤为 GitHub 或 GitLab 创建关联和链接。系统会在向导过程中创建这两项资源。
重复上述步骤,为您希望 Gemini 代码自定义功能在回答中考虑的每个代码库创建一个 Link。如果多个代码库来自同一平台,您可以重复使用现有连接。
6. 创建并连接到索引
为了快速解析和分析代码库,代码自定义依赖于索引。记下您使用的 INDEX_NAME,因为您将在后续步骤中用到该信息。
如需创建索引,请运行以下命令:
gcloud gemini code-repository-indexes create <INDEX_NAME> \
--project=<YOUR_PROJECT_ID> \
--location=<REGION>
如果您遇到任何 Invalid choice: ...
错误,请运行以下命令,确保您的 Google Cloud CLI 是最新版本:
gcloud components update
接下来,通过创建代码库组来允许对您的索引进行访问:
gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
--project=PROJECT_ID \
--location=REGION \
--code-repository-index=INDEX_NAME \
--repositories='[{"resource": "projects/PROJECT_ID/locations/REGION/connections/INDEX_CONNECTION/gitRepositoryLinks/REPOSITORY", "branch_pattern": "BRANCH_NAMES"}]'
替换以下值:
- REPOSITORY_GROUP:您要创建的代码库组的名称
- PROJECT_ID:您的 Google Cloud 项目 ID。
- INDEX_NAME:您在上一步中定义的用于创建索引的索引的名称。
- REGION:文档中列出的支持的区域,您已在 Google Cloud 项目的 Developer Connect 中对其进行了配置。
- INDEX_CONNECTION:您在上一步中创建的索引的连接。
- REPOSITORY:您要编入索引的代码库。您必须至少指定一个代码库,并且可以根据需要指定多个代码库。
- BRANCH_NAMES:您要编入索引的分支名称,例如 main 或 dev。
编入索引的内容最长可能需要 24 小时,具体取决于您要编入索引的代码库数量及其大小。系统每 24 小时编入索引一次,系统会提取代码库中所做的任何更改。您可以按照这些步骤查看索引生成状态:
最后,向所需的主账号授予对该群组的访问权限:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='PRINCIPAL' \
--role='roles/cloudaicompanion.repositoryGroupsUser'
7. 生成自定义代码
现在 Gemini 可以访问您私有代码库中的代码,我们预计会在代码补全请求中看到相关代码段。在我们的示例代码库中,我们可以前往 DTO 文件夹,然后创建一个新类来表示新对象。您可以看到,在我们输入代码时,系统会显示预期的注解:
8. 总结
恭喜您完成此 Codelab!您已了解如何使用 Gemini Code Assist 的代码自定义功能。现在,您可以根据团队专有的私有代码库量身定制回答,这样一来,每个提示和代码补全功能对团队中的开发者来说都会更有价值。
您可以随时查看以下其他文档和资料,进一步了解相关内容,并获取设置 IAM 角色等方面的支持: