Üretken yapay zeka ile kod inceleme otomasyonu

1. Genel Bakış

Bu laboratuvarda, CICD ardışık düzenini ayarlayacak ve kod inceleme adımlarını otomatikleştirmek için Gemini ile entegrasyon yapacaksınız.

9dde56ad139b9553.png

Öğrenecekleriniz

Bu laboratuvarda aşağıdakileri nasıl yapacağınızı öğreneceksiniz:

  • GitHub, GitLab ve CircleCI'de GenAI kod inceleme otomasyon adımlarını ekleme
  • GitLab sorunu hakkında yorum yapma ve JIRA biletlerini açma gibi görevleri otomatik hale getirmek için LangChain ReAct aracılarını ve araç setlerini kullanma

Ön koşullar

  • Bu laboratuvarda, Cloud Console ve Cloud Shell ortamlarına aşina olmanız gerekir.

2. Kurulum ve şartlar

Cloud projesi oluşturma

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. İstediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dize otomatik olarak oluşturur. Bu dizenin ne olduğu genellikle önemli değildir. Çoğu kod laboratuvarında proje kimliğinize (genellikle PROJECT_ID olarak tanımlanır) referans vermeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele başka bir kimlik oluşturabilirsiniz. Alternatif olarak, kendi anahtarınızı deneyerek kullanılabilir olup olmadığını görebilirsiniz. Bu adımdan sonra değiştirilemez ve proje boyunca geçerli kalır.
  • Bilginiz olması açısından, bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.
  1. Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitimden sonra faturalandırılmamak için kaynakları kapatmak istiyorsanız oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz deneme programına uygundur.

Ortam Kurulumu

Gemini Chat'i açın.

bc3c899ac8bcf488.png

İsterseniz "Gemini'a Sor" yazabilirsiniz yazın.

e1e9ad314691368a.png

Cloud AI Companion API'yi etkinleştirin:

66cb6e561e384bbf.png

"Start chatting" simgesini tıklayın ve örnek sorulardan birini uygulayın veya denemek için kendi isteminizi yazın.

5482c153eef23126.png

Deneyebileceğiniz istemler:

  • Cloud Run'u 5 temel noktada açıklayın.
  • Google Cloud Run Ürün Müdürü olduğunuzu varsayarak bir öğrenciye Cloud Run'u 5 kısa ve önemli noktayla açıklayın.
  • Google Cloud Run Ürün Yöneticisisiniz. Sertifikalı Kubernetes geliştiriciye Cloud Run'ı 5 kısa temel noktada açıklayın.
  • Google Cloud Run Ürün Müdürü olduğunuzu varsayalım. Kıdemli bir geliştiriciye, Cloud Run'u ne zaman GKE yerine kullanacağınızı 5 kısa ve önemli noktayla açıklayın.

Daha iyi istemler yazma hakkında daha fazla bilgi edinmek için İstem Kılavuzu'na göz atın.

Google Cloud için Gemini'nin verilerinizi kullanma şekli

Google'ın gizlilik taahhüdü

Google, sektörde AI/ML gizlilik taahhüdü yayınlayan ilk şirketlerden biri oldu. Bu taahhüdümüzde, müşterilerin bulutta depolanan verileri üzerinde en yüksek düzeyde güvenlik ve denetime sahip olması gerektiğine olan inancımızı özetliyoruz.

Gönderdiğiniz ve aldığınız veriler

Analiz etmek veya tamamlamak üzere Gemini'a gönderdiğiniz giriş bilgileri ya da kodlar da dahil olmak üzere Gemini'a sorduğunuz sorulara istem adı verilir. Gemini'dan aldığınız yanıtlara veya kod tamamlamalara yanıt adı verilir. Gemini, modellerini eğitmek için istemlerinizi veya yanıtlarını veri olarak kullanmaz.

İstemlerin şifrelenmesi

Gemini'a istem gönderdiğinizde, Gemini'daki temel modele girdi olarak aktarım sırasında verileriniz şifrelenir.

Gemini'dan oluşturulan program verileri

Gemini, birinci taraf Google Cloud kodunun yanı sıra belirli üçüncü taraf kodlarıyla eğitilmiştir. Gemini'nin sunduğu kod tamamlama, oluşturma veya analizler dahil olmak üzere kodunuzun güvenliği, test edilmesi ve etkililiğinden siz sorumlusunuz.

Google'ın istemlerinizi nasıl işlediği hakkında daha fazla bilgi edinin.

3. İstemleri test etme seçenekleri

Mevcut devai cli istemlerini değiştirmek veya genişletmek isterseniz bununla ilgili birkaç seçeneğiniz vardır.

Google Cloud'un Vertex AI platformunun bir parçası olan Vertex AI Studio, özellikle üretken yapay zeka modellerinin geliştirilmesini ve kullanımını basitleştirmek ve hızlandırmak için tasarlanmıştır.

