התאמה אישית של הקוד באמצעות Gemini Code Assist Enterprise

1. לפני שמתחילים

בשיעור הזה תלמדו איך להכין את Gemini Code Assist כדי לקבל הצעות להתאמה אישית של קוד שמותאמות למאגרי הקוד הפרטיים שלכם. כך התוצאות מ-Code Assist יכולות להיות שימושיות הרבה יותר, במיוחד לצוותים שיש להם מוסכמות ספציפיות לעבודה דומה שחוזרת על עצמה לעיתים קרובות. חשוב לדעת שאם תאפש/י ל-Gemini לבצע אינדוקס של בסיסי קוד פרטיים לצורך התכונה הזו, Gemini לא יוכל להתאמן באופן כללי על הקוד הפרטי שלך.

נראה גם איך אפשר להשתמש בקובץ .aiexclude כדי להחריג קבצים רגישים או לא רלוונטיים מההתאמה האישית של הקוד.

דרישות מוקדמות

  • הבנה בסיסית של Gemini Code Assist וגישה לפרויקט שבו הוא מופעל
  • היכרות עם שפת תכנות נתמכת להתאמה אישית של קוד
  • יכולת ליצור משאבים ב-us-central1 או ב-europe-west1, כי התאמה אישית של קוד מחייבת חיבורים של Developer Connect במיקומים האלה.
  • Google Cloud CLI מעודכן ומאומת

מה לומדים

  • איך משתמשים בהתאמה אישית של קוד ב-Gemini Code Assist Enterprise
  • אחד מתוך הרבה תרחישים לדוגמה שבהם התאמה אישית של קוד יכולה לחסוך זמן לצוותים

מה צריך

  • פרויקט בענן של Google שבו מופעל Gemini Code Assist
  • מאגר פרטי לאינדוקס לבקשות התאמה אישית
  • הזמן שנדרש לאינדוקס של הקוד לצורך בקשות להתאמה אישית. התהליך עשוי להימשך עד 24 שעות
  • סביבת פיתוח משולבת (IDE) עם Gemini Code Assist

‫2. הקשר

כדי לנסות התאמה אישית של קוד, צריך:

  1. גישה לפרויקט בענן ב-Google Cloud עם Gemini מופעל
  2. ומאגר פרטי כדי לספק מידע לתשובות של Gemini.

הפעלת Gemini

המאגרים הכי מתאימים לאינדוקס על ידי Gemini הם מאגרים שמכילים קוד שנעשה בו שימוש חוזר לעיתים קרובות בכל הארגון. מאגר הדוגמאות שסופק ל-codelab הזה מכיל שירות אינטרנט רגיל של Spring Boot, עם תיקייה של אובייקטים להעברת נתונים שעומדים בקריטריונים האלה, כי ייווצר סיווג דומה כדי לתאר כל ישות במסד נתונים בזמן שהיא מועברת לשכבת ההצגה.

‫3. (אופציונלי) הגדרת מאגר

אם אתם מעדיפים להשתמש במאגר לדוגמה ולא במאגר פרטי משלכם, תוכלו לבצע את השלבים הבאים בעורך המסוף שתבחרו או ב-Cloud Shell. כדי לראות איך מתבצעת התאמה אישית של קוד, כדאי להתחיל ביצירת מאגר פרטי:

mkdir customization-starter
cd customization-starter
curl https://start.spring.io/starter.zip -d dependencies=web,lombok \
           -d javaVersion=21 \
           -d type=maven-project \
           -d bootVersion=3.3.4 -o cc-starter.zip
unzip cc-starter.zip
rm cc-starter.zip
pushd src/main/java/com/example/demo
mkdir dtos
touch dtos/LedgerDTO.java

מוסיפים את הקוד הבא לקובץ LedgerDTO:

package com.example.demo.dtos;

import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

@Getter
@Setter
@Accessors(chain = true)
public class LedgerEntryDto {
    private Long id;
    private String accountName;
    private double amount;
    private String transactionType; 
    private String description;
    private java.util.Date transactionDate;
}

הפעולה הזו תספיק כדי להראות שה-accessors שמשתתפים אחרים ב-codebase הזה מצפים להשתמש בהם ייווצרו בצורה מדויקת כשהתאמה אישית של הקוד מופעלת.

יוצרים מאגר חדש ומוודאים שהוא פרטי. כדי להעביר את קובץ ה-starter למאגר החדש, פועלים לפי השלבים הבאים:

popd
gh auth login
git init
git add .
git commit -m "code customization starter"
git remote add origin git@github.com:<YOUR_GITHUB_ID>/customization-starter.git
git branch -M main
git push -u origin main

4. אי-הכללה של קבצים

לפני שנותנים ל-Gemini גישה למאגרי קוד פרטיים, חשוב להבין איך להחריג קבצים לא רלוונטיים או רגישים שהצוות לא רוצה שיאונדקסו. כדי לעשות את זה, משתמשים בקובץ .aiexclude, שדומה לקובץ .gitignore אבל יש ביניהם כמה הבדלים עיקריים:

  • קובץ .aiexclude ריק חוסם את כל הקבצים בספרייה שלו ובכל ספריות המשנה.
    • זהה לקובץ שמכיל את **/*.
  • קבצים מסוג .aiexclude לא תומכים בשלילה (הוספת הקידומת ! לתבניות).

לכן, כדאי לחשוב על סוגי קבצים או ספריות שהצוות שלכם רוצה להחריג מהבדיקה, ולציין כל אחד מהם בשורה נפרדת:

#Block all files with .key extensions
*.key

#Block all files under sensitive/dir
my/sensitive/dir/

#Block all .key files under sensitive/dir
my/sensitive/dir/ /.key

5. הגדרת Developer Connect

Developer Connect הוא השירות שמאפשר חיבורים וקישורים למאגרי קוד פרטיים ב-GitHub או ב-GitLab. זהו המנגנון שמאפשר ל-Gemini Code Assist להתחבר בצורה מאובטחת למאגרי המידע הפרטיים שלכם, כדי ליצור את האינדקס שישמש לשיפור התשובות.

ההבנה של שני המושגים האלה תעזור לכם להבין איך Developer Connect מספק גישה מאובטחת לקוד שלכם:

חיבור

  • מייצג את הגשר בין Google לבין פלטפורמת ניהול קוד המקור של צד שלישי.

קישור

  • מייצג את השיוך למאגר קוד מקור ספציפי שבוחרים בפלטפורמה מחוברת לניהול קוד מקור.

אחרי שמבינים את המושגים האלה, עוברים לדף Developer Connect כדי להפעיל את ה-API בפרויקט.

הפעלת Developer Connect

לאחר מכן, פועלים לפי השלבים המתאימים כדי ליצור חיבור וקישור ל-GitHub או ל-GitLab. שני המשאבים ייווצרו במהלך התהליך באשף.

יצירת חיבור וקישור

חוזרים על השלבים האלה כדי ליצור קישור לכל מאגר שרוצים שתכונת ההתאמה האישית של הקוד ב-Gemini תתייחס אליו בתשובות שלה. אם כמה מאגרי מידע מגיעים מאותה פלטפורמה, אפשר להשתמש שוב בחיבור הקיים.

6. יצירה של אינדקס וחיבור אליו

כדי לנתח את המאגרים במהירות, התאמה אישית של קוד מסתמכת על אינדקס. חשוב לשים לב ל-INDEX_NAME שבו אתם משתמשים, כי תצטרכו אותו בשלב הבא.

כדי ליצור אינדקס, מריצים את הפקודה הבאה:

gcloud gemini code-repository-indexes create <INDEX_NAME> \
    --project=<YOUR_PROJECT_ID> \
    --location=<REGION>

אם נתקלתם בשגיאות Invalid choice: ..., ודאו ש-Google Cloud CLI מעודכן על ידי הפעלת הפקודה הבאה:

gcloud components update

בשלב הבא, יוצרים קבוצת מאגרים כדי לאפשר גישה לאינדקס:

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories='[{"resource": "projects/PROJECT_ID/locations/REGION/connections/INDEX_CONNECTION/gitRepositoryLinks/REPOSITORY", "branch_pattern": "BRANCH_NAMES"}]'

מחליפים את הערכים הבאים:

  • REPOSITORY_GROUP: השם של קבוצת המאגרים שאתם עומדים ליצור
  • PROJECT_ID: מזהה הפרויקט שלכם ב-Google Cloud.
  • ‫INDEX_NAME: שם האינדקס שהגדרתם בשלב הקודם כדי ליצור אינדקס.
  • אזור: אזור נתמך מהרשימה במסמכי התיעוד שהגדרתם ב-Developer Connect בפרויקט בענן שלכם ב-Google Cloud.
  • ‫INDEX_CONNECTION: חיבור של האינדקס שיצרתם בשלב הקודם כדי ליצור אינדקס.
  • REPOSITORY: המאגר שרוצים להוסיף לאינדקס. צריך לציין לפחות מאגר אחד, ואפשר לציין כמה מאגרים לפי הצורך.
  • ‫BRANCH_NAMES: שם הענפים שרוצים ליצור להם אינדקס, כמו main או dev.

בהתאם למספר המאגרים שרוצים ליצור להם אינדקס ולגודל שלהם, יצירת אינדקס של התוכן יכולה להימשך עד 24 שעות. האינדוקס מתבצע פעם ב-24 שעות, וכולל את כל השינויים שבוצעו במאגר. כדי לבדוק את סטטוס יצירת האינדקס, אפשר לעיין בשלבים האלה:

חיפוש סטטוס ההוספה לאינדקס

ולבסוף, מעניקים לישות המורשית הרצויה גישה לקבוצה:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='PRINCIPAL' \
    --role='roles/cloudaicompanion.repositoryGroupsUser'

7. יצירת קוד בהתאמה אישית

עכשיו ל-Gemini יש גישה לקוד במאגר הפרטי, ולכן אפשר לצפות שיופיעו קטעי קוד רלוונטיים בבקשות להשלמת קוד. במאגר הדוגמאות שלנו, אפשר לעבור לתיקיית ה-DTO. כשיוצרים מחלקה חדשה שמייצגת אובייקט חדש, אפשר לראות את ההערות הצפויות מופיעות בזמן ההקלדה:

דוגמה שנוצרה

8. סיכום

כל הכבוד, סיימתם את ה-Codelab הזה! למדתם איך להשתמש בתכונה Code Customization של Gemini Code Assist. עכשיו אפשר להתאים את התשובות למאגרי קוד ספציפיים ופרטיים של הצוותים שלכם, כך שכל הנחיה והשלמת קוד יהיו שימושיים יותר למפתחים בצוותים שלכם.

מומלץ לעיין במסמכים ובחומרים האחרים האלה כדי לקרוא עוד, ולקבל תמיכה בנושאים כמו הגדרת תפקידים ב-IAM: