1. 事前準備
本程式碼實驗室將說明如何準備 Gemini Code Assist,以便提供專為私人存放區量身打造的程式碼自訂建議。如此一來,Code Assist 的分析結果就更加實用,尤其是對於經常重複執行類似工作制定特定慣例的團隊而言,更是如此。請放心,如果允許 Gemini 為這項功能的私人程式碼集建立索引,Gemini 就無法使用私人程式碼進行廣泛訓練。
我們也會討論如何使用 .aiexclude
檔案,排除敏感或不相關的檔案,以便進行程式碼自訂。
必要條件
- 對 Gemini Code Assist 有基本瞭解,並能存取已啟用該功能的專案
- 熟悉支援的程式語言,以便自訂程式碼
- 能夠在
us-central1
或europe-west1
中建立資源,因為程式碼自訂功能需要在這些位置建立 Developer Connect 連線。 - 通過驗證的最新版 Google Cloud CLI
課程內容
- 如何在 Gemini Code Assist Enterprise 中使用程式碼自訂功能
- 程式碼自訂功能可為團隊節省時間,這只是其中一個應用情境
需求條件
- 已啟用 Google Cloud 專案 Gemini Code Assist
- 要為自訂要求建立索引的私人存放區
- 是時候為自訂化要求建立索引了。這項作業最多可能需要 24 小時
- 已安裝 Gemini Code Assist 的 IDE
2. 背景資訊
如要嘗試程式碼自訂功能,您需要:
- 存取已啟用 Gemini 的 Google Cloud 專案
- 以及私人存放區,用於通知 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。
接著,請按照適當步驟為 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. 結語
恭喜您完成本程式碼研究室!您已瞭解如何使用 Gemini Code Assist 的程式碼自訂功能。您的回應現在可以針對團隊專屬的私人程式碼庫進行調整,因此每個提示和程式碼補全功能對團隊開發人員來說都更有價值。
歡迎詳閱下列其他文件和資料,瞭解相關資訊及設定 IAM 角色這類支援: