Dostosowywanie kodu za pomocą Gemini Code Assist Enterprise

1. Zanim zaczniesz

W tym samouczku dowiesz się, jak przygotować Gemini Code Assist do generowania sugestii dostosowywania kodu, które są dopasowane do Twoich prywatnych repozytoriów. Dzięki temu wyniki generowane przez Code Assist mogą być znacznie bardziej przydatne, zwłaszcza w przypadku zespołów, które mają określone konwencje dotyczące podobnych, często powtarzających się zadań. Możesz mieć pewność, że zezwolenie Gemini na indeksowanie prywatnych baz kodu na potrzeby tej funkcji nie umożliwi Gemini szerokiego trenowania na Twoim prywatnym kodzie.

Omówimy też, jak wykluczyć z procesu dostosowywania kodu pliki zawierające informacje poufne lub nieistotne za pomocą pliku .aiexclude.

Wymagania wstępne

  • Podstawowa wiedza o Gemini Code Assist i dostęp do projektu, w którym jest ona włączona
  • znajomość obsługiwanego języka kodowania do dostosowywania kodu;
  • Możliwość tworzenia zasobów w us-central1 lub europe-west1, ponieważ dostosowywanie kodu wymaga połączeń Developer Connect w tych lokalizacjach.
  • aktualny i uwierzytelniony interfejs Google Cloud CLI;

Czego się dowiesz

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

Wymagania

  • Projekt Google Cloud z włączoną usługą Gemini Code Assist
  • prywatne repozytorium do indeksowania na potrzeby próśb o dostosowanie;
  • Czas indeksowania kodu na potrzeby żądań dostosowywania. Może to zająć do 24 godzin
  • IDE z zainstalowanym Gemini Code Assist

2. Kontekst

Aby wypróbować dostosowywanie kodu, musisz wykonać 2 czynności:

  1. Dostęp do projektu Google Cloud z włączoną usługą Gemini.
  2. i prywatne repozytorium, które będzie wykorzystywane do udzielania odpowiedzi przez Gemini.

Włączanie Gemini

Najlepsze repozytoria kandydatów do indeksowania przez Gemini to te, które zawierają kod często używany w całej organizacji. Przykładowe repozytorium udostępnione na potrzeby tego laboratorium zawiera standardową usługę internetową Spring Boot z folderem obiektów przenoszenia danych, które spełniają to kryterium, ponieważ podobna klasa zostałaby utworzona w celu opisania każdej jednostki w bazie danych podczas jej przenoszenia do warstwy prezentacji.

3. (Opcjonalnie) Konfigurowanie repozytorium

Jeśli wolisz użyć przykładowego repozytorium zamiast własnego prywatnego, możesz wykonać te czynności w wybranym edytorze terminala lub w Cloud Shell. Zacznij od utworzenia prywatnego repozytorium, aby zobaczyć, jak działa dostosowywanie 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;
}

Wystarczy to, aby wykazać, że akcesory, których używania oczekują inni współtwórcy tej bazy kodu, będą generowane prawidłowo przy włączonym dostosowywaniu kodu.

Utwórz nowe repozytorium, pamiętając, aby było prywatne. Aby przesłać projekt początkowy do nowego repozytorium, wykonaj te czynności:

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 repozytoriów prywatnych, dowiedz się, jak wykluczyć nieistotne lub poufne pliki, których Twój zespół nie chce indeksować. W tym celu używany jest plik .aiexclude, który jest podobny do pliku .gitignore, ale ma kilka kluczowych różnic:

  • Pusty plik .aiexclude blokuje wszystkie pliki w swoim katalogu i we wszystkich podkatalogach.
    • To to samo co plik zawierający **/*.
  • Pliki .aiexclude nie obsługują negacji (wzorców z prefiksem !).

W tym celu zastanów się, jakie typy plików lub katalogi Twój zespół chce wykluczyć, i wymień 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 połączenialinki do prywatnych repozytoriów kodu w GitHub lub GitLab. Jest to mechanizm, który umożliwia Gemini Code Assist bezpieczne łączenie się z repozytoriami prywatnymi w celu utworzenia indeksu, który będzie używany do ulepszania odpowiedzi.

Te 2 koncepcje pomagają zrozumieć, jak Developer Connect bezpiecznie zapewnia dostęp do kodu:

Połączenie

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

Link

  • Reprezentuje powiązanie z poszczególnym repozytorium kodu źródłowego wybranym na połączonej platformie zarządzania kodem źródłowym.

Mając to na uwadze, zacznij od przejścia na stronę Developer Connect, aby włączyć interfejs API w projekcie.

Włączanie Developer Connect

Następnie wykonaj odpowiednie czynności, aby utworzyć połączenielink dla GitHub lub GitLab. Oba zasoby zostaną utworzone podczas działania kreatora.

Tworzenie połączenia i linku

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

6. Tworzenie indeksu i nawiązywanie z nim połączenia

Aby szybko analizować repozytoria, dostosowywanie kodu opiera się na indeksie. Zanotuj używaną nazwę INDEX_NAME, ponieważ będzie Ci 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 napotkasz jakiekolwiek błędy Invalid choice: ..., upewnij się, że Twój Google Cloud CLI jest aktualny. W tym celu uruchom to polecenie:

gcloud components update

Następnie przyznaj dostęp do indeksu, tworząc grupę repozytoriów:

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ąp te wartości:

  • REPOSITORY_GROUP: nazwa grupy repozytoriów, którą chcesz utworzyć
  • PROJECT_ID: identyfikator Twojego projektu Google Cloud.
  • INDEX_NAME: nazwa indeksu zdefiniowana w poprzednim kroku w celu utworzenia indeksu.
  • REGION: obsługiwany region z listy w dokumentacji, który został skonfigurowany w Developer Connect w projekcie Google Cloud.
  • INDEX_CONNECTION: połączenie z indeksem utworzonym w poprzednim kroku w celu utworzenia indeksu.
  • REPOSITORY: repozytorium, które chcesz zindeksować. Musisz określić co najmniej 1 repozytorium. W razie potrzeby możesz określić kilka repozytoriów.
  • BRANCH_NAMES: nazwy gałęzi, które chcesz indeksować, np. main lub dev.

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

Stan indeksowania wyszukiwania

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 kodu dostosowanego do Twoich potrzeb

Teraz, gdy Gemini ma dostęp do kodu w Twoim prywatnym repozytorium, możemy oczekiwać, że w naszych żądaniach uzupełniania kodu będą się pojawiać odpowiednie fragmenty. W naszym przykładowym repozytorium możemy przejść do folderu DTO. Podczas tworzenia nowej klasy reprezentującej nowy obiekt w trakcie pisania będą się pojawiać oczekiwane adnotacje:

Wygenerowana próbka

8. Podsumowanie

Gratulujemy ukończenia tego ćwiczenia! Wiesz już, jak korzystać z funkcji Dostosowywanie kodu w Gemini Code Assist. Teraz, gdy odpowiedzi mogą być dostosowane do konkretnych, prywatnych baz kodu Twoich zespołów, każdy prompt i każde uzupełnienie kodu będą bardziej wartościowe dla programistów w Twoich zespołach.

Zapoznaj się z tymi dokumentami i materiałami, aby dowiedzieć się więcej i uzyskać pomoc w konfigurowaniu ról uprawnień: