التشغيل الآلي لمراجعة الرموز البرمجية باستخدام الذكاء الاصطناعي التوليدي

التشغيل الآلي لمراجعة الرموز البرمجية باستخدام الذكاء الاصطناعي التوليدي

لمحة عن هذا الدرس التطبيقي حول الترميز

subjectتاريخ التعديل الأخير: أكتوبر 7, 2024
account_circleتأليف: Andrey Shakirov

1. نظرة عامة

في هذا الدرس التطبيقي، ستتمكّن من إعداد مسار CICD ودمجه مع Gemini لبرمجة خطوات مراجعة الرموز البرمجية.

9dde56ad139b9553.png

ما سوف تتعلمه

في هذه الميزة الاختبارية، ستتعرّف على كيفية تنفيذ ما يلي:

  • كيفية إضافة خطوات التشغيل الآلي لمراجعة رمز الذكاء الاصطناعي التوليدي في GitHub وGitLab وCircleCI
  • كيفية استخدام موظّفي دعم LangChain ReAct وأدواتهم لأتمتة المهام، مثل التعليق على مشكلة GitLab وفتح تذاكر JIRA

المتطلبات الأساسية

  • يفترض هذا التمرين أنّك على دراية ببيئة Cloud Console وCloud Shell.

2. الإعداد والمتطلبات

إعداد مشروع Cloud

  1. سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
  • يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد تحديده). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الإشارة إلى رقم تعريف المشروع (الذي يتم تحديده عادةً على أنّه PROJECT_ID). وإذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة عنوانك الخاص لمعرفة ما إذا كان متاحًا. ولا يمكن تغييره بعد هذه الخطوة ويبقى طوال مدة المشروع.
  • يُرجى العِلم أنّ هناك قيمة ثالثة، وهي رقم المشروع، تستخدمها بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات عن كلّ من هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تتطلّب المشاركة في هذا الدليل التعليمي البرمجي أي تكلفة، أو قد تتطلّب تكلفة بسيطة. لإيقاف الموارد لتجنُّب تحصيل رسوم بعد انتهاء هذا الدليل التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يكون مستخدمو Google Cloud الجدد مؤهّلين للاستفادة من برنامج الفترة التجريبية المجانية التي تشمل رصيدًا بقيمة 300 دولار أمريكي.

إعداد البيئة

افتح محادثة Gemini.

bc3c899ac8bcf488.png

أو كتابة "اسأل Gemini" في شريط البحث.

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، وتشرح لأحد كبار المطوّرين في 5 نقاط رئيسية قصيرة الحالات التي تستدعي استخدام Cloud Run بدلاً من GKE.

يمكنك الاطّلاع على دليل الطلب لمعرفة المزيد من المعلومات حول كتابة طلبات بشكل أفضل.

كيف يستخدم "Gemini في Google Cloud" بياناتك؟

التزام Google بالخصوصية

كانت Google من أوائل الذين نشروا التزامًا بالخصوصية في الذكاء الاصطناعي/تعلُّم الآلة في المجال، والذي يؤكّد اعتقادنا بضرورة حصول العملاء على أعلى مستوى من الأمان والتحكّم في بياناتهم المخزَّنة على السحابة الإلكترونية.

البيانات التي ترسلها وتتلقّاها

تُعرف الأسئلة التي تطرحها على Gemini باسم الطلبات، بما في ذلك أي معلومات إدخال أو رمز ترسله إلى Gemini لتحليله أو إكماله. تُعرف الإجابات أو التعليمات البرمجية المكتملة التي تصلك من Gemini باسم الردود. لا يستخدم Gemini طلباتك أو ردوده كبيانات لتدريب نماذجه.

تشفير طلبات المساعدة

عند إرسال طلبات إلى Gemini، يتم تشفير بياناتك أثناء نقلها كإدخال في النموذج الأساسي في Gemini.

بيانات البرنامج التي تم إنشاؤها من Gemini

تم تدريب Gemini على رموز Google Cloud التابعة للطرف الأول بالإضافة إلى رمز برمجي محدد تابع لجهة خارجية. أنت مسؤول عن أمان الرمز البرمجي واختباره وفعاليته، بما في ذلك أيّ عمليات إكمال أو إنشاء أو تحليل للرمز البرمجي تقدّمها لك خدمة Gemini.

مزيد من المعلومات حول طريقة Google في معالجة طلباتك

3. خيارات اختبار الطلبات

إذا كنت تريد تغيير طلبات devai cli أو تمديدها، فلديك العديد من الخيارات لإجراء ذلك.

يمثّل Vertex AI Studio جزءًا من منصة Vertex AI في Google Cloud، وقد صُمّم خصّيصًا لتبسيط وتسريع تطوير نماذج الذكاء الاصطناعي التوليدي واستخدامها.

‫Google AI Studio هي أداة مستندة إلى الويب لإنشاء النماذج الأولية والتجربة مع هندسة الطلبات وواجهة برمجة التطبيقات Gemini API. يمكنك الاشتراك في Gemini 1.5 Pro باستخدام مليون نافذة سياق أو مزيد من المعلومات.

تطبيق Gemini للويب (gemini.google.com) هو أداة مستنِدة إلى الويب مصمّمة لمساعدتك في استكشاف والاستفادة من إمكانات نماذج Gemini المستنِدة إلى الذكاء الاصطناعي من Google.

4. إنشاء حساب الخدمة

فعِّل Cloud Shell من خلال النقر على الرمز على يسار شريط البحث.

3e0c761ca41f315e.png

في الوحدة الطرفية المفتوحة، يجب تفعيل الخدمات المطلوبة لاستخدام واجهات Vertex AI ومحادثات Gemini.

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

إذا طُلب منك التفويض، انقر على "تفويض". للمتابعة.

6356559df3eccdda.png

شغِّل الأوامر التالية لإنشاء مفاتيح حساب خدمة جديد.

ستستخدم حساب الخدمة هذا لإجراء طلبات بيانات من واجهة برمجة التطبيقات إلى واجهة برمجة التطبيقات Vertex AI Gemini API من مسارات CICD.

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 إلى مستودع GitHub الشخصي

انتقِل إلى https://github.com/GoogleCloudPlatform/genai-for-developers/fork واختَر رقم تعريف المستخدم في GitHub كمالك.

أزِل العلامة من المربّع بجانب خيار نسخ الفرع "main" فقط.

انقر على الزر "Create fork".

6. تفعيل مهام سير العمل في GitHub Actions

افتح مستودع GitHub المنشعب في المتصفّح وانتقِل إلى علامة التبويب "Actions" لتفعيل سير العمل.

1cd04db9b37af7cf.png

7. إضافة أسرار المستودع

إنشاء مستودع سرّي ضمن "Settings / Secrets and variables / Actions" في مستودع جيت هب المتشعب.

أضِف مفتاحًا سريًا للمستودع باسم "GOOGLE_API_CREDENTIALS".

94cbe2778bef25eb.png

بدِّل إلى نافذة/علامة تبويب Google Cloud Shell ونفِّذ الأمر أدناه في الوحدة الطرفية Cloud Shell.

cat ~/vertex-client-key.json

انسخ محتوى الملف والصقه كقيمة للمفتاح السري.

915579a97f8f2ced.png

أضِف سرًا واحدًا (PROJECT_ID) باستخدام رقم تعريف مشروع Qwiklabs كقيمة 4fa92833ce615a36.png

8. تشغيل سير عمل GitHub Actions

انتقِل إلى مستودع GitHub في المتصفّح وشغِّل سير العمل.

تم ضبط سير العمل لتشغيله من خلال دفع الرمز أو التنفيذ اليدوي.

اختَر "GenAI For Developers" ضمن "كل مسارات العمل" وانقر على "Run workflow" باستخدام فرع "main".

da11273b4b54f7b6.png

مراجعة النتائج:

cf49aa41980aacc5.png

نتائج أمر التغطية التجريبي:

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

3b21bd4639524763.png

نتائج الأمر "مراجعة الرمز":

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

4876dbc2e0042943.png

نتائج الأمر "مراجعة الأداء":

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

98dd2472b2e819bf.png

نتائج أمر مراجعة الأمان:

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

7d180a763db92d56.png

مراجعة نتائج الأمر "المحظورون":

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

726175e874aefcf.png

9. استنساخ المستودع

ارجع إلى الوحدة الطرفية Cloud Shell واستنساخ المستودع.

أنشئ مجلدًا لمستودع GitHub.

mkdir github
cd github

غيِّر YOUR-GITHUB-USERID إلى رقم تعريف المستخدم في GitHub قبل تنفيذ الأوامر.

اضبط اسم مستخدم Git وبريده الإلكتروني في المحطة الطرفية.

يمكنك تعديل القيم قبل تشغيل الأوامر.

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 

غيِّر المجلد وافتح ملف سير العمل في محرِّر Cloud Shell.

cd genai-for-developers

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

انتظِر إلى أن يظهر ملف الإعداد في IDE.

9e81e5a79d421eac.png

10. تفعيل Gemini Code Assist

انقر على "Gemini". الرمز في أسفل الجانب الأيسر 7c891e32c055c0e4.png،

انقر على "Login to Google Cloud". و"Select a Google Cloud Project".

f5318f22c91ecaa8.png

6b7203ffdd8485fa.png

fb8d42a6bc8a260f.png

من النافذة المنبثقة، اختَر مشروعك على Qwiklabs.

f661047956a6d6f9.png

11. شرح الرمز باستخدام Gemini Code Assist

انقر بزر الماوس الأيمن على أي مكان في ملف devai-review.yml واختَر Gemini Code Assist > Explain هذا.

41fb7da002bdf43.png

شرح المراجعة:

7724d52e54918c00.png

12. تشغيل DEVAI CLI على الجهاز

ارجع إلى "محرِّر Cloud Shell" وافتح وحدة طرفية جديدة.

149218baaf30865f.png

ارجع إلى وحدة طرفية Cloud Shell ونفِّذ الأوامر أدناه لتثبيت devai محليًا.

pip3 install devai-cli

تم تثبيت سطر الأوامر ولكنه ليس في المسار PATH.

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. يمكنك استبداله باسم المجلد الرئيسي للمستخدم. مثلاً: student_00_478dfeb8df15

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

شغّل الأمر devai cli لإجراء مراجعة للرمز البرمجي محليًا. راجِع نتائج سطر الأوامر.

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

افتح نص المراجعة من خلال تنفيذ الأمر أدناه:

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

انقر بزر الماوس الأيمن على أي مكان في ملف review.py واختَر Gemini Code Assist > Explain هذا.

مراجعة التفسير

30e3baf4c272c8ab.png

13. تطوير واجهة سطر الأوامر (CLI) لـ DevAI

في هذا القسم، ستُجري تغييرات على devai cli.

للبدء، عليك إعداد python virtualenv وتثبيت المتطلبات وتنفيذ نموذج الأمر.

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

شغِّل الأمر "مراجعة تغطية الاختبار" للتأكّد من أنّ كل شيء يعمل على ما يرام:

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

راجِع النتائج باستخدام ميزة معاينة Markdown في "محرر Cloud Shell".

أنشِئ ملفًا جديدًا والصِق ردّ Gemini.

بعد ذلك، استخدِم لوحة الأوامر واختَر "Markdown: Open Preview".

ec6fedf4b6d3fb73.png

9999e7fbb20cf251.png

76858be03d73abd0.png

14. التعرّف على أوامر devai cli

أمر مراجعة الرمز

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

طلب مراجعة الأداء

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

أمر مراجعة الأمان

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

أمر مراجعة تغطية الاختبار

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

أوامر مراجعة المحظورات

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

مراجعة الصور أو المخططات البيانية وتلخيصها:

الرسم البياني للإدخال[~/github/genai-for-developers/images/extension-diagram.png]:

4b109a74e1aa3fb6.png

طلب المراجعة:

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

إخراج:

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.

تحليل اختلافات الصور:

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

إخراج:

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.

أمر إنشاء المستندات:

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

إخراج:

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

راجِع أوامر devai cli المتاحة في محرِّر Cloud Shell:

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

أو راجع README.md في مستودع جيت هب.

15. تتبُّع جميع متغيرات البيئة في الملف

ابدأ بإنشاء ملف جديد لتتبُّع جميع متغيّرات البيئة (مثل مفاتيح واجهة برمجة التطبيقات ورموز واجهة برمجة التطبيقات وما إلى ذلك) التي ستُنشئها.

ستستخدمها لأنظمة مختلفة عدة مرات أثناء الاطّلاع على الدليل، لذا سيكون من الأسهل الرجوع إليها في مكان واحد.

16. إعدادات تتبُّع LangSmith LLM

أنشِئ حساب LangSmith وأنشئ مفتاح واجهة برمجة تطبيقات للخدمة في قسم "الإعدادات". https://docs.smith.langchain.com/

تعيين متغيرات البيئة المطلوبة لدمج LangSmith. استبدِل مفتاح واجهة برمجة التطبيقات للخدمة قبل تنفيذ الأوامر.

export LANGCHAIN_API_KEY=langsmith-service-api-key

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

لتجنُّب الكشف عن معلومات حسّاسة في الوحدة الطرفية، من أفضل الممارسات استخدام read -s، علمًا بأنّها طريقة آمنة لضبط متغيّرات البيئة بدون ظهور أي قيمة في سجلّ الأوامر بوحدة التحكّم. بعد تشغيله، عليك لصق القيمة والنقر على مفتاح Enter.

17. ضبط أوامر JIRA

أنشِئ حساب JIRA إذا لم تكن تملك حسابًا.

أنشئ رمزًا مميّزًا لواجهة برمجة التطبيقات JIRA لمشروعك. https://id.atlassian.com/manage-profile/security/api-tokens

اضبط متغيّرات البيئة هذه المطلوبة لدمج JIRA (استبدِل القيم قبل تنفيذ الأوامر).

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:

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

مراجعة ملف واحد (review.py):

    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) 

ابحث عن السطر أدناه وأزِل التعليق عنه:

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

استيراد أمر JIRA في أعلى الملف

# from devai.commands.jira import create_jira_issue

طريقة إنشاء مشكلة JIRA في الطريقة code

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

يُرجى إعادة تنفيذ أمر مراجعة الرمز والاطّلاع على نتيجة موظّف الدعم:

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

مثال على الإخراج:

(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__ نهائيًا في الإصدار 0.1.0 من LangChain، وسيتمّت إزالتها في الإصدار 0.2.0. استخدِم invoke بدلاً من ذلك. warn_deprecated(

الدخول إلى سلسلة AgentExecutor الجديدة... الفكر: تم توفير الوصف في السؤال لذا لا يوجد شيء يمكن التفكير فيه بشأن الإجراء:

{
 
"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

ملاحظة: تم إنشاء مشكلة جديدة باستخدام المفتاح: CYMEATS-117. الفكرة: الإجابة النهائية: CYMEATS-117

سلسلة مكتملة.

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 "your-email-address"

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

غيِّر الدليل وافتح الملف .gitlab-ci.yml.

cd genai-for-developers

cloudshell edit
.gitlab-ci.yml

في حال لم يسبق لك تفعيل Gemini، فعِّله في محرِّر Cloud Shell.

4a7f4640f66037f.png

انقر بزر الماوس الأيمن في أي مكان في ملف .gitlab-ci.yml واختَر "Gemini Code Assist > Explain this".

154838a0100389a9.png

18. ضبط أمر GitLab

افتح GitLab وأنشئ رمزًا مميّزًا للوصول إلى المشروع ضمن "Settings / Access Tokens" في مستودع GitLab الذي تم إنشاؤه في الخطوات السابقة.

انسخ قيمة رمز الدخول واحتفِظ بها لاستخدامها في الخطوات التالية.

استخدِم التفاصيل التالية:

  • اسم الرمز المميّز: devai-cli-qwiklabs
  • الدور: Maintainer
  • النطاق: api

1865de233277f11c.png

اضبط متغيّرات البيئة المطلوبة لدمج GitLab.

يتطلّب هذا الأمر منك تعديل رمز الوصول المميّز في GitLab.

export GITLAB_PERSONAL_ACCESS_TOKEN=gitlab-access-token

يتطلّب هذا الأمر تحديث معرّف مستخدم GitLab واسم المستودع.

export GITLAB_REPOSITORY="USERID/REPOSITORY"

اضبط بقية متغيّرات البيئة:

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

افتح موقع GitLab الإلكتروني وأنشئ مشكلة جديدة في GitLab في مشروعك بعنوان "CICD AI Insights".

63a13948f6864074.png

هناك خيار آخر وهو استخدام الأمر curl أدناه. ستحتاج إلى رقم تعريف مشروع GitLab. يمكنك البحث عنه ضمن "Settings / General" .

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 وافتح ملف review.py:

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

ابحث عن الرمز البرمجي أدناه وأزِل التعليقات منه.

سطر لاستيراد أمر GitLab

# from devai.commands.gitlab import create_gitlab_issue_comment

طريقة التعليق على مشكلة GitLab

# create_gitlab_issue_comment(response.text)

19. تطوير واجهة سطر أوامر DevAI

منذ أن غيّرت إلى مستودع/دليل GitLab. ستحتاج إلى إعادة تنفيذ خطوات الإعداد أدناه.

في الوحدة الطرفية، عليك إعداد pythonvirtualenv وتثبيت المتطلبات وتشغيل نموذج الأمر.

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، ولكن يجب وضعها هذه المرة ضِمن مجلد GitLab.

 which devai

إعادة تشغيل أمر مراجعة التعليمات البرمجية في الوحدة الطرفية:

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

نموذج للمخرجات - مع اختصار بعض الأقسام:

(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 الإلكتروني وراجِع المشكلة المعدّلة.

9da39bf6070d9447.png

مراجعة تتبُّع النماذج اللغوية الكبيرة في LangSmith

نموذج تتبُّع للنماذج اللغوية الكبيرة

f32eed34f3a3b040.png

20. نشر التغييرات على مستودع جيتلاب

ارجِع إلى "محرِّر Google Cloud Shell".

التبديل إلى "Source Control" .

حدِّد التغييرات التي أجريتها وصدِّقها وادفعها لتعديل ملف review.py.

b838a11f362454ce.png

21. إعدادات GitLab CICD

الخطوة التالية هي تفعيل مسار GitLab CICD من إجراء مراجعة الرموز البرمجية عند إرسال التغييرات إلى المستودع.

افتح الموقع الإلكتروني GitLab وانتقِل إلى قسم Settings / CICD".

وسِّع قسم Variables وانقر على Add variable.

تأكَّد من إزالة العلامة من جميع مربّعات الاختيار عند إضافة المتغيّرات. مثال:

68b3ed732b6a8fe9.png

باستخدام ملاحظاتك، حيث تحتفظ بجميع متغيرات البيئة، أضف متغيرات بيئة لـ JIRA وGitLab وLangSmith.

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، استخدِم مفتاح حساب الخدمة الذي تم إنشاؤه في القسم أعلاه.

cat ~/vertex-client-key.json

عرض متغيرات CI/CD:

2f4594ce72be4834.png

22. تشغيل مسار GitLab CICD

فتح "Build / Pipelines" في واجهة مستخدم GitLab وانقر على "Run Pipeline".

a7518e37dde42366.png

23. مراجعة ناتج مسار GitLab

افتح "Build / Jobs" في واجهة مستخدم GitLab وراجِع ناتج مسار الإدخال.

985e4b322fb73b1c.png

افتح الموقع الإلكتروني GitLab وراجِع التعليقات المعدَّلة بشأن المشكلة "CICD Insights".

إيقاف تنفيذ سير العمل في GitLab

ارجِع إلى "محرِّر Google Cloud Shell". أزِل التعليقات من السطور لإيقاف تنفيذ سير عمل GitLab عند أحداث دفع الرموز البرمجية. سيظل بإمكانك تنفيذ سير العمل من واجهة المستخدم عند الطلب.

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

افتح .gitlab-ci.yml في جذر المشروع وأزِل التعليقات من السطور التالية:

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

انتقِل إلى علامة التبويب "Source Control"، وفعِّل هذا التغيير واحفظه وأرسِله.

a9d52beb8c642982.png

24. دمج CircleCI

ما هو CircleCI؟

CircleCI هي منصة CI/CD مستنِدة إلى السحابة الإلكترونية تتيح للفِرق برمجة عمليات تطوير البرامج ونشرها بشكل آلي. وهي تتكامل مع أنظمة التحكم في الإصدارات مثل GitHub وBitbucket وGitLab، ما يسمح للفِرق بالتحقّق من صحة التغييرات في الرموز البرمجية في الوقت الفعلي من خلال إجراء اختبارات وإصدارات آلية. لضمان التسليم المستمر، يمكن لشركة CircleCI نشر البرامج بشكل تلقائي في بيئات سحابة إلكترونية متنوعة، مثل AWS وGoogle Cloud وAzure.

ضبط إعدادات الجهاز

افتح موقع CircleCI الإلكتروني وأنشئ مشروعًا جديدًا. اختيار "GitLab" / "Cloud" للمستودع.

امنح CircleCI إمكانية الوصول إلى حسابك على GitLab.

ضمن الخيار "الأسرع"، اختَر الفرع main. قد ترصد CircleCI ملف إعداد حاليًا وتتخطّى هذه الخطوة.

4e9b7cef458d5fba.png

بعد إنشاء المشروع، انقر على قسم "Project Settings" / "Environment Variables".

1499b5f96ac0fe5e.png

أضِف جميع متغيّرات البيئة التي استخدمتها حتى الآن.

f15b7a3e02c649e8.png

إليك نموذج قائمة من متغيرات البيئة المطلوب إضافتها.

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 وGitLab

افتح "محرِّر Google Cloud Shell" وأدخِل تغييرًا على ملف review.py.

يمكنك البحث عن الأسطر وإلغاء التعليق عليها أدناه.

# 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" علامة التبويب - المرحلة، وتنفيذ هذا التغيير، ودفعه.

افتح الموقع الإلكتروني GitLab وانتقِل إلى "Build" / "Pipelines".

d196ad631be17b88.png

اتّبِع الرابط المؤدي إلى CircleCI لمراجعة سير العمل.

d4ff287694b82445.png

راجِع التعليقات حول مشكلة GitLab في مستودعك.

e77ee826488d5299.png

9a51daa2960994e3.png

راجِع المشاكل الجديدة التي تم إنشاؤها في مشروع JIRA.

1e6305a32aaef6a2.png

26. تهانينا!

تهانينا، لقد أنهيت التمرين المعملي.

المواضيع التي تناولناها:

  • إضافة خطوات مراجعة كود الذكاء الاصطناعي التوليدي في GitHub وGitLab وCircleCI
  • يعمل موظّفو LangChain ReAct على التشغيل الآلي للمهام، مثل التعليق على مشكلة GitLab وفتح تذاكر JIRA.

الخطوة التالية:

  • سنعقد قريبًا المزيد من الجلسات العملية.

تَنظيم

لتجنُّب تحصيل رسوم من حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا الدليل التعليمي، يمكنك إما حذف المشروع الذي يحتوي على الموارد أو الاحتفاظ بالمشروع وحذف الموارد الفردية.

حذف المشروع

إنّ أسهل طريقة لإيقاف الفوترة هي حذف المشروع الذي أنشأته للدليل التعليمي.

©2024 Google LLC. جميع الحقوق محفوظة. Google وشعار Google هما علامتان تجاريتان تابعتان لشركة Google LLC. جميع أسماء الشركات والمنتجات الأخرى قد تكون علامات تجارية للشركات المالكة لها.