הגדרת התאמה אישית של קוד ב-Gemini Code Assist

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

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

בחירת מאגרי קוד פרטיים שמקושרים

מומלץ לחבר מאגרי מידע ש:

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

(אופציונלי) בוחרים אילו קבצים לא ייכללו באינדקס

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

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

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

יצירת אינדקס

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

gcloud

כדי ליצור את האינדקס, בסביבת מעטפת, משתמשים בפקודה gemini code-repository-indexes create:

gcloud gemini code-repository-indexes create INDEX_NAME \
    --project=PROJECT_ID \
    --location=REGION

Terraform

resource "google_gemini_code_repository_index" "example" {
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
}

מחליפים את מה שכתוב בשדות הבאים:

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

יצירת האינדקס בדרך כלל מסתיימת תוך 30 דקות, אבל יכולה להימשך עד שעה.

‫Google מגבילה את מספר האינדקסים של מאגרי קוד לאחד לכל פרויקט וארגון.

שליטה בגישה לאינדקס באמצעות קבוצות מאגרים

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

קבוצות מאגרים מכילות מאגרים של Developer Connect או קישורים מאותו פרויקט ומאותו מיקום.

האדמינים מבצעים את הפעולות הבאות:

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

gcloud

כדי ליצור קבוצת מאגרים, בסביבת מעטפת, משתמשים בפקודה gemini code-repository-indexes repository-groups create:

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories='[{"resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "BRANCH_NAMES"}]'

Terraform

resource "google_gemini_repository_group" "example" {
  location = "REGION"
  code_repository_index = "INDEX_NAME"
  repository_group_id = "REPOSITORY_GROUP"
  repositories {
    resource = "REPOSITORY_RESOURCE_NAME"
    branch_pattern = "BRANCH_NAMES"
  }
}

מחליפים את מה שכתוב בשדות הבאים:

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

אפשר גם ליצור קבוצת מאגרים עם מאגרים שמוגדרים בקובץ JSON (או YAML) בפורמט הבא:

JSON

[
  {
      "resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "main|dev"
  },
  {
      "resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "dev"
  }
]

YAML

- resource: REPOSITORY_RESOURCE_NAME
  branchPattern: main|dev

- resource: REPOSITORY_RESOURCE_NAME
  branchPattern: dev

כדי ליצור קבוצת מאגרים על סמך קובץ JSON או YAML, משתמשים בפקודה gemini code-repository-indexes repository-groups create בסביבת Shell:

JSON

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories=FILEPATH.json

YAML

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories=FILEPATH.yaml

אם רוצים, אפשר להצפין את הנתונים ולשלוט בהם באמצעות מפתח הצפנה בניהול הלקוח (CMEK) דרך Cloud Key Management Service. מידע נוסף על שימוש ב-CMEK זמין במאמר הצפנת נתונים באמצעות מפתחות הצפנה בניהול הלקוח.

הקצאת תפקיד IAM לקבוצת המאגר בפרויקט

אתם מקבלים הצעות רק ממאגרי מידע שנמצאים באינדקס. כל מאגר שייך לקבוצת מאגרים אחת או יותר. כדי לגשת להצעות, צריך להעניק לקבוצת המאגרים את תפקיד ה-IAM 'משתמש במאגרי Cloud AI Companion' (roles/cloudaicompanion.repositoryGroupsUser), שכולל את הרשאת ה-IAM הנדרשת cloudaicompanion.repositoryGroups.user. אפשר לעשות זאת באחת מהדרכים הבאות:

  • מעניקים לחשבונות משתמש הרשאה לגשת לאינדקס כולו.
  • הענקת גישה לישויות למאגר משנה של האינדקס.

איך מעניקים לישויות הרשאה לגשת לכל האינדקס

  1. כדי לקשר מדיניות IAM לפרויקט, משתמשים בפקודה projects add-iam-policy-binding בסביבת Shell:

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

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט שבו נמצאת קבוצת המאגרים.
    • PRINCIPAL: כתובת האימייל של הגורם הראשי שזקוק לגישה – לדוגמה, user:test-user@gmail.com עבור אדם פרטי או group:admins@example.com עבור קבוצה.

    מידע נוסף זמין במאמר gcloud projects set-iam-policy.

  2. כשמוצגת בקשה לציין תנאי, מזינים None.

הענקת גישה לחשבונות משתמשים לקבוצת משנה של האינדקס

אפשר ליצור כמה קבוצות מאגרי מידע ולהקצות תפקידי IAM למנהלי IAM שונים.

gcloud

כדי להגדיר מדיניות IAM, צריך להכין קובץ JSON או YAML של מדיניות IAM, שיכיל רשימה של קבוצות IAM ותפקידים שהוקצו להן. לדוגמה:

bindings:
- members:
  - group:my-group@example.com
  - user:test-user@example.com
  role: roles/cloudaicompanion.repositoryGroupsUser

פרטים נוספים ותחביר מופיעים במאמר הסבר על מדיניות ההרשאות.

כדי להגדיר את מדיניות ה-IAM, משתמשים בפקודה gemini code-repository-indexes repository-groups set-iam-policy בסביבת Shell:

gcloud gemini code-repository-indexes repository-groups set-iam-policy GROUP_NAMEPOLICY_FILE \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME

מחליפים את מה שכתוב בשדות הבאים:

Terraform

data "google_iam_policy" "foo" {
  binding {
    role = "roles/cloudaicompanion.repositoryGroupsUser"
    members = ["test-user@example.com"]
  }
}

resource "google_gemini_repository_group_iam_policy" "foo" {
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  policy_data = data.google_iam_policy.foo.policy_data
}

data "google_gemini_repository_group_iam_policy" "foo" {
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  depends_on = [
    google_gemini_repository_group_iam_policy.foo
  ]
}

אפשר גם ליצור קישור:

resource "google_gemini_repository_group_iam_binding" "foo" {
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  role = "roles/cloudaicompanion.repositoryGroupsUser"
  members = ["test-user@example.com"]
}

מחליפים את מה שכתוב בשדות הבאים:

בדיקת סטטוס ההוספה לאינדקס

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

  1. מחפשים את היומנים indexing. מידע נוסף זמין במאמר בנושא שפת שאילתות לרישום ביומן.

    המסוף

    1. ב-Google API Console, עוברים אל Logs Explorer.

      כניסה לדף Logs Explorer

    2. משתמשים במסנן של שמות היומנים כדי להציג יומנים של indexing.

    gcloud

    כדי לחפש את יומני האינדוקס, בסביבת מעטפת, משתמשים בפקודה logging read:

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing""
    

    מחליפים את PROJECT_ID במזהה הפרויקט שבו נמצאת קבוצת המאגר.

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

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing" AND severity>=ERROR"
    
  2. בודקים את סטטוסי ההוספה לאינדקס שמשויכים לדף, למשל:

    • תחילת יצירת אינדקס למאגר – לדוגמה, Indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 6, failed: 0.
    • סיום יצירת אינדקס של מאגר נתונים אישי – לדוגמה:
      • הצלחה: Successfully finished indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 7, failed: 0.
      • כשל: Failed to index repository REPOSITORY_NAME. Error: [<error message>]. Total number of repositories: 10, succeeded: 7, failed: 1.
    • סיום יצירת האינדקס של המאגר – לדוגמה:
      • הצלחה: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 0.
      • כשל: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 1. Repositories that were not successfully fetched will be retried in the next run.

    בסטטוסים של האינדקס, REPOSITORY_NAME הוא המאגר שרוצים לבדוק.

  3. בודקים את שגיאות האינדוקס המשויכות, כמו השגיאות הבאות:

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

שימוש בהתאמה אישית של קוד

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

מידע נוסף על שימוש בהתאמה אישית של קוד ושיטות מומלצות זמין במאמר שימוש בהתאמה אישית של קוד.

השבתת התאמה אישית של קוד

  1. כדי לראות את הרשימה של כל קבוצות המאגרים באינדקס הנוכחי, בסביבת מעטפת, משתמשים בפקודה gemini code-repository-indexes repository-groups list:

    gcloud gemini code-repository-indexes repository-groups list --location=REGION \
        --project=PROJECT_ID \
        --code-repository-index=INDEX_NAME --uri
    

    מחליפים את מה שכתוב בשדות הבאים:

    • REGION: אזור נתמך, כפי שמצוין בקטע לפני שמתחילים בדף הזה, שהגדרתם ב-Developer Connect בפרויקט Google Cloud שלכם.
    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud.
    • INDEX_NAME: השם של האינדקס שיצרתם בשלב הקודם כדי ליצור אינדקס.
  2. כדי למחוק קבוצת מאגרים מהאינדקס הנוכחי, משתמשים בפקודה gemini code-repository-indexes repository-groups delete:

    gcloud gemini code-repository-indexes repository-groups delete REPOSITORY_GROUP \
        --location=REGION \
        --project=PROJECT_ID \
        --code-repository-index=INDEX_NAME
    
  3. חוזרים על שלב 3 לכל קבוצת מאגרים עד שמוחקים את כל קבוצות המאגרים מהאינדקס.

  4. אופציונלי: כדי למחוק את האינדקס, בסביבת מעטפת, משתמשים בפקודה gemini code-repository-indexes delete:

    gcloud gemini code-repository-indexes delete INDEX_NAME \
        --location=REGION \
        --project=PROJECT_ID
    

המאמרים הבאים