Реализация пользовательских историй JIRA с помощью GenAI

1. Обзор

В ходе этой лабораторной работы вы создадите решение для автоматизации реализации историй использования JIRA с помощью GenAI.

5351e028356cd3ac.png

Что вы узнаете

Лаборатория состоит из нескольких основных частей:

  • Разверните приложение Cloud Run для интеграции с API Gemini.
  • Создайте и разверните приложение Atlassian Forge для JIRA.
  • Агенты LangChain ReAct для автоматизации задач GitLab

Предварительные условия

  • Эта лабораторная работа предполагает знакомство со средами Cloud Console и Cloud Shell.

2. Настройка и требования

Настройка облачного проекта

  1. Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как PROJECT_ID ). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта.
  • К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
  1. Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой кодовой лаборатории не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Настройка среды

Откройте чат Близнецов.

bc3c899ac8bcf488.png

Или введите «Спросить Близнецов» в строке поиска.

e1e9ad314691368a.png

Включите Cloud AI Companion API:

66cb6e561e384bbf.png

Нажмите « Start chatting » и ответьте на один из примеров вопросов или введите собственное приглашение, чтобы попробовать его.

5482c153eef23126.png

Предлагает попробовать:

  • Объясните Cloud Run в 5 ключевых моментах.
  • Вы являетесь менеджером по продукту Google Cloud Run и объясните студенту Cloud Run в 5 коротких ключевых моментах.
  • Вы являетесь менеджером по продукту Google Cloud Run и объясните Cloud Run сертифицированному разработчику Kubernetes в 5 коротких ключевых моментах.
  • Вы являетесь менеджером по продукту Google Cloud Run и объясните старшему разработчику, когда вы будете использовать Cloud Run, а не GKE, в пяти кратких ключевых моментах.

Ознакомьтесь с Руководством по подсказкам, чтобы узнать больше о написании более эффективных подсказок.

Как Gemini для Google Cloud использует ваши данные

Обязательства Google по конфиденциальности

Google был одним из первых в отрасли, кто опубликовал обязательство по обеспечению конфиденциальности в области искусственного интеллекта и машинного обучения , в котором отражено наше убеждение в том, что клиенты должны иметь высочайший уровень безопасности и контроля над своими данными , хранящимися в облаке.

Данные, которые вы отправляете и получаете

Вопросы, которые вы задаете Gemini, включая любую входную информацию или код, который вы отправляете Gemini для анализа или завершения, называются подсказками. Ответы или дополнения кода, которые вы получаете от Gemini, называются откликами. Gemini не использует ваши подсказки или ответы в качестве данных для обучения своих моделей .

Шифрование подсказок

Когда вы отправляете запросы в Gemini, ваши данные при передаче шифруются и становятся входными данными для базовой модели в Gemini.

Данные программы, генерируемые Gemini

Gemini обучается на собственном коде Google Cloud, а также на выбранном стороннем коде. Вы несете ответственность за безопасность, тестирование и эффективность вашего кода , включая любое завершение, генерацию или анализ кода, которые предлагает вам Gemini.

Узнайте больше, как Google обрабатывает ваши запросы.

3. Варианты проверки подсказок

У вас есть несколько вариантов проверки подсказок.

Vertex AI Studio — это часть платформы Vertex AI от Google Cloud, специально разработанная для упрощения и ускорения разработки и использования генеративных моделей искусственного интеллекта.

Google AI Studio — это веб-инструмент для создания прототипов и экспериментов с быстрым проектированием и API Gemini.

Веб-приложение Google Gemini (gemini.google.com) — это веб-инструмент, разработанный, чтобы помочь вам изучить и использовать возможности моделей искусственного интеллекта Gemini от Google.

4. (НЕОБЯЗАТЕЛЬНЫЙ РАЗДЕЛ) Создать учетную запись службы.

Эти шаги были выполнены во время лабораторной настройки — вам не нужно их выполнять.

Эти шаги включены, чтобы показать, как настроить учетную запись службы и роли IAM.

Вернитесь в Google Cloud Console и активируйте Cloud Shell, щелкнув значок справа от панели поиска.

3e0c761ca41f315e.png

В открывшемся терминале выполните следующие команды, чтобы создать новую учетную запись службы и ключи.

Вы будете использовать эту учетную запись службы для вызовов API Vertex AI Gemini API из приложения Cloud Run.

Настройте детали проекта, используя сведения о проекте Qwiklabs.

Пример: qwiklabs-gcp-00-2c10937585bb

gcloud config set project YOUR_QWIKLABS_PROJECT_ID

Создайте учетную запись службы и назначьте роли.

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

Если будет предложено авторизоваться, нажмите «Авторизовать», чтобы продолжить.

6356559df3eccdda.png

Включите необходимые службы для использования API-интерфейсов Vertex AI и чата Gemini.

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

Включите необходимые службы для использования API-интерфейсов Vertex AI и чата 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

(КОНЕЦ НЕОБЯЗАТЕЛЬНОГО РАЗДЕЛА)

5. Предоставьте доступ к облачным рабочим станциям.

Откройте облачные рабочие станции в облачной консоли .

Предоставьте доступ к Cloud Workstation подготовленному учащемуся Qwiklabs.

Скопируйте имя пользователя/адрес электронной почты Qwiklabs, созданное для этого проекта, и используйте его для добавления участника. Выберите рабочую станцию ​​и нажмите « PERMISSIONS ».

Подробности см. ниже.

5cbb861e4f272f7.png

Нажмите кнопку « ADD PRINCIPAL ».

Вставьте адрес электронной почты учащегося Qwiklabs и выберите роль « Cloud Workstations User ».

dfe53b74453d80b1.png

Нажмите « Start », а затем « Launch », чтобы открыть рабочую станцию, и выполните следующие шаги, используя встроенный терминал.

62dccf5c78880ed9.png

Клонировать репозиторий GitHub

Создайте папку и клонируйте репозиторий GitHub.

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

С помощью пункта меню « File / Open Folder » откройте « github/genai-for-developers ».

6. Включите Помощник по коду Gemini

Нажмите на значок «Gemini», в правом нижнем углу нажмите « Login to Google Cloud ».

4a7f4640f66037f.png

8d31b61e23ebea2.png

Нажмите ссылку в терминале, чтобы начать процесс авторизации.

d8575b4066f67745.png

Нажмите «Открыть», чтобы перейти по ссылке.

3a7272fcb985ff5.png

Выберите свою студенческую учетную запись Qwiklabs и нажмите «Войти» на следующем экране.

79dc63009ce0ed49.png

Скопируйте код подтверждения:

403845a5abc53635.png

Вернитесь к терминалу и вставьте код.

5931f639fe69f5cb.png

Дождитесь завершения аутентификации, а затем нажмите «Выбрать проект Google».

614beb055f7aa5e8.png

Во всплывающем окне выберите свой проект Qwiklabs.

Пример:

70ae6837db397e2a.png

Откройте файл « devai-api/app/routes.py », затем щелкните правой кнопкой мыши в любом месте файла и выберите « Gemini > Explain this" в контекстном меню.

32b902134440b7c3.png

Просмотрите объяснение Gemini для выбранного файла.

f78bfee770f6be93.png

7. Наборы инструментов LangChain

Наборы инструментов LangChain — это наборы инструментов, предназначенные для оптимизации и улучшения разработки приложений с помощью LangChain. Они предлагают различные функциональные возможности в зависимости от конкретного набора инструментов, но в целом они помогают:

  • Подключение к внешним источникам данных : доступ и включение информации из API, баз данных и других внешних источников в ваши приложения LangChain.
  • Расширенные методы подсказок . Используйте готовые подсказки или создавайте собственные для оптимизации взаимодействия с языковыми моделями.
  • Создание цепочек и управление ими . Легко создавайте сложные цепочки и эффективно управляйте ими.
  • Оценка и мониторинг : анализируйте производительность ваших приложений и цепочек LangChain.

Некоторые популярные наборы инструментов LangChain включают:

  • Наборы инструментов Agent Executor : инструменты для разработки агентов, которые могут взаимодействовать с реальным миром посредством таких действий, как просмотр веб-страниц или выполнение кода.
  • Набор инструментов для разработки подсказок : набор ресурсов для создания эффективных подсказок.

Инструментарий GitLab

В этой лабораторной работе вы будете использовать GitLab Toolkit для автоматизации создания мерж-реквестов GitLab.

Набор инструментов Gitlab содержит инструменты, которые позволяют агенту LLM взаимодействовать с репозиторием gitlab. Этот инструмент представляет собой оболочку библиотеки python-gitlab .

Инструментарий GitLab может выполнять следующие задачи:

  • Создать файл — создает новый файл в репозитории.
  • Read File – читает файл из репозитория.
  • Обновить файл — обновляет файл в репозитории.
  • Создать запрос на включение — создает запрос на включение из рабочей ветки бота в базовую ветку.
  • Get Issue s — извлекает задачи из репозитория.
  • Получить проблему — получает подробную информацию о конкретной проблеме.
  • Комментарий к проблеме — публикует комментарий по конкретной проблеме.
  • Удалить файл – удаляет файл из репозитория.

8. Конфигурация репозитория GitLab и набора инструментов

Откройте GitLab , создайте новый общедоступный проект и настройте токен доступа к проекту в разделе « Settings / Access Tokens ».

Используйте следующие данные:

  • Имя токена: devai-api-qwiklabs
  • Роль: Maintainer
  • Выберите области: api

112008c7894c3a19.png

Скопируйте и вставьте значение токена доступа во временный файл на вашем ноутбуке, оно будет использоваться на следующих шагах.

Создайте новую ветку « devai » отдельно от ветки « main » в разделе « Code / Branches ».

485d4709b085dc2e.png

9. Подготовьтесь к развертыванию приложения в Cloud Run.

Вернитесь к экземпляру Cloud Workstations и используйте существующий или откройте новый терминал.

9f9682d2b7317e66.png

Получите учетные данные доступа для своей учетной записи пользователя через веб-процесс авторизации.

Нажмите на ссылку и следуйте инструкциям по созданию кода подтверждения.

gcloud auth login

Настройте детали проекта, используя сведения о проекте Qwiklabs.

Пример: qwiklabs-gcp-00-2c10937585bb

gcloud config set project YOUR-QWIKLABS-PROJECT-ID

Установите остальные переменные среды:

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

Установите переменные среды, необходимые для интеграции с GitLab.

export GITLAB_PERSONAL_ACCESS_TOKEN=gitlab-token

Чтобы избежать раскрытия конфиденциальной информации в терминале, лучше всего использовать read -s Это безопасный способ установить переменные среды без отображения значений в истории команд консоли. После запуска вам нужно вставить значение и нажать Enter.

Эта команда требует от вас обновить идентификатор пользователя GitLab и имя репозитория.

Пример: export GITLAB_REPOSITORY="gitrey/qwiklabs-test"

119489def27115c8.png

export GITLAB_REPOSITORY="USERID/REPOSITORY"

Установите остальные переменные среды:

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

10. Конфигурация трассировки LangSmith LLM

Создайте учетную запись LangSmith и сгенерируйте ключ API службы в разделе «Настройки». https://docs.smith.langchain.com/

Установите переменные среды, необходимые для интеграции LangSmith.

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

export LANGCHAIN_API_KEY=langchain-service-api-key

11. Конфигурация JIRA

Эти значения не используются в этой лабораторной работе, поэтому вам не нужно обновлять их до значений вашего конкретного проекта JIRA перед выполнением команд.

Установите переменные среды, необходимые для развертывания службы 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"

12. Развертывание Devai-API в Cloud Run

Убедитесь, что вы находитесь в правильной папке.

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

В этой лабораторной работе мы следуем передовым практикам и используем Secret Manager для хранения и ссылки на значения токена доступа и ключа API LangChain в Cloud Run.

Сохраните токен доступа JIRA в диспетчере секретов.

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

Сохраните токен доступа GitLab в диспетчере секретов.

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

Сохраните ключ API LangChain в диспетчере секретов.

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

Разверните приложение в Cloud Run.

gcloud beta 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 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 \
  --service-min-instances=1

Ответьте Y , чтобы создать репозиторий Docker 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

Просмотрите gcloud run deploy SERVICE_NAME --source=. поток ниже. Узнать больше .

5c122a89dd11822e.png

За кулисами эта команда использует buildpacks Google Cloud и Cloud Build для автоматического создания образов контейнеров из вашего исходного кода без необходимости устанавливать Docker на ваш компьютер или настраивать пакеты сборки или Cloud Build. То есть одна описанная выше команда делает то, что в противном случае потребовало бы команд gcloud builds submit и команд gcloud run deploy .

Если вы предоставили Dockerfile (что мы и сделали в этом репозитории), Cloud Build будет использовать его для создания образов контейнеров, а не полагаться на пакеты сборки для автоматического обнаружения и создания образов контейнеров. Чтобы узнать больше о сборочных пакетах, ознакомьтесь с документацией .

Просмотрите журналы Cloud Build в консоли .

Просмотрите созданный образ Docker в реестре артефактов .

Откройте cloud-run-source-deploy/devai-api и просмотрите уязвимости, которые были обнаружены автоматически. Проверьте те, у которых есть доступные исправления, и посмотрите, как их можно исправить, на основе описания.

d00c9434b511be44.png

Просмотрите сведения об экземпляре Cloud Run в Cloud Console .

Проверьте конечную точку, выполнив команду 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

(ДОПОЛНИТЕЛЬНЫЙ РАЗДЕЛ) Настройка облачной рабочей станции

Cloud Workstations предоставляет управляемые среды разработки в Google Cloud со встроенной безопасностью и предварительно настроенными, но настраиваемыми средами разработки. Вместо того, чтобы требовать от разработчиков установки программного обеспечения и запуска сценариев установки, вы можете создать конфигурацию рабочей станции, которая воспроизводимо определяет вашу среду. Любые обновления конфигурации рабочей станции автоматически применяются к рабочим станциям при следующем запуске. Разработчики получают доступ к рабочим станциям через IDE на основе браузера, из нескольких локальных редакторов кода (таких как VSCode или IDE JetBrains, например IntelliJ IDEA Ultimate и PyCharm Professional) или через SSH.

Cloud Workstations использует следующие ресурсы Google Cloud для управления средами разработки:

  • Кластеры рабочих станций определяют группу рабочих станций в определенном регионе и сеть VPC, к которой они подключены. Кластеры рабочих станций не связаны с кластерами Google Kubernetes Engine (GKE).
  • Конфигурации рабочих станций действуют как шаблоны для рабочих станций. Конфигурация рабочей станции определяет такие детали, как тип экземпляра виртуальной машины (ВМ) рабочей станции, постоянное хранилище, среду определения образа контейнера, какую среду IDE или редактор кода использовать и многое другое. Администраторы и команды платформы также могут использовать правила управления идентификацией и доступом (IAM), чтобы предоставить доступ командам или отдельным разработчикам.
  • Рабочие станции — это предварительно настроенные среды разработки, которые предоставляют облачную IDE, языковые инструменты, библиотеки и многое другое. Рабочие станции можно запускать или останавливать по требованию и запускать на виртуальных машинах Compute Engine в вашем проекте с подключенным постоянным диском для хранения данных между сеансами.

Администраторы и команды платформы создают конфигурации рабочих станций, которыми они делятся со своей командой разработчиков. Каждый разработчик создает рабочую станцию ​​на основе конфигурации рабочей станции.

810ae08acb671f4c.png

В этой лабораторной работе вы используете IDE на основе браузера, но облачные рабочие станции также поддерживают другие распространенные интерфейсы разработки:

  • Вы можете использовать свои собственные локальные IDE JetBrains через JetBrains Gateway.
  • Если вы используете Local VSCode , вы также можете получить доступ к своим рабочим станциям для удаленной разработки через SSH.
  • Вы также можете настроить SSH и даже TCP-туннели к вашей рабочей станции со своего локального компьютера.

fc95816682f1e3b0.png

(ДОПОЛНИТЕЛЬНЫЙ РАЗДЕЛ) Создание кластера рабочих станций

Эти шаги были выполнены во время лабораторной настройки — вам не нужно их выполнять.

Эти шаги включены, чтобы показать, как настроить кластер, конфигурацию и рабочую станцию ​​облачных рабочих станций.

Просмотрите этот раздел и перейдите в раздел «Платформа Forge».

Создайте кластер рабочих станций:

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

Создать конфигурацию рабочих станций

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

Создать рабочую станцию

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

Просмотрите доступные рабочие станции в Cloud Console . Запустите и запустите « devai-workstation ».

e44784811890cfc8.png

Включите « Gemini » в правом нижнем углу, следуйте инструкциям по входу в новую вкладку браузера и скопируйте сгенерированный код обратно в консоль, чтобы завершить вход.

Откройте чат « 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

(КОНЕЦ НЕОБЯЗАТЕЛЬНОГО РАЗДЕЛА)

13. Кузница платформы

Forge — это платформа, которая позволяет разработчикам создавать приложения, интегрируемые с продуктами Atlassian, такими как Jira, Confluence, Compass и Bitbucket.

eda6f59ff15df25e.png

Установите Forge CLI

Запустите команды ниже в терминале.

Загрузите Node Version Manager ( nvm ) и сделайте его доступным по пути в текущем сеансе терминала.

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

Установите НВМ.

Выберите последнюю версию Node.js LTS, выполнив в терминале следующую команду:

nvm install --lts
nvm use --lts

Установите Forge CLI глобально, выполнив:

npm install -g @forge/cli

В этой лабораторной работе мы будем использовать переменные среды для входа в систему.

e4e4e59cf8622e3f.png

Настройка проекта JIRA

Используйте свою личную учетную запись для создания/просмотра проектов JIRA.

Просмотрите существующие проекты JIRA: https://admin.atlassian.com/

Создайте новый проект JIRA, используя свою личную учетную запись.

Перейдите на https://team.atlassian.com/your-work и нажмите 8654143154cb8665.png а затем выберите 47b253090a08932.png . После этого выберите «Программное обеспечение JIRA» — «Попробовать сейчас». Следуйте инструкциям для завершения создания проекта/сайта.

5bab2a96e3b81383.png

Выберите Программное обеспечение JIRA.

785bc4d8bf920403.png

Создайте новый проект.

8a6e7cdc8224ffa0.png

14. Токен Atlassian API

Создайте или используйте существующий токен Atlassian API для входа в CLI.

CLI использует ваш токен при выполнении команд.

  1. Перейдите на https://id.atlassian.com/manage/api-tokens .
  2. Нажмите Создать токен API .
  3. Введите метку, описывающую ваш токен API. Например, forge-api-token.
  4. Нажмите Создать .
  5. Нажмите «Копировать в буфер обмена» и закройте диалоговое окно.

Выполните команду ниже в терминале Cloud Workstations.

Войдите в интерфейс командной строки Forge, чтобы начать использовать команды Forge.

Установите свой адрес электронной почты JIRA/FORGE. Замените на свой адрес электронной почты.

export FORGE_EMAIL=your-email

Установите токен Forge API. Замените своим токеном API JIRA.

export FORGE_API_TOKEN=your-jira-api-token

Проверьте forge cli, выполнив команду ниже. На вопрос о сборе аналитики отвечайте « No ».

forge settings set usage-analytics false

Проверьте, вошли ли вы в систему.

forge whoami

Пример вывода.

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

Создать приложение Forge

Убедитесь, что вы находитесь в папке « ~/github/genai-for-developers ».

Запустите команду для создания приложения Forge.

forge create

При появлении запроса используйте следующие значения:

  • Имя приложения: devai-jira-ui-qwiklabs
  • Выберите категорию: UI Kit
  • Выберите продукт: Jira
  • Выберите шаблон: jira-issue-panel

bc94e2da059f15cf.png

Перейдите в папку приложения.

cd devai-jira-ui-qwiklabs/

Запустите команду развертывания.

forge deploy

Пример вывода:

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.

Установите приложение.

forge install

При появлении запроса используйте следующие значения:

  • Выберите продукт: Jira
  • Введите URL сайта: your-domain.atlassian.net

Пример вывода:

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

Откройте свой сайт JIRA и создайте новую задачу JIRA со следующим описанием:

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.

Открыв задачу, вы увидите кнопку « devai-jira-ui-qwiklabs ».

Нажмите кнопку и просмотрите изменения в пользовательском интерфейсе.

88f6dd543827543.png

Просмотр журналов серверной части Forge.

forge logs

Консоль разработчика Atlassian

Вы также можете просматривать и управлять развернутыми приложениями в Atlassian Developer Console .

6a0e6ea177054fe6.png

Просмотрите журналы — переключитесь в среду Development ,

56a7f74de6d2a01d.png

Просмотрите манифест и исходный код приложения Forge.

Откройте файл « devai-jira-ui-qwiklabs/manifest.yml » и воспользуйтесь Gemini Code Assist, чтобы объяснить его.

4a4377922ab9a927.png

Просмотрите объяснение.

5dd53138212dc686.png

Откройте следующие файлы и попросите Gemini Code Assist объяснить их:

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

c99f48a5bf624501.png

Обновите приложение Forge с помощью конечной точки DevAI API Cloud Run.

Проверьте, установлен ли идентификатор проекта GCP:

gcloud config get project

Если нет, установите свой проект GCP, используя идентификатор проекта со страницы лаборатории Qwiklabs:

Пример: qwiklabs-gcp-00-2c10937585bb

gcloud config set project YOUR_QWIKLABS_PROJECT_ID

Установите URL-адрес службы 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

Подтвердите, выполнив команду ниже:

forge variables list

Пример вывода

fb337c19c9009ac5.png

Обновите манифест и код приложения Forge.

Эти фрагменты кода можно найти в репозитории в папке sample-devai-jira-ui .

Откройте файл манифеста в редакторе: devai-jira-ui-qwiklabs/manifest.yml

Добавьте строки ниже в конец файла — замените конечную точку Cloud Run на ту, которую вы развернули.

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

Откройте файл резольверов/индекса в редакторе: devai-jira-ui-qwiklabs/src/resolvers/index.js

Добавьте строки ниже после существующей функции getText .

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

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

Откройте файл интерфейса/индекса в редакторе: devai-jira-ui-qwiklabs/src/frontend/index.jsx

Замените index.jsx содержимым ниже. Обновите ссылку на свой идентификатор пользователя/репозиторий GitLab.

Есть два места, где вам нужно обновить YOUR-GIT-USERID и YOUR-GIT-REPO.

Найдите эту строку в файле и внесите изменения:

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

Повторное развертывание приложения Forge

Разверните обновленное приложение:

forge deploy

Пример вывода:

ℹ 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.

Установите обновленное приложение:

forge install --upgrade

ef17c7da9b2962d8.png

Пример вывода:

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.

Тестирование приложения Forge

Откройте существующую или создайте новую задачу JIRA в своем проекте JIRA.

Вам нужно будет удалить предыдущую панель, если она уже была добавлена.

Нажмите « ... » и в меню выберите «Удалить». После этого вы можете нажать на кнопку еще раз.

1adca6205af0f0c6.png

Проверьте комментарии Jira

Как только вы получите ответ от DEVAI API, к проблеме JIRA будут добавлены два комментария.

  • Мерж-реквест GitLab
  • Подробности реализации пользовательской истории Gemini

Переключайтесь между вкладками « History » и « Comments », чтобы обновить представление.

e3f38114330d504f.png

Включить создание запроса на слияние GitLab

Откройте файл devai-api/app/routes.py и раскомментируйте строки ниже в 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)

Повторное развертывание приложения Cloud Run

Убедитесь, что вы находитесь в правильной папке.

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

Если вы используете тот же сеанс терминала, возможно, все переменные среды все еще установлены.

Проверьте это, запустив « echo $GITLAB_REPOSITORY » в терминале.

Выполните следующие действия, чтобы сбросить их, если был открыт новый сеанс терминала.

Обязательно сбросьте необходимые переменные среды перед повторным развертыванием приложения.

Эта команда требует от вас обновить идентификатор пользователя GitLab и имя репозитория.

export GITLAB_REPOSITORY="USERID/REPOSITORY"

Установите остальные переменные среды:

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"

Инструментарий GitLab будет использовать ветку « devai » для отправки изменений в мерж-реквест.

Убедитесь, что вы уже создали эту ветку.

Разверните приложение в Cloud Run.

gcloud beta 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 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 \
  --service-min-instances=1

Проверьте сквозную интеграцию

Запустите процесс из задачи JIRA, снова нажав кнопку, и проверьте выходные данные в репозитории GitLab в разделе «Запрос на слияние» и в LangSmith.

Подробности запроса на слияние GitLab.

1cd438a10b4ce2b3.png

db6dc6c9a46e8f7b.png

LangSmith LLM следы

Откройте портал LangSmith и просмотрите трассировку LLM для вызова создания задачи JIRA.

Пример трассировки LangSmith LLM.

1ae0f88ab885f69.png

GitLab Toolkit не создает новые ветки, и вам придется вручную выполнить следующие действия, если вы хотите повторно запустить процесс.

  • Закрыть мерж-реквест в GitLab
  • Удалите существующую ветку « devai » в репозитории GitLab, а затем создайте новую.

(ДОПОЛНИТЕЛЬНЫЙ РАЗДЕЛ) Отправьте изменения в репозиторий GitHub.

Перейдите на веб-сайт GitHub и создайте новый репозиторий, чтобы перенести изменения для этой лабораторной работы в ваш личный репозиторий.

Вернитесь к экземпляру Cloud Workstations и укажите имя пользователя и адрес электронной почты Git в терминале.

Обновите значения перед запуском команд.

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

Сгенерируйте ключ SSH и добавьте его в репозиторий GitHub.

Обновите свою электронную почту перед запуском команд.

Не вводите парольную фразу и нажмите Enter несколько раз, чтобы завершить генерацию ключа.

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

ssh-add ~/.ssh/id_ed25519

cat ~/.ssh/id_ed25519.pub

Добавьте сгенерированный открытый ключ в свою учетную запись GitHub.

Откройте https://github.com/settings/keys и нажмите « New SSH key ».

В качестве имени ключа используйте « qwiklabs-key » и скопируйте/вставьте вывод последней команды.

Вернитесь в терминал, зафиксируйте и отправьте изменения.

cd ~/github/genai-for-developers

git remote rm origin

Установите удаленное происхождение, используя репозиторий, созданный выше.

Замените URL-адресом вашего репозитория.

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

Добавьте, зафиксируйте и отправьте изменения.

git add .

git commit -m "lab changes"

git push -u origin main

15. Поздравляем!

Поздравляем, вы закончили лабораторную работу!

Что мы рассмотрели:

  • Как развернуть приложения Cloud Run для интеграции с API Gemini.
  • Как создать и развернуть приложение Atlassian Forge для JIRA.
  • Как использовать агенты LangChain ReAct для автоматизации задач GitLab.
  • Как просмотреть трассировки LLM в LangSmith.

Что дальше:

  • Впереди еще больше практических занятий!

Очистить

Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий ресурсы, либо сохраните проект и удалите отдельные ресурсы.

Удаление проекта

Самый простой способ избавиться от выставления счетов — удалить проект, созданный вами для этого руководства.

© Google LLC, 2024. Все права защищены. Google и логотип Google являются товарными знаками Google LLC. Все остальные названия компаний и продуктов могут быть товарными знаками соответствующих компаний, с которыми они связаны.