Google AI Studio, istem mühendisliği ve Gemini API'yi kullanarak prototip oluşturmaya ve denemeler yapmaya yönelik web tabanlı bir araçtır. 1 milyon bağlam penceresine sahip Gemini 1.5 Pro'ya kaydolun veya daha fazla bilgi edinin.

Google Gemini web uygulaması (gemini.google.com), Google'ın Gemini yapay zeka modellerinin gücünü keşfetmenize ve kullanmanıza yardımcı olmak için tasarlanmış web tabanlı bir araçtır.

4. Hizmet Hesabı Oluştur

Arama çubuğunun sağındaki simgeyi tıklayarak Cloud Shell'i etkinleştirin.

3e0c761ca41f315e.png

Açılan terminalde, Vertex AI API'lerini ve Gemini Chat'i kullanmak için gerekli hizmetleri etkinleştirin.

gcloud services enable \
    aiplatform.googleapis.com \
    cloudaicompanion.googleapis.com \
    cloudresourcemanager.googleapis.com \
    secretmanager.googleapis.com

Yetki vermeniz istenirse "Yetkilendir"i tıklayın seçeneğini tıklayın.

6356559df3eccdda.png

Yeni bir hizmet hesabı ve anahtarlar oluşturmak için aşağıdaki komutları çalıştırın.

Bu hizmet hesabını, CICD ardışık düzenlerinden Vertex AI Gemini API'ye API çağrıları yapmak için kullanacaksınız.

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 --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" --condition None

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

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

5. GitHub kod deposunu kişisel GitHub deponuza çatallayın

https://github.com/GoogleCloudPlatform/genai-for-developers/fork adresine gidin ve GitHub kullanıcı kimliğinizi sahip olarak seçin.

Yalnızca "main" dalını kopyalama seçeneğinin işaretini kaldırın.

"Create fork" öğesini tıklayın.

6. GitHub Actions iş akışlarını etkinleştirme

Ayrılan GitHub deposunu tarayıcıda açın ve iş akışlarını etkinleştirmek için "Actions" sekmesine geçin.

1cd04db9b37af7cf.png

7. Depo Gizli Anahtarları Ekleme

"Settings / Secrets and variables / Actions" altında bir depo gizli anahtarı oluşturun kod deposunda gezmenizi sağlar.

"GOOGLE_API_CREDENTIALS" adlı Kod Deposu gizli anahtarı ekleyin.

94cbe2778bef25eb.png

Google Cloud Shell penceresine/sekmesine geçip aşağıdaki komutu Cloud Shell terminalinde çalıştırın.

cat ~/vertex-client-key.json

Dosya içeriğini kopyalayıp gizli anahtar değeri olarak yapıştırın.

915579a97f8f2ced.png

PROJECT_ID gizli anahtarını, Qwiklabs proje kimliğiniz 4fa92833ce615a36.png olarak değer olarak ekleyin

8. GitHub İşlemleri İş Akışını Çalıştır

Tarayıcıda GitHub deponuza gidin ve iş akışını çalıştırın.

İş akışı, kod aktarma veya manuel yürütme sırasında çalışacak şekilde yapılandırılmıştır.

"GenAI For Developers" adlı reklam kaynağını seçin Tüm iş akışları altında "Run workflow" seçeneğini tıklayın. "main" kullanılıyor görebilirsiniz.

da11273b4b54f7b6.png

Sonuçları inceleme:

cf49aa41980aacc5.png

Test kapsamı komutunun sonuçları:

devai review testcoverage -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

3b21bd4639524763.png

Kod inceleme komutunun sonuçları:

devai review code -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

4876dbc2e0042943.png

Performans incelemesi komutunun sonuçları:

devai review performance -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

98dd2472b2e819bf.png

Güvenlik incelemesi komutunun sonuçları:

devai review security -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

7d180a763db92d56.png

Engelleyenler komutun sonuçlarını inceler:

devai review blockers -c ${{ github.workspace }}/sample-app/pom.xml

726175e874aefcf.png

9. Depoyu klonlama

Cloud Shell terminaline dönün ve deposu klonlayın.

GitHub deposu için bir klasör oluşturun.

mkdir github
cd github

Komutları çalıştırmadan önce YOUR-GITHUB-USERID değerini GitHub kullanıcı kimliğinizle değiştirin.

Terminalde Git kullanıcı adını ve e-posta adresini belirleyin.

Komutları çalıştırmadan önce değerleri güncelleyin.

git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
git clone https://github.com/YOUR-GITHUB-USERID/genai-for-developers.git 

Klasörü değiştirin ve Cloud Shell Düzenleyici'de iş akışı dosyasını açın.

cd genai-for-developers

cloudshell edit .github/workflows/devai-review.yml 

Yapılandırma dosyasının IDE'de gösterilmesini bekleyin.

9e81e5a79d421eac.png

10. Gemini Code Assist'i etkinleştir

"Gemini" seçeneğini tıklayın simgeyi 7c891e32c055c0e4.png tıklayın,

"Login to Google Cloud" ve "Select a Google Cloud Project"yi tıklayın.

f5318f22c91ecaa8.png

6b7203ffdd8485fa.png

fb8d42a6bc8a260f.png

Pop-up pencerede Qwiklabs projenizi seçin.

f661047956a6d6f9.png

11. Gemini Code Assist ile kodu açıkla

devai-review.yml dosyasında herhangi bir yeri sağ tıklayıp Gemini Code Assist > Explain seçeneğini belirleyin.

41fb7da002bdf43.png

Yorum açıklaması:

7724d52e54918c00.png

12. DEVAI CLI'yi yerel olarak çalıştırma

Cloud Shell Düzenleyici'ye geri dönün ve yeni bir Terminal açın.

149218baaf30865f.png

devai uygulamasını yerel olarak yüklemek için Cloud Shell terminaline dönün ve aşağıdaki komutları çalıştırın.

pip3 install devai-cli

Cli yüklendi ancak PATH yolunda değil.

WARNING: The script devai is installed in '/home/student_00_478dfeb8df15/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

PATH ortam değişkenini güncellemek için aşağıdaki komutu çalıştırın. Kullanıcınızın ana klasör adıyla değiştirin. Örneğin: student_00_478dfeb8df15

export PATH=$PATH:/home/YOUR-USER-HOME-FOLDER/.local/bin

Yerel olarak kod incelemesi gerçekleştirmek için devai cli komutunu çalıştırın. Komut satırı çıktısını inceleyin.

export PROJECT_ID=$(gcloud config get-value project)
export LOCATION=us-central1

cd ~/github/genai-for-developers

devai review code -c ./sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

Aşağıdaki komutu çalıştırarak inceleme komut dosyasını açın:

cloudshell edit devai-cli/src/devai/commands/review.py

review.py dosyasında herhangi bir yeri sağ tıklayıp Gemini Code Assist > Explain seçeneğini belirleyin.

Açıklamayı inceleyin.

30e3baf4c272c8ab.png

13. DevAI CLI Geliştirme

Bu bölümde devai cli'de değişiklik yapacaksınız.

Başlamak için python virtualenv'yi kurun, gereksinimleri yükleyin ve örnek komutu çalıştırın.

cd ~/github/genai-for-developers/devai-cli
python3 -m venv venv
. venv/bin/activate
pip3 install -r src/requirements.txt
pip3 install --editable ./src
devai echo

Her şeyin düzgün çalıştığından emin olmak için test kapsamı incelemesi komutunu çalıştırın:

devai review testcoverage -c ~/github/genai-for-developers/sample-app/src

Cloud Shell Düzenleyici'de Markdown önizlemesini kullanarak sonuçları inceleyin.

Yeni bir dosya oluşturun ve Gemini'ın yanıtını yapıştırın.

Ardından Komut Paleti'ni kullanarak "Markdown: Open Preview"i seçin.

ec6fedf4b6d3fb73.png

9999e7fbb20cf251.png

76858be03d73abd0.png

14. devai cli komutlarını keşfetme

Kod incelemesi komutu

devai review code -c ~/github/genai-for-developers/sample-app/src/main/java

Performans incelemesi komutu

devai review performance -c ~/github/genai-for-developers/sample-app/src/main/java

Güvenlik incelemesi komutu

devai review security -c ~/github/genai-for-developers/sample-app/src/main/java

Kapsam incelemesi komutunu test et

devai review testcoverage -c ~/github/genai-for-developers/sample-app/src

Engelleyicilerin inceleme komutları

devai review blockers -c ~/github/genai-for-developers/sample-app/pom.xml
devai review blockers -c ~/github/genai-for-developers/sample-app/setup.md

Görüntü/şema inceleme ve özetleme:

Giriş şeması[~/github/genai-for-developers/images/extension-diagram.png]:

4b109a74e1aa3fb6.png

İnceleme komutu:

devai review image \
  -f ~/github/genai-for-developers/images/extension-diagram.png \
  -p "Review and summarize this diagram"

Çıkış:

The diagram outlines a process for conducting local code reviews using a VS Code extension or CLI, leveraging Google Cloud's Vertex AI (Gemini Pro) for generating review prompts. 

**Process Flow:**

1. **Code Style Check:** Developers initiate the process by checking their code for adherence to pre-defined style guidelines.
2. **Prompt Generation:** The VS Code extension/CLI sends the code to Vertex AI (Gemini Pro) on Google Cloud. 
3. **Vertex AI Review:** Vertex AI analyzes the code and generates relevant review prompts.
4. **Local Review:** The prompts are sent back to the developer's IDE for their consideration.
5. **Optional Actions:** Developers can optionally: 
    - Create new JIRA issues directly from the IDE based on the review prompts.
    - Generate new issues in a GitLab repository.

**Key Components:**

* **VS Code Extension/CLI:** Tools facilitating the interaction with Vertex AI and potential integrations with JIRA and GitLab.
* **Vertex AI (Gemini Pro):** Google Cloud's generative AI service responsible for understanding the code and generating meaningful review prompts.
* **Google Cloud Secret Manager:** Securely stores API keys and access tokens required to authenticate and interact with Google Cloud services.
* **JIRA/GitLab (Optional):** Issue tracking and project management tools that can be integrated for a streamlined workflow.

**Benefits:**

* **Automated Review Assistance:** Leveraging AI to generate review prompts saves time and improves the consistency and quality of code reviews. 
* **Local Development:** The process empowers developers to conduct reviews locally within their familiar IDE.
* **Integration Options:** The flexibility to integrate with project management tools like JIRA and GitLab streamlines workflow and issue tracking.

Resim farkı analizi:

devai review imgdiff \
  -c ~/github/genai-for-developers/images/devai-api.png \
  -t ~/github/genai-for-developers/images/devai-api-slack.png

Çıkış:

The following UI elements are missing in the "AFTER UPGRADE STATE" image compared to the "BEFORE UPGRADE STATE" image:

1. **Slack:** The entire Slack element, including the icon, "Team channel" label, and the arrow indicating interaction, is absent in the AFTER UPGRADE image. 
2. **Storage Bucket:** The "Storage Bucket" element with its icon and "PDFs" label is missing in the AFTER UPGRADE image. 
3. **"GenAI Agents" label in Vertex AI block:** The BEFORE UPGRADE image has "Vertex AI Agents" and "GenAI Agent" labels within the Vertex AI block, while the AFTER UPGRADE image only has "Vertex AI."
4. **"Open JIRA Issue" and "Team Project" labels:** In the BEFORE UPGRADE image, these labels are connected to the JIRA block with an arrow. These are missing in the AFTER UPGRADE image.

**Decision Explanation:**

The analysis is based on a direct visual comparison of the two provided images, noting the presence and absence of specific UI elements and their associated labels. The elements listed above are present in the BEFORE UPGRADE image but absent in the AFTER UPGRADE image.

Belge oluşturma komutu:

devai document readme -c ~/github/genai-for-developers/sample-app/src/main/

Çıkış:

# Bank of Anthos - Balance Reader Service

## Table of Contents
- [Description](#description)
- [Features](#features)
- [Technologies Used](#technologies-used)
- [Installation](#installation)
- [Configuration](#configuration)
- [Usage](#usage)
- [Health Checks](#health-checks)
- [Metrics and Tracing](#metrics-and-tracing)
- [Contributing](#contributing)
- [License](#license)

## Description

The Balance Reader service is a component of the Bank of Anthos sample application. It provides a REST endpoint for retrieving the current balance of a user account. This service demonstrates key concepts for building microservices with Spring Boot and deploying them to a Kubernetes cluster.

## Features

- Securely retrieves account balances using JWT authentication.
- Leverages a local cache for fast balance retrieval.
- Asynchronously processes transactions from a central ledger.
- Provides health check endpoints for Kubernetes liveness and readiness probes.
- Exposes metrics to Stackdriver for monitoring and observability.
- Supports distributed tracing with Zipkin.

## Technologies Used

- Java
- Spring Boot
- Spring Data JPA
- Hibernate
- Google Cloud SQL (PostgreSQL)
- JWT (JSON Web Token)
- Guava Cache
- Micrometer
- Stackdriver
- Zipkin

## Installation

1. **Prerequisites:**
   - Java 17 or later
   - Maven 3.5 or later
   - Docker (for containerization)
   - Kubernetes cluster (for deployment)
   - Google Cloud account (for Stackdriver and other GCP services)

Cloud Shell Düzenleyici'de kullanılabilen devai cli komutlarını inceleyin:

cloudshell edit ~/github/genai-for-developers/devai-cli/README.md

Alternatif olarak, GitHub deposunda README.md dosyasını inceleyebilirsiniz.

15. Bir dosyadaki tüm ortam değişkenlerini takip etme

Oluşturacağınız tüm ortam değişkenlerini (ör. API anahtarları, API jetonları vb.) izlemek için yeni bir dosya başlatın.

Laboratuvarda ilerlerken bunları farklı sistemler için birçok kez kullanacaksınız. Bu nedenle, bu komutlara tek bir yerden referans vermeniz daha kolay olacaktır.

16. LangSmith LLM izleme yapılandırması

Bir LangSmith hesabı oluşturun ve Settings (Ayarlar) bölümünde bir Service API anahtarı oluşturun. https://docs.smith.langchain.com/

LangSmith entegrasyonu için gereken ortam değişkenlerini ayarlayın. Komutları çalıştırmadan önce Service API anahtarını değiştirin.

export LANGCHAIN_API_KEY=langsmith-service-api-key

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

Hassas bilgilerin terminalde gösterilmesini önlemek için en iyi yöntem read -s kullanmaktır. Bu, ortam değişkenlerini konsolun komut geçmişinde değer gösterilmeden ayarlamanızı sağlayan güvenli bir yöntemdir. Çalıştırdıktan sonra değeri yapıştırıp Enter tuşuna basmanız gerekir.

17. JIRA komut yapılandırması

Henüz hesabınız yoksa JIRA hesabı oluşturun.

Projeniz için bir JIRA API jetonu oluşturun. https://id.atlassian.com/manage-profile/security/api-tokens

JIRA entegrasyonu için gereken bu ortam değişkenlerini ayarlayın (komutları çalıştırmadan önce değerleri değiştirin).

export JIRA_API_TOKEN=your-token-value
export JIRA_USERNAME="email that you used to register with JIRA"
export JIRA_INSTANCE_URL="https://YOUR-PROJECT.atlassian.net"
export JIRA_PROJECT_KEY="JIRA project key"
export JIRA_CLOUD=true

review.py dosyasını açma:

cloudshell edit ~/github/genai-for-developers/devai-cli/src/devai/commands/review.py

review.py dosyayı inceleyin:

    source=source.format(format_files_as_string(context))

    code_chat_model = GenerativeModel(model_name)
    code_chat = code_chat_model.start_chat()
    code_chat.send_message(qry)
    response = code_chat.send_message(source)
    ...
    else:
        click.echo(response.text) 

Aşağıdaki satırın yorumunu kaldırın:

# Uncomment after configuring JIRA and GitLab env variables - see README.md for details

Dosyanın üst kısmındaki JIRA komutunu içe aktar

# from devai.commands.jira import create_jira_issue

code yönteminde JIRA sorunu oluşturma yöntemi

#create_jira_issue("Code Review Results", response.text)

Kod inceleme komutunu yeniden çalıştırın ve aracının çıkışını kontrol edin:

export PROJECT_ID=$(gcloud config get-value project)
export LOCATION=us-central1

devai review code -c ~/github/genai-for-developers/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

Örnek çıktı:

(venv) student_00_19a997c157f8@cloudshell:~/genai-for-developers/devai-cli (qwiklabs-gcp-02-71a9948ae110)$ devai review code -c ../sample-app/src/main/java/anthos/samples/bankofanthos/balancereader
/home/student_00_19a997c157f8/genai-for-developers/devai-cli/venv/lib/python3.9/site-packages/langchain_core/_api/deprecation.py:117: LangChainDeprecationWarning: The function `initialize_agent` was deprecated in LangChain 0.1.0 and will be removed in 0.2.0. Use new agent constructor methods like create_react_agent, create_json_agent, create_structured_chat_agent, etc. instead.
  warn_deprecated(
Response from Model: ```java
// Class: TransactionRepository
// Method: findBalance

// Efficiency
- Consider using a native SQL query to improve performance for complex database operations.
- Use prepared statements to avoid SQL injection vulnerabilities.

// Best Practices
- Return a Optional<Long> instead of null to handle the case when no balance is found for the given account.

/home/student_00_19a997c157f8/genai-for-developers/devai-cli/venv/lib/python3.9/site-packages/langchain_core/_api/deprecation.py:117: LangChainDeprecationWarning: __call__ işlevinin desteği LangChain 0.1.0 sürümünde sonlandırıldı ve 0.2.0 sürümünde kaldırılacak. Bunun yerine invoke.warn_deprecated(

Yeni AgentExecutor zinciri giriliyor... Düşünce: Açıklama, soruda sağlandığı için düşünülecek bir şey yoktur:

{
  "action": "create_issue",
  "action_input": {
    "description": "Class: TransactionRepository\nMethod: findBalance\n\nEfficiency\n- Consider using a native SQL query to improve performance for complex database operations.\n- Use prepared statements to avoid SQL injection vulnerabilities.\n\nBest Practices\n- Return a Optional<Long> instead of null to handle the case when no balance is found for the given account."
  }
}

CYMEATS-117 anahtarıyla yeni sorun oluşturuldu

Gözlem: Anahtar: CYMEATS-117 ile yeni sorun oluşturuldu Düşünce: Nihai Cevap: CYMEATS-117

Bitmiş zincir.

Open your JIRA project in the browser and review the created issue.

Sample JIRA issue view.

<img src="img/9a93a958c30f0b51.png" alt="9a93a958c30f0b51.png"  width="624.00" />

Open  [LangSmith portal](https://smith.langchain.com/) and review LLM trace for JIRA issue creation call.

Sample LangSmith LLM trace.

<img src="img/6222ee1653a5ea54.png" alt="6222ee1653a5ea54.png"  width="624.00" />


## Import GitHub repo to GitLab repo



Go to  [https://gitlab.com/projects/new](https://gitlab.com/projects/new) and select "`Import project`" / "`Repository by URL`" option:

Git repository url:

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

Or

Your personal GitHub project that you created earlier in this lab.

Under Project URL - select your GitLab userid

Set Visibility to `Public`.

Click - "`Create Project`" to start the import process.

If you see an error about invalid GitHub Repository URL,  [create a new GitHub token](https://github.com/settings/tokens)(fine-grained) with Public repositories read-only access, and retry import again providing your GitHub userid and token.


## Clone GitLab repo and setup SSH key



Return to Google Cloud Shell terminal and set up a new SSH key. 

Update your email before running the commands. Hit enter multiple times to accept defaults.

ssh-keygen -t ed25519 -C "e-posta-adresiniz"

eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519

cat ~/.ssh/id_ed25519.pub

Add a public key to your GitLab account.

Open  [https://gitlab.com/-/profile/keys](https://gitlab.com/-/profile/keys) and click "Add new key".

For the key value copy/paste the output of the last command.

Go back to the terminal and clone the repository. 

cd ~ mkdir gitlab cd gitlab

Replace with your GitLab userid and repository url that was just created.

```console
git clone git@gitlab.com:YOUR_GITLAB_USERID/genai-for-developers.git

Dizini değiştirin ve .gitlab-ci.yml dosyasını açın.

cd genai-for-developers

cloudshell edit .gitlab-ci.yml

Daha önce yapmadıysanız Cloud Shell Düzenleyici'de Gemini öğesini etkinleştirin.

4a7f4640f66037f.png

.gitlab-ci.yml dosyasında herhangi bir yeri sağ tıklayın ve "Gemini Code Assist > Explain this""yi seçin.

154838a0100389a9.png

18. GitLab komut yapılandırması

GitLab'i açın ve "Settings / Access Tokens" altında bir Proje Erişim Jetonu oluşturun depodaki GitLab deposunda görünür.

Sonraki adımlarda kullanılacak Erişim Jetonu değerini kopyalayıp saklayın.

Aşağıdaki ayrıntıları kullanın:

  • Jeton adı: devai-cli-qwiklabs
  • Rol: Maintainer
  • Kapsam: api

1865de233277f11c.png

GitLab entegrasyonu için gereken ortam değişkenlerini ayarlayın.

Bu komut için GitLab erişim jetonunuzu güncellemeniz gerekir.

export GITLAB_PERSONAL_ACCESS_TOKEN=gitlab-access-token

Bu komut, GitLab kullanıcı kimliğinizi ve depo adınızı güncellemenizi gerektirir.

export GITLAB_REPOSITORY="USERID/REPOSITORY"

Diğer ortam değişkenlerini ayarlayın:

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

GitLab web sitesini açın ve projenizde "CICD AI Insights" başlıklı yeni bir GitLab sorunu oluşturun.

63a13948f6864074.png

Diğer bir seçenek de aşağıdaki curl komutunu kullanmaktır. GitLab proje kimliğine ihtiyacınız olacak. Proje kimliğini "Settings / General" altında bulabilirsiniz bölümüne bakın.

export GITLAB_PROJECT_ID=56390153 # replace

curl --request POST \
  --header "PRIVATE-TOKEN: $GITLAB_PERSONAL_ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{"title":"CICD AI Insights"}' \
  https://gitlab.com/api/v4/projects/$GITLAB_PROJECT_ID/issues

Cloud Shell'e geri dönün ve review.py dosyasını açın:

cloudshell edit ~/gitlab/genai-for-developers/devai-cli/src/devai/commands/review.py

Aşağıdaki kodu bulup yorumunu kaldırın

GitLab komutunu içe aktarma satırı

# from devai.commands.gitlab import create_gitlab_issue_comment

GitLab sorunu hakkında yorum yapma yöntemi

# create_gitlab_issue_comment(response.text)

19. DevAI CLI geliştirme

GitLab deposuna/dizinine geçiş yaptığınız için. Aşağıdaki kurulum adımlarını yeniden çalıştırmanız gerekir.

Terminalde python virtualenv'inizi ayarlayın, gereksinimleri yükleyin ve örnek komutu çalıştırın.

export PROJECT_ID=$(gcloud config get-value project)
export LOCATION=us-central1

cd ~/gitlab/genai-for-developers/devai-cli
python3 -m venv venv
. venv/bin/activate
pip3 install -r src/requirements.txt
pip3 install --editable ./src
devai echo

cli'nin konumunu onaylayabilirsiniz. Bu kez, GitLab klasöründe bulunmalıdır.

 which devai

Terminalde kod inceleme komutunu yeniden çalıştırın:

devai review code -c ~/gitlab/genai-for-developers/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

Örnek çıkış (bazı bölümler kısaltılmıştır):

(venv) student_00_19a997c157f8@cloudshell:~/genai-for-developers/devai-cli (qwiklabs-gcp-02-71a9948ae110)$ devai review code -c ../sample-app/src/main/java/anthos/samples/bankofanthos/balancereader
.
.
Response from Model: **Class: Transaction**

**Method: toString**

**Maintainability:**

* The formatting of the string representation could be more clear and concise. Consider using a dedicated method for formatting the amount, e.g., `formatAmount()`.
.
.

> Entering new AgentExecutor chain...
Thought: I need to first get the issue ID using the Get Issues tool, then I can comment on the issue using the Comment on Issue tool.
Action: Get Issues
Action Input: 
Observation: Found 1 issues:
[{'title': 'CICD AI Insights', 'number': 1}]
Thought:Thought: I found the issue ID, so now I can add the comment to the issue.
Action: Comment on Issue
Action Input: 1


Action: Get Issue
Action Input: 1
Observation: {"title": "CICD AI Insights", "body": "", "comments": "[{'body': '**Transaction.java**\\n\\n\\n**Class:** Transaction\\n\\n\\n* **Security:** Consider using a custom date format like \\\\\"yyyy-MM-dd HH:mm:ss.SSS\\\\\" to handle timestamps more robustly.\\n\\n\\n**JWTVerifierGenerator.java**\\n\\n\\n* .
.
Thought:Now I can use the Comment on Issue tool to add the comment to the issue.

Action: Comment on Issue
Action Input: 
1

**Class: Transaction**

**Method: toString**

**Maintainability:**
.
.
.
Observation: Commented on issue 1
Thought:I have now completed the necessary actions and added the comment to the issue 'CICD AI Insights'.

Final Answer: Comment added to issue 'CICD AI Insights'

> Finished chain.

GitLab web sitesini açıp güncellenen sorunu inceleyin.

9da39bf6070d9447.png

LangSmith'te LLM izini inceleyin.

Örnek LLM izlemesi.

f32eed34f3a3b040.png

20. Değişiklikleri GitLab deposuna aktarma

Google Cloud Shell Düzenleyici'ye dönün.

"Source Control" hesabına geç sekmesinden erişebilirsiniz.

review.py dosyasını güncellemek için yaptığınız değişiklikleri aşamalandırın, gönderin ve kaydedin.

b838a11f362454ce.png

21. GitLab CICD yapılandırması

Şimdi, değişiklikler depoya aktarıldığında kod incelemesi çalıştırmak için GitLab CICD ardışık düzenini etkinleştireceksiniz.

GitLab web sitesini açın ve "Settings / CICD" bölümüne gidin.

Variables bölümünü genişletin ve "Add variable"u tıklayın.

Değişkenleri eklerken tüm onay kutularının işaretini kaldırdığınızdan emin olun. Örnek:

68b3ed732b6a8fe9.png

Tüm ortam değişkenlerini tuttuğunuz notlarınızı kullanarak JIRA, GitLab ve LangSmith için ortam değişkenleri ekleyin.

PROJECT_ID=qwiklabs-project-id
LOCATION=us-central1
GOOGLE_CLOUD_CREDENTIALS - cat ~/vertex-client-key.json

LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
LANGCHAIN_API_KEY=your-service-api-key

JIRA_API_TOKEN=your-token
JIRA_USERNAME="email that you used to register with JIRA"
JIRA_INSTANCE_URL="https://YOUR-PROJECT.atlassian.net"
JIRA_PROJECT_KEY="JIRA project key"
JIRA_CLOUD=true

GITLAB_PERSONAL_ACCESS_TOKEN=your-gitlab-token
GITLAB_URL="https://gitlab.com"
GITLAB_REPOSITORY="USERID/REPOSITORY"
GITLAB_BRANCH="devai"
GITLAB_BASE_BRANCH="main"

GOOGLE_CLOUD_CREDENTIALS değişken değeri için yukarıdaki bölümde oluşturulan hizmet hesabı anahtarını kullanın.

cat ~/vertex-client-key.json

CI/CD Değişkenleri görünümü:

2f4594ce72be4834.png

22. GitLab CICD ardışık düzenini çalıştırma

"Build / Pipelines" bağlantısını aç GitLab kullanıcı arayüzünde "Run Pipeline" düğmesini tıklayın.

a7518e37dde42366.png

23. GitLab ardışık düzen çıkışını inceleme

"Build / Jobs" bağlantısını aç seçeneğini tıklayın ve ardışık düzen çıkışını inceleyin.

985e4b322fb73b1c.png

GitLab web sitesini açın ve "CICD Insights" sayfasında güncellenmiş yorumları inceleyin .

GitLab iş akışı yürütme işlemini devre dışı bırakma

Google Cloud Shell Düzenleyici'ye dönün. Kod yayınlama etkinliklerinde GitLab iş akışı yürütme işlemini devre dışı bırakmak için satırların yorumunu kaldırın. İş akışını kullanıcı arayüzünde isteğe bağlı olarak yürütmeye devam edebilirsiniz.

# workflow:
#   rules:
#     - if: $CI_PIPELINE_SOURCE == "web"

Projenin kökündeki .gitlab-ci.yml dosyasını açıp satırların yorumunu kaldırın:

cloudshell edit ~/gitlab/genai-for-developers/.gitlab-ci.yml

"Source Control" hesabına geç sekme - aşama, uygulayın ve bu değişikliği aktarın.

a9d52beb8c642982.png

24. CircleCI entegrasyonu

CircleCI nedir?

CircleCI, ekiplerin yazılım geliştirme ve dağıtım süreçlerini otomatikleştirmesine olanak tanıyan bulut tabanlı bir CI/CD platformudur. GitHub, Bitbucket ve GitLab gibi sürüm denetimi sistemleriyle entegre olan bu araç, ekiplerin otomatik testler ve derlemeler çalıştırarak kod değişikliklerini anında doğrulamasına olanak tanır. CircleCI, sürekli teslim için yazılımın AWS, Google Cloud ve Azure gibi çeşitli bulut ortamlarına dağıtımını otomatikleştirebilir.

Kurulum

CircleCI web sitesini açın ve yeni bir proje oluşturun. Deponuz için "GitLab" / "Cloud" seçeneğini belirleyin.

CircleCI'ye GitLab hesabınıza erişim izni verin.

En hızlı seçeneği altında main şubesini seçin. CircleCI mevcut bir yapılandırma dosyası algılayıp bu adımı atlayabilir.

4e9b7cef458d5fba.png

Proje oluşturulduktan sonra "Project Settings" / "Environment Variables" bölümünü tıklayın.

1499b5f96ac0fe5e.png

Şimdiye kadar kullandığınız tüm ortam değişkenlerini ekleyin.

f15b7a3e02c649e8.png

Aşağıda, eklenecek env değişkenlerinin örnek listesi verilmiştir.

PROJECT_ID=qwiklabs-project-id
LOCATION=us-central1
GOOGLE_CLOUD_CREDENTIALS - cat ~/vertex-client-key.json

LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
LANGCHAIN_API_KEY=your-service-api-key

JIRA_API_TOKEN=your-token
JIRA_USERNAME="email that you used to register with JIRA"
JIRA_INSTANCE_URL="https://YOUR-PROJECT.atlassian.net"
JIRA_PROJECT_KEY="JIRA project key"
JIRA_CLOUD=true

GITLAB_PERSONAL_ACCESS_TOKEN=your-gitlab-token
GITLAB_URL="https://gitlab.com"
GITLAB_REPOSITORY="USERID/REPOSITORY"
GITLAB_BRANCH="devai"
GITLAB_BASE_BRANCH="main"

25. JIRA ve GitLab yöntemlerini etkinleştirme

Google Cloud Shell Düzenleyici'yi açın ve review.py dosyasında değişiklik yapın.

Aşağıdaki satırları bulup yorumları kaldırın.

# from devai.commands.jira import create_jira_issue
create_jira_issue("Performance Review Results", response.text)
create_gitlab_issue_comment(response.text)
.
.
.
create_jira_issue("Security Review Results", response.text)
create_gitlab_issue_comment(response.text)

"Source Control" hesabına geç sekme - aşama, uygulayın ve bu değişikliği aktarın.

GitLab web sitesini açıp "Build" / "Pipelines" bölümüne gidin.

d196ad631be17b88.png

İş akışını incelemek için CircleCI bağlantısını izleyin.

d4ff287694b82445.png

Deponuzdaki GitLab sorunuyla ilgili yorumları inceleyin.

e77ee826488d5299.png

9a51daa2960994e3.png

JIRA projenizde oluşturulan yeni sorunları inceleyin.

1e6305a32aaef6a2.png

26. Tebrikler!

Tebrikler, laboratuvarı tamamladınız.

İşlediğimiz konular:

  • GitHub, GitLab ve CircleCI'da üretken yapay zeka kodu inceleme otomasyonu adımları eklemek.
  • GitLab sorunu hakkında yorum yapma ve JIRA biletleri açma gibi görevleri otomatik hale getirmek için LangChain ReAct aracıları.

Sıradaki adım:

  • Daha fazla uygulamalı oturum yakında kullanıma sunulacak.

Temizleme

Bu eğiticide kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız kaynakları içeren projeyi silin veya projeyi tutup tek tek kaynakları silin.

Projeyi silme

Faturalandırılmanın önüne geçmenin en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.

©2024 Google LLC Tüm hakları saklıdır. Google ve Google logosu, Google LLC şirketinin ticari markalarıdır. Diğer tüm şirket ve ürün adları ilişkili oldukları şirketlerin ticari markaları olabilir.