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

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

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

בחירת המאגרים הפרטיים שאליהם רוצים להתחבר

מומלץ לחבר מאגרים:

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

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

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

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

  • מידע רגיש מאוד עם גישה מוגבלת בתוך הארגון
  • קוד ישן או קוד שהוצא משימוש
  • קוד שנוצר באופן אוטומטי או קוד זמני

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

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

יצירת אינדקס

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

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

gcloud gemini code-repository-indexes create INDEX_NAME \
    --project=PROJECT_ID \
    --location=REGION
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 בחיבור.
  • מקבלים את שמות המשאבים של הקישורים, בוחרים תבנית להוספת הענף לאינדקס לכל קישור ומוסיפים אותו לקבוצת מאגר אחת או יותר.

כדי ליצור קבוצת מאגרים, בסביבת מעטפת משתמשים בפקודה 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"}]'
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) בפורמט הבא:

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

- resource: REPOSITORY_RESOURCE_NAME
  branchPattern: dev

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

JSONYAML
gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories=FILEPATH.json
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:

    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.

כדי להגדיר מדיניות 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:

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

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

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. נכנסים לדף Logs Explorer במסוף Google Cloud.

      כניסה לדף Logs Explorer

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

    כדי לחפש את יומני ההוספה לאינדקס, בסביבת מעטפת משתמשים בפקודה 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
    

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