1. 准备工作
此 Codelab 展示了如何准备 Gemini Code Assist,以便其提供根据您的私有代码库量身定制的代码自定义建议。这可以使 Code Assist 提供的结果更加有用,尤其是对于在类似且经常重复的工作方面有特定规范的团队。请放心,允许 Gemini 为此功能编制您的私有代码库索引,并不会让 Gemini 广泛地使用您的私有代码进行训练。
我们还将讨论如何使用 .aiexclude 文件将敏感文件或不相关文件排除在代码自定义的考虑范围之外。
前提条件
- 对 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 服务,其中包含一个符合此条件的 Data Transfer Objects 文件夹,因为在将数据库中的每个实体传输到表示层时,都会创建一个类似的类来描述该实体。
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 的代码自定义功能在回答中考虑的代码库创建链接。如果多个代码库来自同一平台,您可以重复使用现有连接。
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 角色等方面的支持: