Dostosowywanie kodu za pomocą Gemini Code Assist Enterprise

1. Zanim zaczniesz

Dzięki temu ćwiczeniu w Codelabs dowiesz się, jak przygotować usługę Gemini Code Assist w celu dostosowania kodu dostosowanego do Twoich repozytoriów prywatnych. Dzięki temu wyniki Code Assist mogą być znacznie przydatniejsze, zwłaszcza dla zespołów, które mają określone konwencje dotyczące podobnych zadań, które są często powtarzane. Możesz mieć pewność, że umożliwienie indeksowania przez Gemini Twoich prywatnych baz kodu w ramach tej funkcji nie spowoduje, że Gemini będzie mogło trenować na podstawie Twojego prywatnego kodu.

Omówimy też, jak wykluczyć pliki zawierające dane wrażliwe lub nieistotne z uwzględnienia w ramach dostosowywania kodu za pomocą pliku .aiexclude.

Wymagania wstępne

  • podstawowa znajomość Gemini Code Assist oraz dostęp do projektu, w którym jest ona włączona;
  • znajomość obsługiwanego języka programowania, aby móc dostosowywać kod;
  • Możliwość tworzenia zasobów w usłudze us-central1 lub europe-west1, ponieważ dostosowywanie kodu wymaga połączeń w tych usługach w ramach usługi Developer Connect.
  • Aktualny, uwierzytelniony interfejs Google Cloud CLI

Czego się nauczysz

  • Jak korzystać z dostosowywania kodu w Gemini Code Assist Enterprise
  • Jeden z wielu przypadków użycia, w których dostosowywanie kodu pozwala zaoszczędzić czas zespołu

Wymagania

  • W projekcie Google Cloud włączono Gemini Code Assist
  • Prywatne repozytorium do indeksowania próśb o dostosowywanie
  • Czas na zindeksowanie kodu na potrzeby żądań personalizacji. Może to zająć do 24 godzin.
  • IDE z zainstalowanym Gemini Code Assist

2. Kontekst

Aby wypróbować dostosowywanie kodu, musisz spełnić 2 rzeczy:

  1. Dostęp do projektu Google Cloud z włączonym Gemini.
  2. i prywatne repozytorium, aby informować Gemini o odpowiedziach.

Włączanie Gemini

Najlepsze repozytoria do zindeksowania przez Gemini zawierają kod, który jest często używany w całej organizacji. Przykładowy repozytorium udostępnione w ramach tego samouczka zawiera standardową usługę internetową Spring Boot z folderem obiektów Data Transfer Object, które spełniają te kryteria, ponieważ podobna klasa zostałaby utworzona, aby opisać każdy element w bazie danych podczas jego przenoszenia do warstwy prezentacji.

3. (Opcjonalnie) Konfiguracja repozytorium

Jeśli wolisz użyć przykładowego repozytorium zamiast własnego, możesz wykonać opisane niżej czynności w wybranym edytorze terminala lub w Cloud Shell. Najpierw utwórz repozytorium prywatne, abyśmy mogli zobaczyć, jak działa personalizacja kodu:

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

Dodaj do pliku LedgerDTO te informacje:

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

To wystarczające do potwierdzenia, że akcesory, których mogą używać inni współtwórcy tej bazy kodu, będą generowane dokładnie z włączonym personalizacją kodu.

Utwórz nowe repozytorium, pamiętając, aby pozostawić je prywatne. Aby przesłać starter do nowego repozytorium:

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. Wykluczanie plików

Zanim przyznasz Gemini dostęp do prywatnych repozytoriów, musisz wiedzieć, jak wykluczyć z indeksowania nieistotne lub poufne pliki, których indeksowania nie chcesz zezwalać. W tym celu używa się pliku .aiexclude, który jest podobny do pliku .gitignore, ale różni się od niego w kilku kluczowych kwestiach:

  • Puste pliki .aiexclude blokują wszystkie pliki w katalogu i podkatalogach.
    • Działa tak samo jak plik zawierający **/*.
  • Pliki .aiexclude nie obsługują zaprzeczenia (prefixing patterns with !).

Mając to na uwadze, zastanów się, jakie typy plików lub katalogów Twój zespół chce wykluczyć z rozważania, i wypisz je w osobnych wierszach:

#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. Konfigurowanie Developer Connect

Developer Connect to usługa, która ułatwia łączenia i linki do prywatnych repozytoriów kodu w GitHub lub GitLab. Ten mechanizm umożliwia Gemini Code Assist bezpieczne połączenie z prywatnymi repozytoriami, aby utworzyć indeks, który posłuży do ulepszania odpowiedzi.

Te 2 koncepcje pomogą Ci zrozumieć, jak Developer Connect zapewnia bezpieczny dostęp do Twojego kodu:

Połączenie

  • Stanowi łącznik między Google a zewnętrzną platformą do zarządzania kodem źródłowym.

Link

  • Reprezentuje powiązanie z pojedynczym repozytorium kodu źródłowego, które wybierzesz na połączonej platformie zarządzania kodem źródłowym.

Pamiętaj o tych pojęciach, a potem otwórz stronę Developer Connect i włącz interfejs API w swoim projekcie.

Włączanie Developer Connect

Następnie wykonaj odpowiednie czynności, aby utworzyć połączenie i link do GitHub lub GitLab. Oba zasoby zostaną utworzone podczas pracy kreatora.

Tworzenie połączenia i linku

Powtórz te czynności, aby utworzyć link do każdego repozytorium, którego funkcja dostosowywania kodu w Gemini ma używać w swoich odpowiedziach. Jeśli wiele repozytoriów pochodzi z tej samej platformy, możesz ponownie użyć istniejącego połączenia.

6. Tworzenie indeksu i łączenia się z nim

Aby szybko analizować i przetwarzać repozytoria, dostosowywanie kodu korzysta z indeksu. Zapisz użytą nazwę INDEX_NAME, ponieważ będzie ona potrzebna w następnym kroku.

Aby utworzyć indeks, uruchom to polecenie:

gcloud gemini code-repository-indexes create <INDEX_NAME> \
    --project=<YOUR_PROJECT_ID> \
    --location=<REGION>

Jeśli wystąpią błędy Invalid choice: ..., sprawdź, czy interfejs wiersza poleceń Google Cloud jest aktualny. Aby to zrobić, uruchom to polecenie:

gcloud components update

Następnie zezwól na dostęp do indeksu, tworząc grupę repozytorium:

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

Zastępowanie tych wartości:

  • REPOSITORY_GROUP: nazwa grupy repozytoriów, które chcesz utworzyć;
  • PROJECT_ID: identyfikator Twojego projektu Google Cloud.
  • INDEX_NAME: nazwa indeksu zdefiniowanego w poprzednim kroku.
  • REGION: obsługiwany region z listy w dokumentacji, który skonfigurowałeś w Developer Connect w projekcie Google Cloud.
  • INDEX_CONNECTION: połączenie indeksu utworzonego w poprzednim kroku.
  • REPOSITORY: repozytorium, które chcesz zindeksować. Musisz określić co najmniej 1 repozytorium. W razie potrzeby możesz określić więcej repozytoriów.
  • BRANCH_NAMES: nazwy gałęzi, które chcesz zindeksować, np. main lub dev.

W zależności od liczby repozytoriów, które chcesz zindeksować, oraz ich rozmiaru indeksowanie treści może potrwać do 24 godzin. Indeksowanie odbywa się raz na 24 godziny i wprowadza wszelkie zmiany wprowadzone w repozytorium. Aby sprawdzić stan generowania indeksu, wykonaj te czynności:

Szukam stanu indeksowania

Na koniec przyznaj wybranemu podmiotowi zabezpieczeń dostęp do grupy:

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

7. Generowanie niestandardowego kodu

Teraz gdy Gemini ma dostęp do kodu w Twoim prywatnym repozytorium, odpowiednie fragmenty powinny się pojawić w naszych żądaniach uzupełnienia kodu. W przykładowym repozytorium możemy przejść do folderu DTO. Gdy tworzymy nową klasę reprezentującą nowy obiekt, podczas pisania widzimy oczekiwane adnotacje:

Wygenerowany sample

8. Podsumowanie

Gratulujemy ukończenia tego ćwiczenia Codelab. Dowiedz się, jak korzystać z funkcji dostosowywania kodu w Gemini Code Assist. Odpowiedzi można teraz dostosować do prywatnych repozytoriów kodu Twoich zespołów, dzięki czemu każdy prompt i uzupełnianie kodu będą bardziej przydatne dla programistów z Twoich zespołów.

Zapoznaj się z tymi dokumentami i materiałami, aby uzyskać więcej informacji i pomocy w takich kwestiach jak konfigurowanie ról uprawnień: