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
lubeurope-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:
- Dostęp do projektu Google Cloud z włączonym Gemini.
- i prywatne repozytorium, aby informować Gemini o odpowiedziach.
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
**/*
.
- 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.
Następnie wykonaj odpowiednie czynności, aby utworzyć połączenie i link do GitHub lub GitLab. Oba zasoby zostaną utworzone podczas pracy kreatora.
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:
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:
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ń: