Konfigurowanie i używanie funkcji dostosowania kodu w Gemini Code Assist

Z tego dokumentu dowiesz się, jak skonfigurować dostosowywanie kodu Gemini Code Assist, łącząc Gemini Code Assist z prywatnymi repozytoriami kodu. Ta funkcja umożliwia otrzymywanie rekomendacji kodu, które korzystają z bibliotek wewnętrznych, prywatnych interfejsów API i stylu kodowania Twojej organizacji.

Zanim zaczniesz

Wybieranie repozytoriów prywatnych, które mają być połączone

Sprawdzona metoda: połącz repozytoria, które:

  • Upewnij się, że kod ma styl i strukturę podobną do tej, którą mają napisać programiści.
  • mieć prywatne biblioteki lub interfejsy API, które chcesz wywoływać z bieżącej bazy kodu;

(Opcjonalnie) Wybierz pliki, które nie są indeksowane

Domyślnie dostosowywanie kodu indeksuje wszystkie obsługiwane pliki kodu w podanych repozytoriach.

W wielu przypadkach możesz mieć określone pliki lub poddrzewa, których nie chcesz indeksować. Na przykład:

  • informacje o wysokiej wrażliwości z ograniczonym dostępem w organizacji;
  • Stary lub przestarzały kod
  • Kod wygenerowany automatycznie lub tymczasowy

Aby zapobiec ujawnieniu kodu, który nie ma być indeksowany, możesz użyć wzorca gałęzi, aby kontrolować dostęp do indeksu, i używać stabilnej gałęzi, takiej jak main.

Możesz też wykluczyć pliki z indeksu, tworząc plik .aiexclude.

Tworzenie indeksu

Personalizacja kodu polega na analizowaniu i analizowaniu repozytorium za pomocą indeksu w celu szybszego generowania sugestii i wyszukiwania kodu.

Aby utworzyć indeks, w środowisku powłoki użyj polecenia 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"
}

Zastąp następujące elementy:

  • INDEX_NAME: nazwa indeksu. Ważne: zapisz nazwę indeksu. Będzie on potrzebny w kilku krokach tego dokumentu.
  • PROJECT_ID: identyfikator Twojego projektu Google Cloud;
  • REGION: obsługiwany region, jak podano w sekcji Zanim zaczniesz na tej stronie, który skonfigurowałeś/skonfigurowałaś w Developer Connect w projekcie Google Cloud.

Tworzenie indeksu zwykle trwa 30 minut, ale może potrwać do godziny.

Google ogranicza liczbę indeksów repozytorium kodu do 1 na projekt i organizację.

Zarządzanie dostępem do indeksu za pomocą grup repozytoriów

Grupa repozytorium to kontener konfiguracji indeksowania, który obejmuje repozytoria i ich wzorce gałęzi. Grupy repozytorium zostały zaprojektowane z myślą o dokładnej kontroli uprawnień, zapewniając deweloperom dostęp do zindeksowanych danych z tych grup, w których mają uprawnieniacloudaicompanion.repositoryGroups.use.

Grupy repozytoriów zawierają repozytoria Developer Connect lub linki z tego samego projektu i lokalizacji.

Administratorzy mogą wykonywać te czynności:

  • Utwórz zasób indeksu repozytorium kodu.
  • W tym samym projekcie i w tej samej lokalizacji skonfiguruj nowe połączenie Developer Connect.
  • Połącz repozytoria Git w ramach połączenia.
  • Pobierz nazwy zasobów linków, wybierz wzór gałęzi do zindeksowania dla każdego linku i umieść go w jednej lub wielu grupach repozytorium.

Aby utworzyć grupę repozytoriów, w środowisku powłoki użyj polecenia 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"
  }
}

Zastąp następujące elementy:

  • REPOSITORY_GROUP: nazwa grupy repozytorium, na przykład default.
  • PROJECT_ID: identyfikator Twojego projektu Google Cloud;
  • REGION: obsługiwany region, jak podano w sekcji Zanim zaczniesz na tej stronie, który skonfigurowano w Developer Connect w projekcie Google Cloud.
  • INDEX_NAME: nazwa indeksu utworzonego w poprzednim kroku tworzenia indeksu.
  • REPOSITORY_RESOURCE_NAME: nazwa repozytorium w połączeniu Developer Connect. Aby znaleźć nazwę repozytorium, otwórz stronę Developer Connect w konsoli Google Cloud i na karcie Repozytoria odszukaj identyfikator połączenia w kolumnie Połączenie. Aby skopiować nazwę zasobu, kliknij menu more_vert, aby wyświetlić więcej opcji, i wybierz Kopiuj ścieżkę zasobu.
  • BRANCH_NAMES: nazwa gałęzi, które chcesz zindeksować, np. main|dev.

Możesz też utworzyć grupę repozytoriów z repozytoriami zdefiniowanymi w pliku JSON (lub YAML) w takim formacie:

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

Aby utworzyć grupę repozytorium na podstawie pliku JSON lub YAML w środowisku powłoki, użyj polecenia 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

Jeśli wolisz, możesz szyfrować dane i nimi zarządzać za pomocą klucza szyfrowania zarządzanego przez klienta (CMEK) w usłudze Cloud Key Management Service. Więcej informacji o kluczu CMEK znajdziesz w artykule Szyfrowanie danych za pomocą kluczy szyfrowania zarządzanych przez klienta.

Przypisywanie roli uprawnień grupie repozytorium w projekcie

Otrzymasz tylko sugestie z reposytoriów w indeksie. Każde repozytorium należy do co najmniej 1 grupy repozytoriów. Aby uzyskać dostęp do sugestii, musisz przyznać grupie repozytorium rolę uprawnień użytkownika Cloud AI Companion Repository Groups (roles/cloudaicompanion.repositoryGroupsUser), która zawiera wymagane uprawnienie uprawnień (cloudaicompanion.repositoryGroups.user), w jeden z tych sposobów:

  • przyznać administratorom uprawnienia do dostępu do całego indeksu.
  • przyznać podmiotom zabezpieczeń dostęp do podzbioru indeksu.

Przyznawanie administratorom uprawnień do uzyskiwania dostępu do całego indeksu

  1. Aby powiązać z projektem zasady uprawnień, w środowisku powłoki użyj polecenia projects add-iam-policy-binding:

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

    Zastąp następujące elementy:

    • PROJECT_ID: identyfikator projektu, w którym znajduje się grupa repozytorium.
    • PRINCIPAL: adres e-mail głównego konta, któremu potrzebny jest dostęp. Może to być na przykład user:test-user@gmail.com (w przypadku użytkownika indywidualnego) lub group:admins@example.com (w przypadku grupy).

    Więcej informacji znajdziesz w sekcji gcloud projects set-iam-policy.

  2. Gdy pojawi się prośba o określenie warunku, wpisz None.

Przyznawanie podmiotom zabezpieczeń dostępu do podzbioru indeksu

Możesz utworzyć wiele grup repozytorium i przypisać role uprawnień do różnych podmiotów zabezpieczeń.

Aby skonfigurować zasady uprawnień, musisz przygotować plik JSON lub YAML zasad uprawnień, który będzie zawierać listę grup uprawnień i przypisanych ról. Na przykład:

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

Więcej informacji i składni znajdziesz w artykule Omówienie zasad zezwalających.

Aby ustawić uprawnienia, w środowisku powłoki uruchom polecenie 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

Zastąp następujące elementy:

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
  ]
}

Możesz też utworzyć:

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"]
}

Zastąp następujące elementy:

Sprawdzanie stanu indeksowania

W zależności od liczby repozytoriów, które chcesz zindeksować, oraz ich rozmiaru indeksowanie treści może potrwać do 24 godzin. W przypadku dużych repozytoriów indeksowanie może potrwać dłużej. Indeksowanie odbywa się raz na 24 godziny i wprowadza zmiany wprowadzone w repozytorium.

  1. Wyszukaj dzienniki indexing. Więcej informacji znajdziesz w artykule Język zapytań dotyczących logów.

    1. W konsoli Google Cloud otwórz Eksplorator logów.

      Otwórz Eksplorator logów

    2. Aby wyświetlić indexing logi, użyj filtra nazw logów.

    Aby wyszukać dzienniki indeksowania w środowisku powłoki, użyj polecenia logging read:

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

    Zastąp PROJECT_ID identyfikatorem projektu, w którym znajduje się grupa repozytoriów.

    Aby na przykład wyświetlić błędy w dziennikach indexing, uruchom to polecenie:

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing" AND severity>=ERROR"
    
  2. Sprawdź powiązane stany indeksowania, takie jak:

    • początek indeksowania repozytorium, np. Indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 6, failed: 0.
    • Zakończenie indeksowania poszczególnych repozytoriów, na przykład:
      • Udało się: Successfully finished indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 7, failed: 0.
      • Niepowodzenie: Failed to index repository REPOSITORY_NAME. Error: [<error message>]. Total number of repositories: 10, succeeded: 7, failed: 1.
    • Zakończenie indeksowania repozytorium – na przykład:
      • Udało się: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 0.
      • Niepowodzenie: 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.

    W sekcji stanów indeksu REPOSITORY_NAME to repozytorium, które chcesz sprawdzić.

  3. Sprawdź powiązane błędy indeksowania, takie jak:

    • Nie udało się pobrać repozytorium.
    • Nie udało się wyświetlić listy plików repozytorium.
    • Nie udało się pobrać informacji o repozytorium z indeksu.
    • Nie udało się pobrać plików z indeksu.
    • Błąd wewnętrzny.

Dostosowywanie kodu

Gdy skonfigurujesz dostosowywanie kodu, użytkownicy zaczną widzieć sugestie uzupełniania i generowania kodu, które mogą być oparte na prywatnym kodzie zindeksowanym przez Ciebie, a także na wynikach z całkowitej świadomości kodu źródłowego.

Wyłączanie dostosowywania kodu

  1. Aby wyświetlić listę wszystkich grup repozytorium dla bieżącego indeksu w środowisku powłoki, użyj polecenia 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
    

    Zastąp następujące elementy:

    • REGION: obsługiwany region, jak podano w sekcji Zanim zaczniesz na tej stronie, który skonfigurowano w Developer Connect w Twoim projekcie Google Cloud.
    • PROJECT_ID: identyfikator Twojego projektu Google Cloud;
    • INDEX_NAME: nazwa indeksu utworzonego w poprzednim kroku tworzenia indeksu.
  2. Aby usunąć grupę repozytoriów z bieżącego indeksu, użyj polecenia 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. Powtarzaj krok 3 dla każdej grupy repozytorium, aż usuniesz wszystkie grupy repozytorium z indeksu.

  4. Opcjonalnie: aby usunąć indeks, w środowisku powłoki użyj polecenia gemini code-repository-indexes delete:

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

Co dalej?