Implementação de histórias de usuário do JIRA com a IA generativa

1. Visão geral

Neste laboratório, você vai criar uma solução para automatizar a implementação de histórias de uso do JIRA com a IA generativa.

5351e028356cd3ac.png

O que você vai aprender

Há várias partes principais no laboratório:

  • Implantar o aplicativo do Cloud Run para integração com as APIs Gemini
  • Criar e implantar o app Atlassian Forge para JIRA
  • Agentes LangChain ReAct para automação de tarefas do GitLab

Pré-requisitos

  • Para fazer este laboratório, é preciso saber usar o console do Cloud e os ambientes do Cloud Shell.

2. Configuração e requisitos

Configuração do projeto do Cloud

  1. Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google e pode ser atualizada quando você quiser.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como PROJECT_ID. Se você não gostar do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto.
  • Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não vai ser muito cara, se tiver algum custo. Para encerrar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Configuração do ambiente

Abra o chat do Gemini.

bc3c899ac8bcf488.png

Ou digite "Pergunte ao Gemini" na barra de pesquisa.

e1e9ad314691368a.png

Ative a API Cloud AI Companion:

66cb6e561e384bbf.png

Clique em Start chatting e siga uma das perguntas de exemplo ou digite seu próprio comando para testar.

5482c153eef23126.png

Sugestões de comandos:

  • Explicar o Cloud Run em cinco pontos principais.
  • Você é gerente de produto do Google Cloud Run e explica o Cloud Run para um estudante em cinco pontos-chave.
  • Você é gerente de produto do Google Cloud Run e explica o Cloud Run para um desenvolvedor certificado do Kubernetes em cinco pontos-chave.
  • Você é gerente de produto do Google Cloud Run e explica a um desenvolvedor sênior em cinco pontos principais quando usar o Cloud Run em vez do GKE.

Confira o guia de comandos para saber como escrever comandos melhores.

Como o Gemini para o Google Cloud usa seus dados

Compromisso do Google com a privacidade

O Google foi um dos primeiros no setor a publicar um compromisso de privacidade de IA/ML, que descreve que os clientes precisam ter o mais alto nível de segurança e controle sobre os dados armazenados na nuvem.

Dados que você envia e recebe

As perguntas que você faz ao Gemini, incluindo qualquer informação de entrada ou código que você envia para análise ou conclusão, são chamadas de comandos. As respostas ou códigos que você recebe do Gemini são chamados de respostas. O Gemini não usa seus comandos nem as respostas deles como dados para treinar os modelos.

Criptografia de instruções

Quando você envia comandos para o Gemini, os dados são criptografados em trânsito como entrada para o modelo subjacente no Gemini.

Dados do programa gerados pelo Gemini

O Gemini é treinado com base no código próprio do Google Cloud e em códigos de terceiros selecionados. Você é responsável pela segurança, testes e eficácia do seu código, incluindo qualquer preenchimento, geração ou análise de código que o Gemini oferece.

Saiba mais sobre como o Google processa suas solicitações.

3. Opções para testar solicitações

Você tem várias opções para testar comandos.

O Vertex AI Studio faz parte da plataforma Vertex AI do Google Cloud, projetada especificamente para simplificar e acelerar o desenvolvimento e o uso de modelos de IA generativa.

O Google AI Studio é uma ferramenta baseada na Web para prototipagem e experimentação com engenharia de comando e a API Gemini.

O web app Gemini (gemini.google.com) é uma ferramenta baseada na Web projetada para ajudar você a explorar e usar o poder dos modelos de IA do Gemini do Google.

4. (SEÇÃO OPTATIVA) Criar uma conta de serviço

Essas etapas foram executadas durante a configuração do laboratório. Não é necessário executá-las.

Estas etapas mostram como configurar uma conta de serviço e papéis do IAM.

Volte ao console do Google Cloud e ative o Cloud Shell clicando no ícone à direita da barra de pesquisa.

3e0c761ca41f315e.png

No terminal aberto, execute os comandos a seguir para criar uma nova conta de serviço e chaves.

Você vai usar essa conta de serviço para fazer chamadas de API para a API Vertex AI Gemini no aplicativo do Cloud Run.

Configure os detalhes do projeto usando os detalhes do projeto do Qwiklabs.

Exemplo: qwiklabs-gcp-00-2c10937585bb

gcloud config set project YOUR_QWIKLABS_PROJECT_ID

Crie uma conta de serviço e conceda papéis.

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

Se for preciso autorizar, clique em "Autorizar" para continuar.

6356559df3eccdda.png

Ative os serviços necessários para usar as APIs Vertex AI e o chat Gemini.

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

Ative os serviços necessários para usar as APIs Vertex AI e o chat 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. Conceder acesso às Estações de trabalho do Cloud

Abra o Cloud Workstations no Console do Cloud.

Conceda acesso à estação de trabalho do Cloud para o estudante provisionado do Qwiklabs.

Copie o nome de usuário/e-mail do Qwiklabs criado para este projeto e use-o para adicionar um principal. Selecione a estação de trabalho e clique em "PERMISSIONS".

Confira os detalhes a seguir.

5cbb861e4f272f7.png

Clique no botão "ADD PRINCIPAL".

Cole o e-mail do estudante do Qwiklabs e selecione o papel "Cloud Workstations User".

dfe53b74453d80b1.png

Clique em "Start" e em "Launch" para abrir a estação de trabalho e seguir as etapas a seguir usando o terminal integrado.

62dccf5c78880ed9.png

Clone o repositório do GitHub

Crie uma pasta e clone o repositório do GitHub.

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

Usando o item de menu "File / Open Folder", abra "github/genai-for-developers".

6. Ativar o Gemini Code Assist

Clique no ícone "Gemini" no canto inferior direito e em "Login to Google Cloud".

4a7f4640f66037f.png

8d31b61e23ebeea2.png

Clique no link no terminal para iniciar o fluxo de autorização.

d8575b4066f67745.png

Clique em "Abrir" para acessar o link.

3a7272fcb985ff5.png

Selecione sua conta de estudante do Qwiklabs e clique em "Fazer login" na próxima tela.

79dc63009ce0ed49.png

Copiar o código de verificação:

403845a5abc53635.png

Volte ao terminal e cole o código.

5931f639fe69f5cb.png

Aguarde a conclusão da autenticação e clique em "Selecionar um projeto do Google".

614beb055f7aa5e8.png

Na janela pop-up, selecione seu projeto do Qwiklabs.

Exemplo:

70ae6837db397e2a.png

Abra o arquivo "devai-api/app/routes.py" e clique com o botão direito do mouse em qualquer lugar do arquivo. Em seguida, selecione "Gemini > Explain this"" no menu de contexto.

32b902134440b7c3.png

Analise a explicação do Gemini para o arquivo selecionado.

f78bfee770f6be93.png

7. Kits de ferramentas do LangChain

Os Kits de ferramentas do LangChain são conjuntos de ferramentas criadas para simplificar e aprimorar o desenvolvimento de aplicativos com o LangChain. Eles oferecem várias funcionalidades, dependendo do kit de ferramentas específico, mas, em geral, ajudam com:

  • Conexão a fontes de dados externas: acesse e incorpore informações de APIs, bancos de dados e outras fontes externas nos seus aplicativos do LangChain.
  • Técnicas avançadas de comando: use comandos pré-criados ou crie comandos personalizados para otimizar as interações com modelos de linguagem.
  • Criação e gerenciamento de cadeias: crie e gerencie cadeias complexas com facilidade.
  • Avaliação e monitoramento: analise o desempenho das suas cadeias e aplicativos do LangChain.

Alguns dos Kits de ferramentas LangChain mais conhecidos incluem:

  • Kits de ferramentas para executores de agentes: ferramentas para desenvolver agentes que possam interagir com o mundo real por meio de ações como navegação na Web ou execução de código.
  • Kit de ferramentas de engenharia de comandos: uma coleção de recursos para criar comandos eficientes.

Kit de ferramentas do GitLab

Neste laboratório, você vai usar o Toolkit do GitLab para automatizar a criação de solicitações de mesclagem do GitLab.

O kit de ferramentas do Gitlab contém ferramentas que permitem que um agente de LLM interaja com um repositório do Gitlab. A ferramenta é um wrapper para a biblioteca python-gitlab.

O kit de ferramentas do GitLab pode realizar as seguintes tarefas:

  • Create File: cria um novo arquivo no repositório.
  • Read File: lê um arquivo do repositório.
  • Atualizar arquivo: atualiza um arquivo no repositório.
  • Criar solicitação de envio: cria uma solicitação de envio da ramificação de trabalho do bot para a ramificação base.
  • Get Issues: busca problemas no repositório.
  • Get Issue: busca detalhes sobre um problema específico.
  • Comentário sobre o problema: publica um comentário sobre um problema específico.
  • Excluir arquivo: exclui um arquivo do repositório.

8. Configuração do repositório e do kit de ferramentas do GitLab

Abra o GitLab, crie um projeto público e configure o token de acesso do projeto em "Settings / Access Tokens".

Use os seguintes detalhes:

  • Nome do token: devai-api-qwiklabs
  • Papel: Maintainer
  • Selecione os escopos: api

112008c7894c3a19.png

Copie e cole o valor do token de acesso em um arquivo temporário no seu laptop. Ele será usado nas próximas etapas.

9. Preparar para implantar o aplicativo no Cloud Run

Volte para a instância do Cloud Workstations e use o terminal atual ou abra um novo.

9f9682d2b7317e66.png

Receba as credenciais de acesso da sua conta de usuário por um fluxo de autorização baseado na Web.

Clique no link e siga as etapas para gerar o código de verificação.

gcloud auth login

Configure os detalhes do projeto usando os detalhes do projeto do Qwiklabs.

Exemplo: qwiklabs-gcp-00-2c10937585bb

gcloud config set project YOUR-QWIKLABS-PROJECT-ID

Defina o restante das variáveis de ambiente:

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

Defina as variáveis de ambiente necessárias para a integração do GitLab.

export GITLAB_PERSONAL_ACCESS_TOKEN=gitlab-token

Para evitar a exposição de informações sensíveis no terminal, a prática recomendada é usar read -s, uma maneira segura de definir variáveis de ambiente sem que o valor apareça no histórico de comandos do console. Depois de executar, cole o valor e pressione Enter.

Esse comando exige que você atualize o ID de usuário e o nome do repositório do GitLab.

Exemplo: export GITLAB_REPOSITORY="gitrey/qwiklabs-test"

119489def27115c8.png

export GITLAB_REPOSITORY="USERID/REPOSITORY"

Defina o restante das variáveis de ambiente:

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

10. Configuração de rastreamento de LLM do LangSmith

Crie uma conta da LangSmith e gere uma chave da API Service na seção "Configurações". https://docs.smith.langchain.com/

Defina as variáveis de ambiente necessárias para a integração do LangSmith.

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

export LANGCHAIN_API_KEY=langchain-service-api-key

11. Configuração do JIRA

Esses valores não são usados neste laboratório, então não é necessário atualizar para os valores específicos do seu projeto do JIRA antes de executar os comandos.

Defina as variáveis de ambiente necessárias para a implantação do serviço do 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. Implantar a API Devai no Cloud Run

Verifique se você está na pasta certa.

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

Neste laboratório, seguimos as práticas recomendadas e usamos o Secret Manager para armazenar e referenciar os valores do token de acesso e da chave da API LangChain no Cloud Run.

Armazene o token de acesso do JIRA no Secret Manager.

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

Armazene o token de acesso do GitLab no Secret Manager.

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

Armazene a chave da API LangChain no Secret Manager.

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

Implantar o aplicativo no 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

Responda Y para criar o repositório do Docker no 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

Analise o fluxo gcloud run deploy SERVICE_NAME --source=. abaixo. Saiba mais.

5c122a89dd11822e.png

Nos bastidores, esse comando usa o buildpacks e o Cloud Build do Google Cloud para criar automaticamente imagens de contêiner a partir do código-fonte sem ter que instalar o Docker na máquina ou configurar os pacotes de criação ou o Cloud Build. Ou seja, o comando único descrito acima faz o que exigiria os comandos gcloud builds submit e gcloud run deploy.

Se você tiver fornecido um Dockerfile(como fizemos neste repositório), o Cloud Build vai usá-lo para criar imagens de contêiner em vez de depender dos buildpacks para detectar e criar imagens de contêiner automaticamente. Para saber mais sobre buildpacks, consulte a documentação.

Revise os registros do Cloud Build no Console.

Revise a imagem Docker criada no Artifact Registry.

Abra cloud-run-source-deploy/devai-api e analise as vulnerabilidades detectadas automaticamente. Verifique se há correções disponíveis e como elas podem ser corrigidas com base na descrição.

d00c9434b511be44.png

Revise os detalhes da instância do Cloud Run no console do Cloud.

Teste o endpoint executando o comando 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

(SEÇÃO OPTATIVA) Configurar a estação de trabalho do Cloud

O Cloud Workstations oferece ambientes de desenvolvimento gerenciados no Google Cloud com segurança integrada e ambientes de desenvolvimento pré-configurados, mas personalizáveis. Em vez de exigir que os desenvolvedores instalem softwares e executem scripts de configuração, crie uma configuração de estação de trabalho que especifique seu ambiente de maneira reproduzível. Todas as atualizações de uma configuração de estação de trabalho são aplicadas automaticamente às estações de trabalho na próxima vez que elas forem iniciadas. Os desenvolvedores acessam as estações de trabalho por um ambiente de desenvolvimento integrado baseado em navegador, em vários editores de código locais (como o VSCode ou os ambientes de desenvolvimento integrado do JetBrains, como o IntelliJ IDEA Ultimate e o PyCharm Professional) ou por SSH.

O Cloud Workstations usa os seguintes recursos do Google Cloud para gerenciar seus ambientes de desenvolvimento:

  • Os clusters de estações de trabalho definem um grupo de estações de trabalho em uma determinada região e a rede VPC a que estão conectadas. Os clusters da estação de trabalho não estão relacionados aos clusters do Google Kubernetes Engine (GKE).
  • As configurações da estação de trabalho atuam como modelos para as estações de trabalho. A configuração da estação de trabalho define detalhes como o tipo de instância da máquina virtual (VM) da estação de trabalho, o armazenamento permanente, o ambiente de definição de imagem do contêiner, qual ambiente de desenvolvimento integrado (IDE) ou editor de código usar e muito mais. Os administradores e as equipes da plataforma também podem usar regras do Identity and Access Management (IAM) para conceder acesso a equipes ou a desenvolvedores individuais.
  • As estações de trabalho são ambientes de desenvolvimento pré-configurados que fornecem um ambiente de desenvolvimento integrado na nuvem, ferramentas de linguagem, bibliotecas e muito mais. As estações de trabalho podem ser iniciadas ou interrompidas sob demanda e executadas em VMs do Compute Engine no seu projeto, com um disco persistente anexado para armazenar dados entre sessões.

Os administradores e as equipes de plataforma criam configurações de estação de trabalho que são compartilhadas com a equipe de desenvolvimento. Cada desenvolvedor cria uma estação de trabalho com base em uma configuração.

810ae08acb671f4c.png

Neste laboratório, você está usando um ambiente de desenvolvimento integrado baseado em navegador, mas o Cloud Workstations também oferece suporte a outras interfaces de desenvolvimento comuns:

  • Você pode usar seus próprios ambientes de desenvolvimento integrados do JetBrains pelo JetBrains Gateway.
  • Se você usa o VSCode local, também pode acessar suas estações de trabalho para desenvolvimento remoto via SSH.
  • Também é possível configurar túneis SSH e até mesmo TCP na estação de trabalho usando a máquina local.

fc95816682f1e3b0.png

(SEÇÃO OPCIONAL) Criar cluster de estações de trabalho

Essas etapas foram executadas durante a configuração do laboratório. Não é necessário executá-las.

Estas etapas mostram como configurar o cluster, a configuração e a estação de trabalho do Cloud Workstations.

Revise esta seção e passe para a seção "Plataforma Forge".

Criar cluster de estações de trabalho:

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

Criar configuração de estações de trabalho

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

Criar estação de trabalho

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

Confira as estações de trabalho disponíveis no console do Cloud. Inicie e abra "devai-workstation".

e44784811890cfc8.png

Ative "Gemini" no canto inferior direito, siga o fluxo de login na nova guia do navegador e copie o código gerado de volta para o console para concluir o login.

Abra o chat "Gemini" no painel à esquerda e pergunte ao 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. Plataforma Forge

O Forge é uma plataforma que permite aos desenvolvedores criar apps integrados aos produtos da Atlassian, como Jira, Confluence, Compass e Bitbucket.

eda6f59ff15df25e.png

Instalar a CLI do Forge

Execute os comandos abaixo no terminal.

Faça o download do Node Version Manager ( nvm) e disponibilize-o no caminho da sessão atual do terminal.

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

Instale o nvm.

Selecione a versão mais recente do Node.js LTS executando o seguinte no terminal:

nvm install --lts
nvm use --lts

Instale a CLI do Forge globalmente executando o seguinte:

npm install -g @forge/cli

Neste laboratório, vamos usar variáveis de ambiente para fazer login.

e4e4e59cf8622e3f.png

Configurar projeto do JIRA

Use sua conta pessoal para criar/acessar projetos do JIRA.

Revise seus projetos do JIRA: https://admin.atlassian.com/

Crie um novo projeto do JIRA usando sua conta pessoal.

Acesse https://team.atlassian.com/your-work, clique em 8654143154cb8665.png e selecione 47b253090a08932.png. Depois disso, selecione "JIRA Software" - "Testar agora". Siga as instruções para concluir a criação do projeto/site.

5bab2a96e3b81383.png

Selecione o software JIRA.

785bc4d8bf920403.png

Crie um novo projeto.

8a6e7cdc8224ffa0.png

14. Token da API Atlassian

Crie ou use um token de API da Atlassian para fazer login na CLI.

A CLI usa seu token ao executar comandos.

  1. Acesse https://id.atlassian.com/manage/api-tokens.
  2. Clique em Criar token de API.
  3. Insira um rótulo para descrever o token da API. Por exemplo, forge-api-token.
  4. Clique em Criar.
  5. Clique em Copiar para a área de transferência e feche a caixa de diálogo.

Execute o comando abaixo no terminal do Cloud Workstations.

Faça login na CLI do Forge para começar a usar os comandos do Forge.

Defina seu endereço de e-mail do JIRA/FORGE. Substitua pelo seu endereço de e-mail.

export FORGE_EMAIL=your-email

Defina o token da API Forge. Substitua pelo seu token da API do JIRA.

export FORGE_API_TOKEN=your-jira-api-token

Execute o comando abaixo para testar a CLI do Forge. Responda "No" quando solicitado a coletar análises.

forge settings set usage-analytics false

Verifique se você fez login.

forge whoami

Exemplo de saída.

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

Criar um aplicativo Forge

Verifique se você está na pasta "~/github/genai-for-developers".

Execute o comando para criar um aplicativo do Forge.

forge create

Use os seguintes valores quando solicitado:

  • Nome do aplicativo: devai-jira-ui-qwiklabs
  • Selecione uma categoria: UI Kit
  • Selecione um produto: Jira
  • Selecione um modelo: jira-issue-panel

bc94e2da059f15cf.png

Mude para a pasta do aplicativo.

cd devai-jira-ui-qwiklabs/

Execute o comando de implantação.

forge deploy

Exemplo de resposta:

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.

Instale o aplicativo.

forge install

Use os seguintes valores quando solicitado:

  • Selecione um produto: Jira
  • Digite o URL do site: your-domain.atlassian.net

Exemplo de resposta:

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

Abra seu site do JIRA e crie uma nova tarefa com a seguinte descrição:

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.

Ao abrir a tarefa, você vai encontrar o botão "devai-jira-ui-qwiklabs".

Clique no botão e revise as mudanças na interface.

88f6dd543827543.png

Acessar registros de back-end do Forge.

forge logs

Atlassian Developer Console

Também é possível conferir e gerenciar apps implantados no Console do desenvolvedor da Atlassian.

6a0e6ea177054fe6.png

Analisar registros: alternar para o ambiente Development,

56a7f74de6d2a01d.png

Revisar o manifesto e o código-fonte do aplicativo Forge

Abra o arquivo "devai-jira-ui-qwiklabs/manifest.yml" e use o Gemini Code Assist para explicar o código.

4a4377922ab9a927.png

Leia a explicação.

5dd53138212dc686.png

Abra os seguintes arquivos e peça ao Gemini Code Assist para explicar:

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

c99f48a5bf624501.png

Atualizar o app Forge com o endpoint do Cloud Run da API DevAI

Verifique se o ID do projeto do GCP está definido:

gcloud config get project

Caso contrário, defina seu projeto do GCP usando o ID do projeto na página do laboratório do Qwiklabs:

Exemplo: qwiklabs-gcp-00-2c10937585bb

gcloud config set project YOUR_QWIKLABS_PROJECT_ID

Defina o URL do serviço do 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

Confirme executando o comando abaixo:

forge variables list

Exemplo de saída

fb337c19c9009ac5.png

Atualizar o manifesto e o código do aplicativo Forge

Esses snippets de código podem ser encontrados no repositório na pasta sample-devai-jira-ui.

Abra o arquivo de manifesto no editor: devai-jira-ui-qwiklabs/manifest.yml

Adicione as linhas abaixo no final do arquivo. Substitua o endpoint do Cloud Run pelo que você implantou.

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

Abra o arquivo de indexadores/resolvers no editor: devai-jira-ui-qwiklabs/src/resolvers/index.js

Adicione as linhas abaixo após a função getText atual.

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

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

Abra o arquivo de front-end/índice no editor: devai-jira-ui-qwiklabs/src/frontend/index.jsx

Substitua index.jsx pelo conteúdo abaixo. Atualize o link para o ID do usuário/repositório do GitLab.

Há dois lugares em que você precisa atualizar YOUR-GIT-USERID e YOUR-GIT-REPO.

Procure esta linha no arquivo e faça as alterações:

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

Reimplantar o aplicativo Forge

Adicione dependências no arquivo package.json:

"@forge/api": "4.0.0",

Instale as dependências:

npm install

Implante o aplicativo atualizado:

forge deploy

Exemplo de resposta:

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

Instalar o aplicativo atualizado:

forge install --upgrade

ef17c7da9b2962d8.png

Exemplo de resposta:

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.

Testar o aplicativo Forge

Abra ou crie uma tarefa do JIRA no seu projeto.

Se o painel anterior já tiver sido adicionado, você vai precisar removê-lo.

Clique em "..." e selecione "Remover" no menu. Depois disso, clique no botão novamente.

1adca6205af0f0c6.png

Verificar comentários do Jira

Depois que você receber uma resposta da API DEVAI, dois comentários serão adicionados ao problema do JIRA.

  • Solicitação de mesclagem do GitLab
  • Detalhes da implementação da história de usuário do Gemini

Alterne entre as guias "History" e "Comments" para atualizar a visualização.

e3f38114330d504f.png

Ativar a criação de solicitações de mesclagem do GitLab

Abra o arquivo devai-api/app/routes.py e remova a marca de comentário das linhas abaixo no método 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)

Reimplantar o aplicativo do Cloud Run

Verifique se você está na pasta certa.

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

Se você estiver usando a mesma sessão de terminal, talvez todas as variáveis de ambiente ainda estejam definidas.

Confira executando "echo $GITLAB_REPOSITORY" no terminal.

Siga estas etapas para redefinir o terminal se uma nova sessão tiver sido aberta.

Redefina as variáveis de ambiente necessárias antes de implantar o aplicativo novamente.

Esse comando exige que você atualize o ID de usuário e o nome do repositório do GitLab.

export GITLAB_REPOSITORY="USERID/REPOSITORY"

Defina o restante das variáveis de ambiente:

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

O kit de ferramentas do GitLab vai usar a ramificação "devai" para enviar as mudanças para a solicitação de mesclagem.

Verifique se você já criou essa ramificação.

Implantar o aplicativo no 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

Verificar a integração completa

Inicie o processo na tarefa do JIRA clicando no botão novamente e verifique a saída no repositório do GitLab, na seção "Solicitação de mesclagem" e em LangSmith.

Detalhes do pedido de mesclagem do GitLab.

1cd438a10b4ce2b3.png

db6dc6c9a46e8f7b.png

Rastros de LLM do LangSmith

Abra o portal do LangSmith e analise o rastro do LLM para a chamada de criação de problemas do JIRA.

Exemplo de rastreamento de LLM do LangSmith.

1ae0f88ab885f69.png

(SEÇÃO OPCIONAL) Enviar suas alterações para o repositório do GitHub

Acesse o site do GitHub e crie um novo repositório para enviar as mudanças deste laboratório ao seu repositório pessoal.

Volte para a instância do Cloud Workstations e defina o nome de usuário e o e-mail do Git no terminal.

Atualize os valores antes de executar os comandos.

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

Gere uma chave SSH e adicione-a ao repositório do GitHub.

Atualize seu e-mail antes de executar os comandos.

Não insira a senha longa e pressione Enter várias vezes para concluir a geração de chaves.

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

ssh-add ~/.ssh/id_ed25519

cat ~/.ssh/id_ed25519.pub

Adicione a chave pública gerada à sua conta do GitHub.

Abra https://github.com/settings/keys e clique em "New SSH key".

Para o nome da chave, use "qwiklabs-key" e copie e cole a saída do último comando.

Volte ao terminal, confirme e envie as mudanças.

cd ~/github/genai-for-developers

git remote rm origin

Defina a origem remota usando o repositório criado acima.

Substitua pelo URL do repositório.

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

Adicione, confirme e envie as mudanças.

git add .

git commit -m "lab changes"

git push -u origin main

15. Parabéns!

Parabéns, você concluiu o laboratório!

O que aprendemos:

  • Como implantar aplicativos do Cloud Run para integração com as APIs Gemini.
  • Como criar e implantar o app Atlassian Forge para JIRA.
  • Como usar os agentes LangChain ReAct para automatizar tarefas do GitLab.
  • Como analisar rastros de LLM no LangSmith.

O que vem em seguida:

  • Mais sessões práticas estão chegando!

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto ou mantenha o projeto e exclua cada um dos recursos.

Excluir o projeto

O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para este tutorial.

©2024 Google LLC Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de empresas e produtos podem ser marcas registradas das empresas a que estão associados.