Định cấu hình và sử dụng tính năng tuỳ chỉnh mã của Gemini Code Assist

Tài liệu này mô tả cách thiết lập tính năng tuỳ chỉnh mã của Gemini Code Assist bằng cách kết nối Gemini Code Assist với kho lưu trữ mã riêng tư của bạn. Tính năng này cho phép bạn nhận các đề xuất mã dựa trên thư viện nội bộ, API riêng tư và kiểu lập trình của tổ chức.

Trước khi bắt đầu

Chọn kho lưu trữ riêng tư được kết nối

Tốt nhất là bạn nên kết nối các kho lưu trữ:

  • Có mã có kiểu hoặc cấu trúc tương tự như mã bạn muốn nhà phát triển viết.
  • Có các thư viện hoặc API riêng tư mà bạn muốn gọi từ cơ sở mã hiện tại.

(Không bắt buộc) Chọn những tệp không được lập chỉ mục

Theo mặc định, tính năng tuỳ chỉnh mã sẽ lập chỉ mục tất cả tệp mã được hỗ trợ trong các kho lưu trữ bạn chỉ định.

Trong nhiều trường hợp, bạn có thể có các tệp hoặc cây con cụ thể mà bạn không muốn được lập chỉ mục. Ví dụ:

  • Thông tin cực kỳ nhạy cảm có quyền truy cập hạn chế trong tổ chức của bạn
  • Mã cũ hoặc không dùng nữa
  • Mã được tạo tự động hoặc mã tạm thời

Để ngăn việc hiển thị mã mà bạn không muốn lập chỉ mục, bạn có thể sử dụng mẫu nhánh để kiểm soát quyền truy cập vào chỉ mục và sử dụng một nhánh ổn định, chẳng hạn như main.

Ngoài ra, bạn cũng có thể loại trừ các tệp khỏi chỉ mục bằng cách tạo tệp .aiexclude.

Tạo chỉ mục

Tính năng tuỳ chỉnh mã dựa vào một chỉ mục để phân tích và phân tích cú pháp kho lưu trữ của bạn nhằm đưa ra các đề xuất và tra cứu tạo mã nhanh hơn.

Để tạo chỉ mục, trong môi trường shell, hãy sử dụng lệnh gemini code-repository-indexes create:

gcloud gemini code-repository-indexes create INDEX_NAME \
    --project=PROJECT_ID \
    --location=REGION
resource "google_gemini_code_repository_index" "example" {
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
}

Thay thế nội dung sau:

  • INDEX_NAME: tên chỉ mục của bạn. Lưu ý quan trọng: Ghi lại tên chỉ mục. Bạn sẽ cần mã này cho một số bước trong tài liệu này.
  • PROJECT_ID: mã dự án của bạn trên Google Cloud.
  • REGION: một khu vực được hỗ trợ, như đã nêu trong phần Trước khi bắt đầu của trang này, mà bạn đã định cấu hình trong Developer Connect trong dự án Google Cloud.

Quá trình tạo chỉ mục thường mất 30 phút để hoàn tất, nhưng cũng có thể mất đến một giờ.

Google giới hạn số lượng chỉ mục kho lưu trữ mã ở mức một cho mỗi dự án và tổ chức.

Kiểm soát quyền truy cập vào chỉ mục bằng nhóm kho lưu trữ

Nhóm kho lưu trữ là một vùng chứa cho cấu hình lập chỉ mục, bao gồm cả các kho lưu trữ và mẫu nhánh của chúng. Các nhóm kho lưu trữ được thiết kế để kiểm soát IAM chi tiết, cho phép nhà phát triển truy cập vào dữ liệu được lập chỉ mục từ các nhóm đó, trong đó họ có quyền cloudaicompanion.repositoryGroups.use.

Nhóm kho lưu trữ chứa các kho lưu trữ Developer Connect hoặc đường liên kết từ cùng một dự án và vị trí.

Quản trị viên thực hiện các thao tác sau:

  • Tạo tài nguyên Chỉ mục kho lưu trữ mã.
  • Trong cùng một dự án và vị trí, hãy định cấu hình một kết nối Developer Connect mới.
  • Liên kết kho lưu trữ Git trong mối kết nối.
  • Lấy tên tài nguyên của đường liên kết, chọn mẫu nhánh để lập chỉ mục cho mỗi đường liên kết và đặt tên đó vào một hoặc nhiều nhóm kho lưu trữ.

Để tạo một nhóm kho lưu trữ, trong môi trường shell, hãy sử dụng lệnh gemini code-repository-indexes repository-groups create:

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories='[{"resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "BRANCH_NAMES"}]'
resource "google_gemini_repository_group" "example" {
  location = "REGION"
  code_repository_index = "INDEX_NAME"
  repository_group_id = "REPOSITORY_GROUP"
  repositories {
    resource = "REPOSITORY_RESOURCE_NAME"
    branch_pattern = "BRANCH_NAMES"
  }
}

Thay thế nội dung sau:

  • REPOSITORY_GROUP: tên của nhóm kho lưu trữ, chẳng hạn như default.
  • PROJECT_ID: mã dự án của bạn trên Google Cloud.
  • REGION: một khu vực được hỗ trợ, như đã nêu trong phần Trước khi bắt đầu của trang này, mà bạn đã định cấu hình trong Developer Connect trong dự án Google Cloud.
  • INDEX_NAME: tên của chỉ mục mà bạn đã tạo trong bước trước để tạo chỉ mục.
  • REPOSITORY_RESOURCE_NAME: tên của kho lưu trữ bên trong kết nối Developer Connect. Để tìm tên của kho lưu trữ, hãy truy cập vào trang Developer Connect trong Google Cloud Console, rồi trong thẻ Kho lưu trữ, hãy tìm mã kết nối trong cột Kết nối trong bảng. Để sao chép tên tài nguyên, hãy nhấp vào trình đơn more_vert để xem thêm tuỳ chọn rồi chọn Sao chép đường dẫn tài nguyên.
  • BRANCH_NAMES: tên của các nhánh mà bạn muốn lập chỉ mục, chẳng hạn như main|dev.

Bạn cũng có thể tạo một nhóm kho lưu trữ có các kho lưu trữ được xác định trong tệp JSON (hoặc YAML), được định dạng như sau:

JSONYAML
[
  {
      "resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "main|dev"
  },
  {
      "resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "dev"
  }
]
- resource: REPOSITORY_RESOURCE_NAME
  branchPattern: main|dev

- resource: REPOSITORY_RESOURCE_NAME
  branchPattern: dev

Để tạo một nhóm kho lưu trữ dựa trên tệp JSON hoặc YAML, trong môi trường shell, hãy sử dụng lệnh gemini code-repository-indexes repository-groups create:

JSONYAML
gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories=FILEPATH.json
gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories=FILEPATH.yaml

Nếu muốn, bạn có thể mã hoá và kiểm soát dữ liệu bằng khoá mã hoá do khách hàng quản lý (CMEK) thông qua Dịch vụ quản lý khoá trên đám mây. Để tìm hiểu thêm về cách sử dụng CMEK, hãy xem bài viết Mã hoá dữ liệu bằng khoá mã hoá do khách hàng quản lý.

Cấp vai trò IAM cho nhóm kho lưu trữ trên một dự án

Bạn chỉ nhận được đề xuất từ các kho lưu trữ trong chỉ mục. Mỗi kho lưu trữ thuộc về một hoặc nhiều nhóm kho lưu trữ. Để truy cập vào các đề xuất, bạn phải cấp vai trò IAM Người dùng nhóm kho lưu trữ đồng hành của AI trên đám mây (roles/cloudaicompanion.repositoryGroupsUser) (chứa quyền IAM cloudaicompanion.repositoryGroups.user bắt buộc) cho nhóm kho lưu trữ theo một trong những cách sau:

  • Cấp cho các thực thể chính quyền truy cập vào toàn bộ chỉ mục.
  • Cấp cho các thực thể chính quyền truy cập vào một tập hợp con của chỉ mục.

Cấp cho các nguyên tắc quyền truy cập vào toàn bộ chỉ mục

  1. Để liên kết chính sách IAM cho một dự án, trong môi trường shell, hãy sử dụng lệnh projects add-iam-policy-binding:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member='PRINCIPAL' \
        --role='roles/cloudaicompanion.repositoryGroupsUser'
    

    Thay thế nội dung sau:

    • PROJECT_ID: mã dự án chứa nhóm kho lưu trữ.
    • PRINCIPAL: địa chỉ email của người dùng chính cần quyền truy cập, ví dụ: user:test-user@gmail.com đối với một cá nhân hoặc group:admins@example.com đối với một nhóm.

    Để biết thêm thông tin, hãy xem gcloud projects set-iam-policy.

  2. Khi được nhắc chỉ định một điều kiện, hãy nhập None.

Cấp cho các thực thể chính quyền truy cập vào một tập hợp con của chỉ mục

Bạn có thể tạo nhiều nhóm kho lưu trữ và chỉ định vai trò IAM cho nhiều thực thể chính IAM.

Để thiết lập chính sách IAM, bạn phải chuẩn bị tệp JSON hoặc YAML của chính sách IAM. Tệp này sẽ chứa danh sách các nhóm IAM và vai trò được chỉ định. Ví dụ:

bindings:
- members:
  - group:my-group@example.com
  - user:test-user@example.com
  role: roles/cloudaicompanion.repositoryGroupsUser

Để biết thêm thông tin chi tiết và cú pháp, hãy xem bài viết Tìm hiểu về chính sách cho phép.

Để đặt chính sách IAM, trong môi trường shell, hãy sử dụng lệnh gemini code-repository-indexes repository-groups set-iam-policy:

gcloud gemini code-repository-indexes repository-groups set-iam-policy GROUP_NAMEPOLICY_FILE \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME

Thay thế nội dung sau:

data "google_iam_policy" "foo" {
  binding {
    role = "roles/cloudaicompanion.repositoryGroupsUser"
    members = ["test-user@example.com"]
  }
}

resource "google_gemini_repository_group_iam_policy" "foo" {
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  policy_data = data.google_iam_policy.foo.policy_data
}

data "google_gemini_repository_group_iam_policy" "foo" {
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  depends_on = [
    google_gemini_repository_group_iam_policy.foo
  ]
}

Bạn cũng có thể tạo một liên kết:

resource "google_gemini_repository_group_iam_binding" "foo" {
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  role = "roles/cloudaicompanion.repositoryGroupsUser"
  members = ["test-user@example.com"]
}

Thay thế nội dung sau:

Kiểm tra trạng thái lập chỉ mục

Tuỳ thuộc vào số lượng kho lưu trữ mà bạn muốn lập chỉ mục và kích thước của các kho lưu trữ đó, quá trình lập chỉ mục nội dung có thể mất đến 24 giờ. Đối với các kho lưu trữ lớn, quá trình lập chỉ mục có thể mất nhiều thời gian hơn. Việc lập chỉ mục diễn ra một lần mỗi 24 giờ, thu thập mọi thay đổi đã thực hiện trong kho lưu trữ.

  1. Tìm nhật ký indexing. Để biết thêm thông tin, hãy xem phần Ghi nhật ký ngôn ngữ truy vấn.

    1. Trong Google Cloud Console, hãy chuyển đến Trình khám phá nhật ký.

      Chuyển đến Trình khám phá nhật ký

    2. Sử dụng bộ lọc tên nhật ký để xem nhật ký indexing.

    Để tìm nhật ký lập chỉ mục, trong môi trường shell, hãy sử dụng lệnh logging read:

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing""
    

    Thay thế PROJECT_ID bằng mã dự án chứa nhóm kho lưu trữ.

    Ví dụ: để xem lỗi trong nhật ký indexing, hãy chạy lệnh sau:

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing" AND severity>=ERROR"
    
  2. Xem lại các trạng thái lập chỉ mục liên quan, chẳng hạn như:

    • Bắt đầu lập chỉ mục kho lưu trữ, ví dụ: Indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 6, failed: 0.
    • Kết thúc quá trình lập chỉ mục kho lưu trữ riêng lẻ, ví dụ:
      • Thành công: Successfully finished indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 7, failed: 0.
      • Không thành công: Failed to index repository REPOSITORY_NAME. Error: [<error message>]. Total number of repositories: 10, succeeded: 7, failed: 1.
    • Kết thúc quá trình lập chỉ mục kho lưu trữ, ví dụ:
      • Thành công: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 0.
      • Không thành công: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 1. Repositories that were not successfully fetched will be retried in the next run.

    Trong trạng thái chỉ mục, REPOSITORY_NAME là kho lưu trữ mà bạn muốn xem xét.

  3. Xem lại các lỗi liên quan đến việc lập chỉ mục, chẳng hạn như:

    • Không tìm nạp được kho lưu trữ.
    • Không liệt kê được các tệp kho lưu trữ.
    • Không truy xuất được thông tin kho lưu trữ từ chỉ mục.
    • Không truy xuất được tệp từ chỉ mục.
    • Lỗi nội bộ.

Sử dụng tính năng tuỳ chỉnh mã

Sau khi bạn thiết lập tính năng tuỳ chỉnh mã, người dùng sẽ bắt đầu thấy các đề xuất hoàn thành mã và tạo mã có thể dựa trên mã riêng tư mà bạn đã lập chỉ mục, ngoài kết quả từ việc nhận biết toàn bộ cơ sở mã.

Tắt tính năng tuỳ chỉnh mã

  1. Để liệt kê tất cả các nhóm kho lưu trữ cho chỉ mục hiện tại, trong môi trường shell, hãy sử dụng lệnh gemini code-repository-indexes repository-groups list:

    gcloud gemini code-repository-indexes repository-groups list --location=REGION \
        --project=PROJECT_ID \
        --code-repository-index=INDEX_NAME --uri
    

    Thay thế nội dung sau:

    • REGION: một khu vực được hỗ trợ, như đã nêu trong phần Trước khi bắt đầu của trang này, mà bạn đã định cấu hình trong Developer Connect trong dự án Google Cloud.
    • PROJECT_ID: mã dự án của bạn trên Google Cloud.
    • INDEX_NAME: tên của chỉ mục mà bạn đã tạo trong bước trước để tạo chỉ mục.
  2. Để xoá một nhóm kho lưu trữ khỏi chỉ mục hiện tại, hãy sử dụng lệnh gemini code-repository-indexes repository-groups delete:

    gcloud gemini code-repository-indexes repository-groups delete REPOSITORY_GROUP \
        --location=REGION \
        --project=PROJECT_ID \
        --code-repository-index=INDEX_NAME
    
  3. Lặp lại bước 3 cho từng nhóm kho lưu trữ cho đến khi bạn xoá tất cả các nhóm kho lưu trữ khỏi chỉ mục.

  4. Không bắt buộc: Để xoá chỉ mục, trong môi trường shell, hãy sử dụng lệnh gemini code-repository-indexes delete:

    gcloud gemini code-repository-indexes delete INDEX_NAME \
        --location=REGION \
        --project=PROJECT_ID
    

Bước tiếp theo