Wdrażanie historii użytkowników Jira za pomocą generatywnej AI

1. Omówienie

W tym laboratorium utworzysz rozwiązanie, które automatyzuje implementację scenariuszy wykorzystania Jira za pomocą generatywnej AI.

5351e028356cd3ac.png

Czego się nauczysz

Laboratorium składa się z kilku głównych części:

  • Wdrażanie aplikacji Cloud Run w celu integracji z interfejsami Gemini API
  • Tworzenie i wdrażanie aplikacji Atlassian Forge dla Jira
  • Automatyzacja zadań GitLab za pomocą agentów LangChain ReAct

Wymagania wstępne

  • Ten moduł zakłada, że znasz środowiska Cloud Console i Cloud Shell.

2. Konfiguracja i wymagania

Konfiguracja projektu Cloud

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, którego nie używają interfejsy API Google. Zawsze możesz ją zaktualizować.
  • Identyfikator projektu jest niepowtarzalny w ramach wszystkich projektów Google Cloud i nie można go zmienić (po ustawieniu). Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie ma znaczenia, jaki to ciąg. W większości laboratoriów z kodem musisz podać identyfikator projektu (zwykle oznaczony jako PROJECT_ID). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować inny losowy. Możesz też spróbować użyć własnego adresu e-mail, aby sprawdzić, czy jest on dostępny. Nie można go zmienić po wykonaniu tego kroku. Pozostanie on do końca projektu.
  • Informacyjnie: istnieje jeszcze 3 wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów i interfejsów API Cloud. Przejście przez ten samouczek nie będzie kosztowne, a być może nawet bezpłatne. Aby wyłączyć zasoby i uniknąć obciążenia opłatami po zakończeniu samouczka, możesz usunąć utworzone zasoby lub usunąć projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Konfiguracja środowiska

Otwórz czat Gemini.

bc3c899ac8bcf488.png

Możesz też wpisać „Zapytaj Gemini” na pasku wyszukiwania.

e1e9ad314691368a.png

Włącz interfejs Cloud AI Companion API:

66cb6e561e384bbf.png

Kliknij „Start chatting” i użyj jednego z przykładowych pytań lub wpisz własne prompty, aby je wypróbować.

5482c153eef23126.png

Prompty do wypróbowania:

  • Wyjaśnij Cloud Run w 5 kluczowych punktach.
  • Jesteś menedżerem produktu Google Cloud Run. Wyjaśnij studentowi, na czym polega Cloud Run, w 5 krótkich punktach.
  • Jesteś menedżerem produktu Cloud Run w Google i chcesz wyjaśnić Cloud Run certyfikowanemu deweloperowi Kubernetes w 5 krótkich punktach.
  • Jesteś menedżerem produktu Cloud Run w Google i chcesz wyjaśnić starszemu programiście, kiedy należy używać Cloud Run, a kiedy GKE. W tym celu przedstawiasz 5 krótkich kluczowych punktów.

Aby dowiedzieć się więcej o pisaniu lepszych promptów, zapoznaj się z przewodnikiem po promptach.

Jak Gemini dla Google Cloud korzysta z Twoich danych

Zobowiązanie Google do ochrony prywatności

Google jako jedna z pierwszych firm w branży opublikowała zobowiązanie do ochrony prywatności w systemach AI/ML, w którym wyraziliśmy przekonanie, że klienci powinni mieć najwyższy poziom bezpieczeństwa i kontroli nad swoimi danymi przechowywanymi w chmurze.

Dane, które przesyłasz i odbierasz

Pytania, które zadajesz Gemini, w tym wszelkie informacje wejściowe lub kod, które przesyłasz do Gemini w celu analizy lub uzupełnienia, nazywamy promptami. Odpowiedzi lub dokończenia kodu, które otrzymujesz od Gemini, nazywane są odpowiedziami. Gemini nie używa Twoich promptów ani swoich odpowiedzi jako danych do trenowania swoich modeli.

Szyfrowanie promptów

Gdy przesyłasz prompty do Gemini, Twoje dane są szyfrowane podczas przesyłania i przesyłane do modelu podstawowego w Gemini.

Dane programu wygenerowane przez Gemini

Gemini jest trenowany na podstawie własnego kodu Google Cloud oraz wybranego kodu zewnętrznego. Ponosisz odpowiedzialność za bezpieczeństwo, testowanie i skuteczność kodu, w tym za uzupełnianie, generowanie i analizowanie kodu przez Gemini.

Dowiedz się więcej o tym, jak Google radzi sobie z potwierdzeniami.

3. Opcje testowania promptów

Możesz testować prompty na kilka sposobów.

Vertex AI Studio jest częścią platformy Vertex AI w Google Cloud, która została zaprojektowana z myślą o uproszczeniu i przyspieszeniu tworzenia oraz stosowania modeli generatywnej AI.

Google AI Studio to internetowe narzędzie do tworzenia prototypów i eksperymentowania z inżynierią promptów oraz interfejsem Gemini API.

Aplikacja internetowa Google Gemini (gemini.google.com) to narzędzie internetowe, które ułatwia poznawanie i wykorzystywanie potencjału modeli sztucznej inteligencji Gemini od Google.

4. (OPIS OPCJONALNY) Tworzenie konta usługi

Te kroki zostały wykonane podczas konfiguracji laboratorium – nie musisz ich powtarzać.

Te czynności pokazują, jak skonfigurować konto usługi i role IAM.

Wróć do Google Cloud Console i aktywuj Cloud Shell, klikając ikonę po prawej stronie paska wyszukiwania.

3e0c761ca41f315e.png

Aby utworzyć nowe konto usługi i klucze, uruchom w otwartym terminalu te polecenia.

Z tego konta usługi będziesz korzystać do wywoływania interfejsu Vertex AI Gemini API z aplikacji Cloud Run.

Skonfiguruj szczegóły projektu, korzystając z danych projektu Qwiklabs.

Przykład: qwiklabs-gcp-00-2c10937585bb

gcloud config set project YOUR_QWIKLABS_PROJECT_ID

Utwórz konto usługi i przyznaj mu role.

PROJECT_ID=$(gcloud config get-value project)
SERVICE_ACCOUNT_NAME='vertex-client'
DISPLAY_NAME='Vertex Client'
KEY_FILE_NAME='vertex-client-key'

gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME --project $PROJECT_ID --display-name "$DISPLAY_NAME"

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/aiplatform.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/aiplatform.user"

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/cloudbuild.builds.editor"

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/storage.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/run.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/secretmanager.secretAccessor"


gcloud iam service-accounts keys create $KEY_FILE_NAME.json --iam-account=$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com

Jeśli pojawi się pytanie o autoryzację, kliknij „Autoryzuj”, aby kontynuować.

6356559df3eccdda.png

Włącz wymagane usługi, aby korzystać z interfejsów API Vertex AI i czatu Gemini.

gcloud services enable \
    generativelanguage.googleapis.com \
    aiplatform.googleapis.com \
    cloudaicompanion.googleapis.com \
    run.googleapis.com \
    cloudresourcemanager.googleapis.com
 

Włącz wymagane usługi, aby korzystać z interfejsów API Vertex AI i czatu Gemini.

gcloud services enable \
    artifactregistry.googleapis.com \
    cloudbuild.googleapis.com \
    runapps.googleapis.com \
    workstations.googleapis.com \
    servicemanagement.googleapis.com \
    secretmanager.googleapis.com \
    containerscanning.googleapis.com

(END OF OPTIONAL SECTION)

5. Przyznawanie dostępu do Cloud Workstations

Otwórz Cloud Workstations w Cloud Console.

Przyznaj dostęp do Cloud Workstation studentowi Qwiklabs.

Skopiuj nazwę użytkownika lub adres e-mail Qwiklabs utworzony dla tego projektu i użyj go do dodania głównego konta. Wybierz stanowisko robocze i kliknij „PERMISSIONS”.

Więcej informacji na ten temat znajdziesz poniżej.

5cbb861e4f272f.png

Kliknij przycisk „ADD PRINCIPAL”.

Wklej adres e-mail ucznia Qwiklabs i wybierz rolę „Cloud Workstations User”.

dfe53b74453d80b1.png

Kliknij „Start”, a następnie „Launch”, aby otworzyć stację roboczą i wykonać podane niżej czynności za pomocą wbudowanego terminala.

62dccf5c78880ed9.png

Klonowanie repozytorium GitHub

Utwórz folder i skopiuj repozytorium GitHub.

mkdir github
cd github
git clone https://github.com/GoogleCloudPlatform/genai-for-developers.git

Użyj elementu menu „File / Open Folder”, aby otworzyć „github/genai-for-developers”.

6. Włączanie Gemini Code Assist

Kliknij ikonę „Gemini”, a potem w prawym dolnym rogu kliknij Login to Google Cloud.

4a7f4640f66037f.png

8d31b61e23ebeea2.png

Kliknij link w terminalu, aby rozpocząć proces autoryzacji.

d8575b4066f67745.png

Kliknij „Otwórz”, aby otworzyć link.

3a7272fcb985ff5.png

Wybierz konto ucznia Qwiklabs i na następnym ekranie kliknij „Zaloguj się”.

79dc63009ce0ed49.png

Skopiuj kod weryfikacyjny:

403845a5abc53635.png

Wróć do terminala i wklej kod.

5931f639fe69f5cb.png

Poczekaj na zakończenie uwierzytelniania, a potem kliknij „Wybierz projekt Google”.

614beb055f7aa5e8.png

W wyskakującym okienku wybierz projekt Qwiklabs.

Przykład:

70ae6837db397e2a.png

Otwórz plik „devai-api/app/routes.py”, a potem kliknij prawym przyciskiem myszy dowolne miejsce w pliku i w menu kontekstowym wybierz „Gemini > Explain this"”.

32b902134440b7c3.png

Przeczytaj wyjaśnienie Gemini dotyczące wybranego pliku.

f78bfee770f6be93.png

7. Zestawy narzędzi LangChain

Pakiet narzędzi LangChain to zestawy narzędzi, które mają na celu usprawnienie i ulepszanie tworzenia aplikacji za pomocą LangChain. Oferują one różne funkcje w zależności od konkretnego zestawu narzędzi, ale ogólnie pomagają w tych kwestiach:

  • Łączenie z zewnętrznymi źródłami danych: możesz uzyskiwać informacje z interfejsów API, baz danych i innych zewnętrznych źródeł oraz stosować je w swoich aplikacjach LangChain.
  • Zaawansowane techniki promptów: korzystaj z gotowych promptów lub twórz własne, aby optymalizować interakcje z modelami językowymi.
  • Tworzenie i zarządzanie łańcuchami: możesz łatwo tworzyć złożone łańcuchy i skutecznie nimi zarządzać.
  • Ocena i monitorowanie: analizuj skuteczność aplikacji i łańcuchów LangChain.

Oto niektóre popularne zestawy narzędzi LangChain:

  • Narzędzia do wykonywania zadań przez agentów: narzędzia do tworzenia agentów, które mogą wchodzić w interakcje ze światem rzeczywistym, wykonując takie działania jak przeglądanie internetu czy wykonywanie kodu.
  • Zestaw narzędzi do tworzenia promptów: zbiór zasobów do tworzenia skutecznych promptów.

Zestaw narzędzi GitLab

W tym laboratorium użyjesz narzędzia GitLab do zautomatyzowania tworzenia prośby o łączenie w GitLab.

Zestaw narzędzi Gitlab zawiera narzędzia, które umożliwiają interfejsowi LLM interakcję z repozytorium Gitlab. Narzędzie to obudowa biblioteki python-gitlab.

Pakiet GitLab umożliwia wykonywanie tych czynności:

  • Utwórz plik – tworzy nowy plik w repozytorium.
  • Read File (Odczytaj plik) – odczytuje plik z repozytorium.
  • Zaktualizuj plik – aktualizuje plik w repozytorium.
  • Utwórz żądanie pull – tworzy żądanie pull z gałęzi roboczej bota do gałęzi bazowej.
  • Get Issues – pobiera problemy z repozytorium.
  • Pobierz problem – pobiera szczegóły dotyczące konkretnego problemu.
  • Komentowanie problemu – publikowanie komentarza na temat konkretnego problemu.
  • Usuń plik – usuwa plik z repozytorium.

8. Konfiguracja repozytorium GitLab i Toolkit

Otwórz GitLab, utwórz nowy projekt publiczny i skonfiguruj token dostępu do projektu w sekcji „Settings / Access Tokens”.

Użyj tych informacji:

  • Nazwa tokena: devai-api-qwiklabs
  • Rola: Maintainer
  • Wybierz zakresy: api

112008c7894c3a19.png

Skopiuj i wklej wartość tokena dostępu do pliku tymczasowego na laptopie. Zostanie ona użyta w następnych krokach.

9. Przygotowanie do wdrożenia aplikacji w Cloud Run

Wróć do instancji Cloud Workstations i użyj istniejącego terminala lub otwórz nowy.

9f9682d2b7317e66.png

Uzyskaj dane logowania do swojego konta użytkownika za pomocą procedury autoryzacji internetowej.

Kliknij link i postępuj zgodnie z instrukcjami, aby wygenerować kod weryfikacyjny.

gcloud auth login

Skonfiguruj szczegóły projektu, korzystając z danych projektu Qwiklabs.

Przykład: qwiklabs-gcp-00-2c10937585bb

gcloud config set project YOUR-QWIKLABS-PROJECT-ID

Ustaw pozostałe zmienne środowiskowe:

export PROJECT_ID=$(gcloud config get-value project)
export LOCATION=us-central1
export REPO_NAME=devai-api
export SERVICE_NAME=devai-api

Ustaw zmienne środowiskowe wymagane do integracji z GitLab.

export GITLAB_PERSONAL_ACCESS_TOKEN=gitlab-token

Aby uniknąć ujawniania poufnych informacji w terminalu, najlepiej użyć polecenia read -s. Jest to bezpieczny sposób ustawiania zmiennych środowiskowych bez wyświetlania wartości w historii poleceń w konsoli. Po jego uruchomieniu musisz wkleić wartość i nacisnąć Enter.

To polecenie wymaga zaktualizowania identyfikatora użytkownika i nazwy repozytorium GitLab.

Przykład: export GITLAB_REPOSITORY="gitrey/qwiklabs-test"

119489def27115c8.png

export GITLAB_REPOSITORY="USERID/REPOSITORY"

Ustaw pozostałe zmienne środowiskowe:

export GITLAB_URL="https://gitlab.com"
export GITLAB_BRANCH="devai"
export GITLAB_BASE_BRANCH="main"

10. Konfiguracja śledzenia LangSmith LLM

Utwórz konto LangSmith i wygeneruj klucz interfejsu API usługi w sekcji Ustawienia. https://docs.smith.langchain.com/

Ustaw zmienne środowiskowe wymagane do integracji z LangSmith.

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"

export LANGCHAIN_API_KEY=langchain-service-api-key

11. Konfiguracja JIRA

Te wartości nie są używane w tym laboratorium, więc przed wykonaniem poleceń nie musisz ich zmieniać na wartości z Twojego projektu Jira.

Ustaw zmienne środowiskowe wymagane do wdrożenia usługi Cloud Run.

export JIRA_API_TOKEN=jira-token
export JIRA_USERNAME="YOUR-EMAIL"
export JIRA_INSTANCE_URL="https://YOUR-JIRA-PROJECT.atlassian.net"
export JIRA_PROJECT_KEY="YOUR-JIRA-PROJECT-KEY"
export JIRA_CLOUD=true

12. Wdrażanie interfejsu Devai-API w Cloud Run

Sprawdź, czy jesteś we właściwym folderze.

cd ~/github/genai-for-developers/devai-api

W tym laboratorium postępujemy zgodnie ze sprawdzonymi metodami i używamy usługi Secret Manager do przechowywania wartości klucza dostępu i klucza interfejsu LangChain API w Cloud Run oraz do odwoływania się do nich.

Zapisz token dostępu JIRA w usłudze Secret Manager.

echo -n $JIRA_API_TOKEN | \
 gcloud secrets create JIRA_API_TOKEN \
 --data-file=-

Zapisz token dostępu GitLab w usłudze Secret Manager.

echo -n $GITLAB_PERSONAL_ACCESS_TOKEN | \
 gcloud secrets create GITLAB_PERSONAL_ACCESS_TOKEN \
 --data-file=-

Przechowuj klucz API LangChain w Secret Managerze.

echo -n $LANGCHAIN_API_KEY | \
 gcloud secrets create LANGCHAIN_API_KEY \
 --data-file=-

Wdróż aplikację w Cloud Run.

gcloud run deploy "$SERVICE_NAME" \
  --source=. \
  --region="$LOCATION" \
  --allow-unauthenticated \
  --service-account vertex-client \
  --set-env-vars PROJECT_ID="$PROJECT_ID" \
  --set-env-vars LOCATION="$LOCATION" \
  --set-env-vars GITLAB_URL="$GITLAB_URL" \
  --set-env-vars GITLAB_REPOSITORY="$GITLAB_REPOSITORY" \
  --set-env-vars GITLAB_BRANCH="$GITLAB_BRANCH" \
  --set-env-vars GITLAB_BASE_BRANCH="$GITLAB_BASE_BRANCH" \
  --set-env-vars JIRA_USERNAME="$JIRA_USERNAME" \
  --set-env-vars JIRA_INSTANCE_URL="$JIRA_INSTANCE_URL" \
  --set-env-vars JIRA_PROJECT_KEY="$JIRA_PROJECT_KEY" \
  --set-env-vars JIRA_CLOUD="$JIRA_CLOUD" \
  --set-env-vars LANGCHAIN_TRACING_V2="$LANGCHAIN_TRACING_V2" \
  --update-secrets="LANGCHAIN_API_KEY=LANGCHAIN_API_KEY:latest" \
  --update-secrets="GITLAB_PERSONAL_ACCESS_TOKEN=GITLAB_PERSONAL_ACCESS_TOKEN:latest" \
  --update-secrets="JIRA_API_TOKEN=JIRA_API_TOKEN:latest" \
  --min-instances=1 \
  --max-instances=3

Odpowiedź Y: utwórz repozytorium Dockera w Artifact Registry.

Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in 
region [us-central1] will be created.

Do you want to continue (Y/n)?  y

Zapoznaj się z procesem gcloud run deploy SERVICE_NAME --source=. poniżej. Więcej informacji

5c122a89dd11822e.png

W tle to polecenie używa usług buildpacksCloud Build Google Cloud do automatycznego kompilowania obrazów kontenera z Twojego kodu źródłowego bez konieczności instalowania Dockera na komputerze ani konfigurowania pakietów kompilacji ani Cloud Build. Oznacza to, że jedno polecenie opisane powyżej wykonuje to samo, co wymagałoby użycia poleceń gcloud builds submitgcloud run deploy.

Jeśli podano plik Dockerfile(jak w tym repozytorium), usługa Cloud Build użyje go do kompilowania obrazów kontenera zamiast polegać na pakietach kompilacji, które automatycznie wykrywają i kompilują obrazy kontenera. Więcej informacji o pakietach kompilacji znajdziesz w dokumentacji.

Sprawdź dzienniki Cloud Build w konsoli.

Sprawdź utworzony obraz Dockera w Artifact Registry.

Otwórz cloud-run-source-deploy/devai-api i sprawdź luki w zabezpieczeniach, które zostały wykryte automatycznie. Sprawdź te, dla których dostępne są poprawki, i sprawdź, jak można je rozwiązać na podstawie opisu.

d00c9434b511be44.png

Sprawdź szczegóły instancji Cloud Run w Cloud Console.

Przetestuj punkt końcowy, wykonując polecenie curl.

curl -X POST \
   -H "Content-Type: application/json" \
   -d '{"prompt": "Create HTML, CSS and JavaScript using React.js framework to implement Login page with username and password fields, validation and documentation. Provide complete implementation, do not omit anything."}' \
   $(gcloud run services list --filter="(devai-api)" --format="value(URL)")/generate

(OPCJONALNA SEKCJA) Konfigurowanie Cloud Workstation

Cloud Workstations to zarządzane środowisko programistyczne w Google Cloud z wbudowanymi zabezpieczeniami i wstępnie skonfigurowanymi, ale konfigurowalnymi środowiskami programistycznymi. Zamiast wymagać od programistów instalowania oprogramowania i uruchamiania skryptów konfiguracyjnych, możesz utworzyć konfigurację stacji roboczej, która określa środowisko w sposób umożliwiający jego odtworzenie. Wszelkie aktualizacje konfiguracji stacji roboczej są automatycznie stosowane na stacjach roboczych przy następnym uruchomieniu. Programiści uzyskują dostęp do stacji roboczych za pomocą przeglądarkowego IDE, różnych lokalnych edytorów kodu (takich jak VSCode lub IDE JetBrains, np. IntelliJ IDEA Ultimate i PyCharm Professional) lub przez SSH.

Cloud Workstations używa tych zasobów Google Cloud do zarządzania środowiskami programistycznymi:

  • Klastry stacji roboczych definiują grupę stacji roboczych w danym regionie oraz sieć VPC, do której są one podłączone. Klastry stacji roboczych nie są powiązane z klastrami Google Kubernetes Engine (GKE).
  • Konfiguracje stacji roboczych działają jak szablony stacji roboczych. Konfiguracja stacji roboczej definiuje szczegóły, takie jak typ instancji maszyny wirtualnej stacji roboczej, trwałe miejsce na dane, środowisko definiujące obraz kontenera, IDE lub edytor kodu do użycia i inne. Administratorzy i zespoły platformy mogą też używać zasad zarządzania tożsamościami i dostępem (IAM) do przyznawania dostępu zespołom lub poszczególnym deweloperom.
  • Workstations to wstępnie skonfigurowane środowiska programistyczne, które zawierają Cloud IDE, narzędzia językowe, biblioteki i inne elementy. Stacje robocze można uruchamiać i zatrzymywać na żądanie oraz uruchamiać na maszynach wirtualnych Compute Engine w Twoim projekcie. Dołączony dysk trwały służy do przechowywania danych między sesjami.

Administratorzy i zespoły platformy tworzą konfiguracje stacji roboczych, które udostępniają zespołowi programistów. Każdy programista tworzy stację roboczą na podstawie konfiguracji stacji roboczej.

810ae08acb671f4c.png

W tym module używasz IDE w przeglądarce, ale Cloud Workstations obsługuje też inne popularne interfejsy programistyczne:

  • Możesz używać własnych lokalnych środowisk JetBrains IDE za pomocą JetBrains Gateway.
  • Jeśli używasz lokalnej wersji VSCode, możesz też uzyskać dostęp do stacji roboczych w celu zdalnego programowania za pomocą SSH.
  • Możesz też skonfigurować tunele SSH i TCP do stacji roboczej z komputera lokalnego.

fc95816682f1e3b0.png

(OPCJONALNA SEKCJA) Tworzenie klastra stacji roboczych

Te kroki zostały wykonane podczas konfiguracji laboratorium – nie musisz ich powtarzać.

Te czynności pokazują, jak skonfigurować klaster, konfigurację i stację roboczą Cloud Workstations.

Przeczytaj tę sekcję i przejdź do sekcji Forge Platform.

Tworzenie klastra stacji roboczych:

gcloud workstations clusters create ws-cluster --region=us-central1

Tworzenie konfiguracji stacji roboczych

gcloud workstations configs create devai-config \
--cluster=ws-cluster \
--machine-type=e2-standard-8 \
--region=us-central1 \
--running-timeout=21600 \
--idle-timeout=1800 \
--container-predefined-image=codeoss \
--pd-disk-size=200 \
--pd-disk-type=pd-standard \
--service-account=$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com \
--pool-size=1

Utwórz stację roboczą

gcloud workstations create devai-workstation \
--cluster=ws-cluster \
--config=devai-config \
--region=us-central1

Dostępne stacje robocze możesz wyświetlić w konsoli Google Cloud. Uruchom i otwórz aplikację „devai-workstation”.

e44784811890cfc8.png

Włącz „Gemini” w prawym dolnym rogu, postępuj zgodnie z procedurą logowania na nowej karcie przeglądarki i skopiuj wygenerowany kod z powrotem do konsoli, aby dokończyć logowanie.

Otwórz czat „Gemini” w panelu po lewej stronie i zapytaj Gemini:

You are a Cloud Workstations Product Manager, tell me about Cloud Workstations”.

You are Cloud Workstations Product Manager, Can I create my custom Cloud Workstations image with my company tools so new developers can onboard in minutes?”.

8c3af1ad4e612f15.png

(END OF OPTIONAL SECTION)

13. platforma Forge,

Forge to platforma, która umożliwia deweloperom tworzenie aplikacji integrujących się z usługami Atlassian, takimi jak Jira, Confluence, Compass i Bitbucket.

eda6f59ff15df25e.png

Instalowanie interfejsu wiersza poleceń Forge

Uruchom te polecenia w terminalu.

Pobierz menedżera wersji węzła ( nvm) i udostępnij go w ścieżce w bieżącej sesji terminala.

cd ~/github/genai-for-developers

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash


export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

Zainstaluj nvm.

Wybierz najnowszą wersję LTS Node.js, uruchamiając w terminalu to polecenie:

nvm install --lts
nvm use --lts

Zainstaluj interfejs wiersza poleceń Forge globalnie, wykonując to polecenie:

npm install -g @forge/cli

W tym module do logowania użyjemy zmiennych środowiskowych.

e4e4e59cf8622e3f.png

Konfigurowanie projektu JIRA

Utwórz lub wyświetl projekty JIRA za pomocą swojego konta osobistego.

Sprawdź istniejące projekty JIRA: https://admin.atlassian.com/

Utwórz nowy projekt JIRA za pomocą swojego konta osobistego.

Otwórz stronę https://team.atlassian.com/your-work i kliknij 8654143154cb8665.png, a następnie wybierz 47b253090a08932.png. Następnie wybierz „JIRA Software” – „Wypróbuj teraz”. Postępuj zgodnie z instrukcjami, aby utworzyć projekt lub stronę.

5bab2a96e3b81383.png

Wybierz JIRA Software.

785bc4d8bf920403.png

Utwórz nowy projekt.

8a6e7cdc8224ffa0.png

14. Token interfejsu Atlassian API

Aby zalogować się w interfejsie wiersza poleceń, utwórz token API Atlassian lub użyj istniejącego.

Podczas wykonywania poleceń interfejs wiersza poleceń używa Twojego tokena.

  1. Otwórz stronę https://id.atlassian.com/manage/api-tokens.
  2. Kliknij Utwórz token API.
  3. Wpisz etykietę opisującą token API. Na przykład forge-api-token.
  4. Kliknij Utwórz.
  5. Kliknij Kopiuj do schowka i zamknij okno.

Uruchom to polecenie w terminalu Cloud Workstations.

Aby zacząć używać poleceń Forge, zaloguj się w Forge CLI.

Ustaw adres e-mail JIRA/FORGE. Zastąp go swoim adresem e-mail.

export FORGE_EMAIL=your-email

Ustaw token API Forge. Zastąp go swoim tokenem API JIRA.

export FORGE_API_TOKEN=your-jira-api-token

Przetestuj interfejs wiersza poleceń Forge, uruchamiając podane niżej polecenie. Gdy pojawi się prośba o zbieranie danych analitycznych, odpowiedz „No”.

forge settings set usage-analytics false

Sprawdź, czy jesteś zalogowany(-a).

forge whoami

Przykładowe dane wyjściowe.

Logged in as John Green (johngreen@email.com)
Account ID: 123090:aaabbcc-076a-455c-99d0-d1aavvccdd

Tworzenie aplikacji Forge

Sprawdź, czy jesteś w folderze „~/github/genai-for-developers”.

Uruchom polecenie, aby utworzyć aplikację Forge.

forge create

Gdy pojawi się prośba, wpisz te wartości:

  • Nazwa aplikacji: devai-jira-ui-qwiklabs
  • Wybierz kategorię: UI Kit
  • Wybierz usługę: Jira
  • Wybierz szablon: jira-issue-panel

bc94e2da059f15cf.png

Przejdź do folderu aplikacji.

cd devai-jira-ui-qwiklabs/

Uruchom polecenie wdrażania.

forge deploy

Przykładowe dane wyjściowe:

Deploying your app to the development environment.
Press Ctrl+C to cancel.

Running forge lint...
No issues found.

✔ Deploying devai-jira-ui-qwiklabs to development...

ℹ Packaging app files
ℹ Uploading app
ℹ Validating manifest
ℹ Snapshotting functions
ℹ Deploying to environment

✔ Deployed

Deployed devai-jira-ui-qwiklabs to the development environment.

Zainstaluj aplikację.

forge install

Gdy pojawi się prośba, wpisz te wartości:

  • Wybierz usługę: Jira
  • Wpisz adres URL witryny: your-domain.atlassian.net

Przykładowe dane wyjściowe:

Select the product your app uses.

? Select a product: Jira

Enter your site. For example, your-domain.atlassian.net

? Enter the site URL: genai-for-developers.atlassian.net

Installing your app onto an Atlassian site.
Press Ctrl+C to cancel.

? Do you want to continue? Yes

✔ Install complete!

Your app in the development environment is now installed in Jira on genai-for-developers.atlassian.net

Otwórz witrynę JIRA i utwórz nowe zadanie JIRA o następującym opisie:

Create HTML, CSS and JavaScript using React.js framework to implement Login page with username and password fields, validation and documentation. Provide complete implementation, do not omit anything.

Gdy otworzysz zadanie, zobaczysz przycisk „devai-jira-ui-qwiklabs”.

Kliknij przycisk i sprawdź zmiany w interfejsie.

88f6dd543827543.png

Wyświetlanie logów backendu Forge.

forge logs

Konsola dewelopera Atlassian

Możesz też wyświetlać w konsoli dla deweloperów Atlassian wdrożone aplikacje i nimi zarządzać.

6a0e6ea177054fe6.png

Sprawdzanie dzienników – przełącz się na środowisko Development,

56a7f74de6d2a01d.png

Sprawdzanie pliku manifestu i kodu źródłowego aplikacji Forge

Otwórz plik „devai-jira-ui-qwiklabs/manifest.yml” i użyj Gemini Code Assist, aby go wyjaśnić.

4a4377922ab9a927.png

Zapoznaj się z wyjaśnieniem.

5dd53138212dc686.png

Otwórz te pliki i poproś Gemini Code Assist o ich wyjaśnienie:

  • devai-jira-ui-qwiklabs/src/frontend/index.jsx
  • devai-jira-ui-qwiklabs/src/resolvers/index.js

c99f48a5bf624501.png

Aktualizacja aplikacji Forge za pomocą punktu końcowego DevAI API Cloud Run

Sprawdź, czy ustawiony jest identyfikator projektu GCP:

gcloud config get project

Jeśli nie, skonfiguruj projekt GCP, korzystając z identyfikatora projektu na stronie laboratorium Qwiklabs:

Przykład: qwiklabs-gcp-00-2c10937585bb

gcloud config set project YOUR_QWIKLABS_PROJECT_ID

Ustaw adres URL usługi Cloud Run:

export DEVAI_API_URL=$(gcloud run services list --filter="(devai-api)" --format="value(URL)")

forge variables set DEVAI_API_URL $DEVAI_API_URL

Aby to potwierdzić, uruchom to polecenie:

forge variables list

Przykładowe dane wyjściowe

fb337c19c9009ac5.png

Aktualizowanie pliku manifestu i kodu aplikacji Forge

Te fragmenty kodu znajdziesz w repozytorium w folderze sample-devai-jira-ui.

Otwórz plik manifestu w edytorze: devai-jira-ui-qwiklabs/manifest.yml

Dodaj wiersze poniżej na końcu pliku – zastąp punkt końcowy Cloud Run tym, który został przez Ciebie wdrożony.

permissions:
  scopes:
    - read:jira-work
    - write:jira-work
  external:
    fetch:
      client:
        - devai-api-gjerpi6qqq-uc.a.run.app/generate # replace with YOUR CLOUD RUN URL

Otwórz plik resolverów/indeksów w edytorze: devai-jira-ui-qwiklabs/src/resolvers/index.js

Dodaj wiersze pod istniejącą funkcją getText.

resolver.define('getApiKey', (req) => {
  return process.env.LLM_API_KEY;
});

resolver.define('getDevAIApiUrl', (req) => {
  return process.env.DEVAI_API_URL;
});

Otwórz w edytorze plik front-endu lub indeksu: devai-jira-ui-qwiklabs/src/frontend/index.jsx

Zastąp index.jsx treścią poniżej. Zaktualizuj link do identyfikatora użytkownika lub repozytorium GitLab.

Musisz zaktualizować identyfikator użytkownika i repozytorium Git w 2 miejscach.

W pliku odszukaj ten wiersz i wprowadź zmiany:

https://gitlab.com/YOUR-GIT-USERID/YOUR-GIT-REPO/-/merge_requests

import React from 'react';
import ForgeReconciler, { Text, Link, useProductContext } from '@forge/react';
import { requestJira } from '@forge/bridge';
import { invoke } from '@forge/bridge';
import api, { route, assumeTrustedRoute } from '@forge/api';

// const apiKey = await invoke("getApiKey")
const devAIApiUrl = await invoke("getDevAIApiUrl")


const App = () => {
  const context = useProductContext();

  const [description, setDescription] = React.useState();

  const fetchDescriptionForIssue = async () => {
    const issueId = context?.extension.issue.id;
  
    const res = await requestJira(`/rest/api/2/issue/${issueId}`);
    const data = await res.json();
    
    // const genAI = new GoogleGenerativeAI(apiKey);
    // const model = genAI.getGenerativeModel({ model: "gemini-pro"});
    // const prompt = `You are principal software engineer at Google and given requirements below to implement.\nPlease provide implementation details and documentation.\n\nREQUIREMENTS:\n\n${data.fields.description}`
    // const result = await model.generateContent(prompt);
    // const text = result.response.text();
    // const jsonText = JSON.stringify(text);

    const bodyGenerateData = `{"prompt": ${JSON.stringify(data.fields.description)}}`;

    const generateRes = await api.fetch(devAIApiUrl+'/generate',
      {
        body: bodyGenerateData,
        method: 'post',
        headers: { 'Content-Type': 'application/json' },
      }
    )


    const resData = await generateRes.text();
    const jsonText = JSON.stringify(resData);

    const bodyData = `{
      "body": ${jsonText}
    }`;

    console.log("bodyData", bodyData)
    // Add Gemini response as a comment on the JIRA issue
    await requestJira(`/rest/api/2/issue/${issueId}/comment`, {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      },
      body: bodyData
    });
    // Add link to the GitLab merge request page as a comment
    await requestJira(`/rest/api/2/issue/${issueId}/comment`, {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      },
      body: `{"body": "[GitLab Merge Request|https://gitlab.com/YOUR-GIT-USERID/YOUR-GIT-REPO/-/merge_requests]"}`
    });


    return "Response will be added as a comment. Please refresh in a few moments.";
  };

  React.useEffect(() => {
    if (context) {
      fetchDescriptionForIssue().then(setDescription);
    }
  }, [context]);

  return (
    <>
      <Text>{description}</Text>
      <Link href='https://gitlab.com/YOUR-GIT-USERID/YOUR-GIT-REPO/-/merge_requests' openNewTab={true}>GitLab Merge Request</Link>
    </>
  );
};

ForgeReconciler.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

Wdrażanie ponownie aplikacji Forge

Dodaj zależności w pliku package.json:

"@forge/api": "4.0.0",

Zainstaluj zależności:

npm install

Wdróż zaktualizowaną aplikację:

forge deploy

Przykładowe dane wyjściowe:

ℹ Uploading app
ℹ Validating manifest
ℹ Snapshotting functions
ℹ Deploying to environment

✔ Deployed

Deployed devai-jira-ui-qwiklabs to the development environment.

We've detected new scopes or egress URLs in your app.
Run forge install --upgrade and restart your tunnel to put them into effect.

Instalowanie zaktualizowanej aplikacji:

forge install --upgrade

ef17c7da9b2962d8.png

Przykładowe dane wyjściowe:

Upgrading your app on the Atlassian site.

Your app will be upgraded with the following additional scopes:
- read:jira-work
- write:jira-work

Your app will exchange data with the following urls:
- devai-api-7su2ctuqpq-uc.a.run.app

? Do you want to continue? Yes

✔ Upgrade complete!

Your app in the development environment is now the latest in Jira on genai-for-developers.atlassian.net.

Aplikacja Test Forge

Otwórz istniejące zadanie JIRA lub utwórz nowe w projekcie JIRA.

Jeśli poprzedni panel został już dodany, musisz go usunąć.

Kliknij ... i w menu wybierz usuń. Następnie możesz ponownie kliknąć przycisk.

1adca6205af0f0c6.png

Sprawdzanie komentarzy w Jira

Gdy otrzymasz odpowiedź z DEVAI API, do problemu w JIRA zostaną dodane 2 komentarze.

  • Prośba o połączenie w GitLab
  • Szczegóły implementacji historii użytkownika w Gemini

Aby odświeżyć widok, przełącz się między kartami „History” i „Comments”.

e3f38114330d504f.png

Włączanie tworzenia żądań scalania w GitLab

Otwórz plik devai-api/app/routes.py i usuń znaczniki komentarza z podanych niżej wierszy w metodie generate_handler:

print(f"{response.text}\n")

    # resp_text = response.candidates[0].content.parts[0].text

    # pr_prompt = f"""Create GitLab merge request using provided details below.
    # Create new files, commit them and push them to opened merge request.
    # When creating new files, remove the lines that start with ``` before saving the files.

    # DETAILS: 
    # {resp_text}
    # """

    # print(pr_prompt)
    # agent.invoke(pr_prompt)

Wdrażanie aplikacji Cloud Run

Sprawdź, czy jesteś we właściwym folderze.

cd ~/github/genai-for-developers/devai-api

Jeśli używasz tej samej sesji terminala, wszystkie zmienne środowiskowe mogą być nadal ustawione.

Aby to sprawdzić, uruchom w terminalu polecenie „echo $GITLAB_REPOSITORY”.

Jeśli została otwarta nowa sesja terminala, wykonaj te czynności, aby je zresetować.

Przed ponownym wdrożeniem aplikacji zresetuj wymagane zmienne środowiskowe.

To polecenie wymaga zaktualizowania identyfikatora użytkownika i nazwy repozytorium GitLab.

export GITLAB_REPOSITORY="USERID/REPOSITORY"

Ustaw pozostałe zmienne środowiskowe:

export GITLAB_URL="https://gitlab.com"
export GITLAB_BRANCH="devai"
export GITLAB_BASE_BRANCH="main"

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"

export LOCATION=us-central1
export REPO_NAME=devai-api
export SERVICE_NAME=devai-api
export PROJECT_ID=$(gcloud config get-value project)

export JIRA_USERNAME="YOUR-EMAIL"
export JIRA_INSTANCE_URL="https://YOUR-JIRA-PROJECT.atlassian.net"
export JIRA_PROJECT_KEY="YOUR-JIRA-PROJECT-KEY"
export JIRA_CLOUD=true

Narzędzia GitLab będą używać gałęzi „devai”, aby przesłać zmiany do prośby o scalanie.

Sprawdź, czy ta gałąź została już utworzona.

Wdróż aplikację w Cloud Run.

gcloud run deploy "$SERVICE_NAME" \
  --source=. \
  --region="$LOCATION" \
  --allow-unauthenticated \
  --service-account vertex-client \
  --set-env-vars PROJECT_ID="$PROJECT_ID" \
  --set-env-vars LOCATION="$LOCATION" \
  --set-env-vars GITLAB_URL="$GITLAB_URL" \
  --set-env-vars GITLAB_REPOSITORY="$GITLAB_REPOSITORY" \
  --set-env-vars GITLAB_BRANCH="$GITLAB_BRANCH" \
  --set-env-vars GITLAB_BASE_BRANCH="$GITLAB_BASE_BRANCH" \
  --set-env-vars JIRA_USERNAME="$JIRA_USERNAME" \
  --set-env-vars JIRA_INSTANCE_URL="$JIRA_INSTANCE_URL" \
  --set-env-vars JIRA_PROJECT_KEY="$JIRA_PROJECT_KEY" \
  --set-env-vars JIRA_CLOUD="$JIRA_CLOUD" \
  --set-env-vars LANGCHAIN_TRACING_V2="$LANGCHAIN_TRACING_V2" \
  --update-secrets="LANGCHAIN_API_KEY=LANGCHAIN_API_KEY:latest" \
  --update-secrets="GITLAB_PERSONAL_ACCESS_TOKEN=GITLAB_PERSONAL_ACCESS_TOKEN:latest" \
  --update-secrets="JIRA_API_TOKEN=JIRA_API_TOKEN:latest" \
  --min-instances=1 \
  --max-instances=3

Weryfikacja kompleksowej integracji

Uruchom proces z zadania JIRA, klikając ponownie przycisk, i sprawdź dane wyjściowe w repozytorium GitLab w sekcji Prośba o łączenie i LangSmith.

Szczegóły prośby o scalanie w GitLab

1cd438a10b4ce2b3.png

db6dc6c9a46e8f7b.png

Ślady LangSmith LLM

Otwórz portal LangSmith i sprawdź ślad LLM dla wywołania funkcji tworzenia problemu w JIRA.

Przykładowy ślad LangSmith LLM.

1ae0f88ab885f69.png

(OPISYWAĆ OPCJONALNIE) Przesyłanie zmian do repozytorium GitHub

Otwórz stronę GitHub i utwórz nowe repozytorium, aby przesłać zmiany z tego laboratorium do swojego osobistego repozytorium.

Wróć do instancji Cloud Workstations i ustaw w terminalu nazwę użytkownika i adres e-mail Git.

Zaktualizuj wartości przed uruchomieniem poleceń.

git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"

Wygeneruj klucz SSH i dodaj go do repozytorium GitHub.

Zaktualizuj adres e-mail przed uruchomieniem poleceń.

Nie wpisuj hasła i nie naciskaj klawisza Enter wielokrotnie, aby utworzyć klucz.

ssh-keygen -t ed25519 -C "your-email-address"
eval "$(ssh-agent -s)"

ssh-add ~/.ssh/id_ed25519

cat ~/.ssh/id_ed25519.pub

Dodaj wygenerowany klucz publiczny do swojego konta GitHub.

Otwórz https://github.com/settings/keys i kliknij „New SSH key”.

Jako nazwy klucza użyj „qwiklabs-key” i skopiuj/wklej dane wyjściowe z ostatniego polecenia.

Wróć do terminala, zatwierdź i prześlij zmiany.

cd ~/github/genai-for-developers

git remote rm origin

Ustaw zdalne źródło za pomocą utworzonego powyżej repozytorium.

Zastąp adresem URL repozytorium.

git remote add origin git@github.com:YOUR-GITHUB-USERID/YOUR-GITHUB-REPO.git

Dodaj, zatwierdź i prześlij zmiany.

git add .

git commit -m "lab changes"

git push -u origin main

15. Gratulacje!

Gratulacje! Masz ukończony ten moduł.

Omówione zagadnienia:

  • Jak wdrażać aplikacje Cloud Run w celu integracji z interfejsami Gemini API.
  • Jak utworzyć i wdrożyć aplikację Atlassian Forge dla JIRA.
  • Jak używać agentów LangChain ReAct do automatyzacji zadań GitLab
  • Jak przeglądać ścieżki LLM w LangSmith

Co dalej:

  • Wkrótce odbędą się kolejne praktyczne sesje.

Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, możesz usunąć projekt zawierający te zasoby lub zachować projekt i usunąć poszczególne zasoby.

Usuwanie projektu

Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby tego samouczka.

©2024 Google LLC. Wszelkie prawa zastrzeżone. Google i logo Google są znakami towarowymi Google LLC. Wszelkie inne nazwy firm i produktów mogą być znakami towarowymi odpowiednich podmiotów, z którymi są powiązane.