使用 Gemini Code Assist Enterprise 自訂程式碼

1. 事前準備

本程式碼實驗室說明如何準備 Gemini Code Assist,根據私人存放區提供程式碼自訂建議。這能讓 Code Assist 提供的結果更加實用,對於經常重複類似工作的團隊來說尤其如此。請放心,允許 Gemini 為這項功能建立私人程式碼集索引,不會讓 Gemini 廣泛訓練私人程式碼。

我們也會討論如何使用 .aiexclude 檔案,排除敏感或不相關的檔案,避免程式碼自訂服務將這些檔案納入考量。

必要條件

  • 對 Gemini Code Assist 有基本瞭解,且有權存取已啟用這項功能的專案
  • 熟悉支援的程式語言,可自訂程式碼
  • 能夠在 us-central1europe-west1 中建立資源,因為程式碼自訂功能需要這些位置的 Developer Connect 連結。
  • 已通過驗證的最新版 Google Cloud CLI

課程內容

  • 如何在 Gemini Code Assist Enterprise 中使用程式碼自訂功能
  • 程式碼自訂功能可為團隊節省時間,這只是其中一個應用情境

需求條件

  • 已啟用 Gemini Code Assist 的 Google Cloud 專案
  • 用於自訂要求建立索引的私人存放區
  • 現在要為自訂要求建立程式碼索引。這最多可能需要 24 小時
  • 已安裝 Gemini Code Assist 的 IDE

2. Context

如要試用程式碼自訂功能,必須符合下列兩項條件:

  1. 存取已啟用 Gemini 的 Google Cloud 專案
  2. 以及私有存放區,讓 Gemini 據此回覆。

啟用 Gemini

Gemini 建立索引的最佳候選存放區,應包含貴機構經常重複使用的程式碼。本程式碼研究室提供的範例存放區包含標準的 Spring Boot 網路服務,以及符合這項條件的資料移轉物件資料夾,因為系統會建立類似的類別,在資料庫中的每個實體傳輸至簡報層時進行說明。

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。

啟用 Developer Connect

接著,請按照適當步驟,為 GitHubGitLab 建立「連線」和「連結」。精靈程序會建立這兩項資源。

建立連結

針對要讓 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. 結語

恭喜您完成本程式碼研究室!您已瞭解如何使用 Gemini Code Assist 的程式碼自訂功能。現在,回覆內容可根據團隊專屬的私人程式碼集調整,因此每個提示和程式碼補全功能對團隊開發人員來說都更有價值。

歡迎參閱下列其他文件和資料,進一步瞭解如何設定 IAM 角色等事項: