Gemini Code Assist kod özelleştirmesini yapılandırma

Bu belgede, Gemini Code Assist'i özel kod depolarınıza bağlayarak Gemini Code Assist kod özelleştirmesinin nasıl ayarlanacağı açıklanmaktadır. Bu özellik, kuruluşunuzun dahili kitaplıklarından, özel API'lerinden ve kodlama stilinden yararlanan kod önerileri almanızı sağlar.

Başlamadan önce

Hangi özel depoların bağlanacağını seçme

En iyi uygulama olarak, aşağıdaki özelliklere sahip depoları bağladığınızdan emin olun:

  • Geliştiricilerinizin yazmasını istediğiniz kodla benzer bir stil veya yapıya sahip kodunuz olmalıdır.
  • Mevcut kod tabanınızdan çağırmak istediğiniz özel kitaplıklarınız veya API'leriniz varsa

(İsteğe bağlı) Hangi dosyaların dizine eklenmeyeceğini seçin.

Varsayılan olarak kod özelleştirme, belirtilen depolarınızdaki tüm desteklenen kod dosyalarını dizine ekler.

Dizine eklemek istemediğiniz kodun gösterilmesini önlemek için main gibi kararlı bir dal kullanabilir ve dizin erişiminizi kontrol etmek için dal kalıplarını kullanabilirsiniz.

Alternatif olarak, .aiexclude dosyası oluşturarak dosyaları dizinden hariç tutabilirsiniz.

Dizin oluşturma

Kod özelleştirme, daha hızlı kod oluşturma önerileri ve aramalar için deponuzu analiz edip ayrıştırmak üzere bir dizine dayanır.

gcloud

Dizini oluşturmak için bir kabuk ortamında gemini code-repository-indexes create komutunu kullanın:

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

Aşağıdakini değiştirin:

  • INDEX_NAME: dizin adınız. Önemli: Dizin adınızı kaydedin. Bu bilgiye bu belgedeki çeşitli adımlarda ihtiyacınız olacak.
  • PROJECT_ID: Google Cloud proje kimliğiniz.
  • REGION: Bu sayfanın Başlamadan önce bölümünde belirtildiği gibi, Google Cloud projenizdeki Developer Connect'te yapılandırdığınız desteklenen bir bölge.

Dizin oluşturma işlemi genellikle 30 dakika sürer ancak bir saati de bulabilir.

Google, her proje ve kuruluş için kod deposu dizini sayısını bir ile sınırlar.

Depo gruplarını kullanarak dizininize erişimi kontrol etme

Depo grubu, depoları ve bunların dal kalıplarını içeren dizine ekleme yapılandırması için bir kapsayıcıdır. Depo grupları, ayrıntılı IAM denetimi için tasarlanmıştır. Geliştiricilere, cloudaicompanion.repositoryGroups.use iznine sahip oldukları bu gruplardaki dizine eklenmiş verilere erişim olanağı tanır.

Depo grupları, aynı proje ve konumdaki Developer Connect depolarını veya bağlantılarını içerir.

Yöneticiler aşağıdaki işlemleri gerçekleştirir:

  • Code Repository Index kaynağı oluşturun.
  • Aynı proje ve konumda yeni bir Developer Connect bağlantısı yapılandırın.
  • Bağlantıdaki Git depolarını bağlayın.
  • Bağlantıların kaynak adlarını alın, her bağlantı için dizine eklenecek dal kalıbını seçin ve bir veya daha fazla depo grubuna yerleştirin.

gcloud

Depo grubu oluşturmak için bir kabuk ortamında gemini code-repository-indexes repository-groups create komutunu kullanın:

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

Aşağıdakini değiştirin:

  • REPOSITORY_GROUP: default gibi depo grubunun adı.
  • PROJECT_ID: Google Cloud proje kimliğiniz.
  • REGION: Bu sayfanın Başlamadan önce bölümünde belirtildiği gibi, Google Cloud projenizdeki Developer Connect'te yapılandırdığınız desteklenen bir bölge.
  • INDEX_NAME: Dizin oluşturmak için önceki adımda oluşturduğunuz dizinin adı.
  • REPOSITORY_RESOURCE_NAME: Developer Connect bağlantısındaki deponun adı. Deponun adını bulmak için Google Cloud Console'daki Developer Connect sayfasına gidin ve Repositories (Depolar) sekmesinde tablodaki Connection (Bağlantı) sütununda Connection ID'yi (Bağlantı Kimliği) bulun. Kaynak adını kopyalamak için daha fazla seçenek sunan more_vert menüsünü tıklayın ve Kaynak yolunu kopyala'yı seçin.
  • BRANCH_NAMES: dizine eklemek istediğiniz dalların adı (ör. main|dev).

Ayrıca, aşağıdaki gibi biçimlendirilmiş bir JSON (veya YAML) dosyasında tanımlanan depolarla bir depo grubu da oluşturabilirsiniz:

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 veya YAML dosyasına dayalı bir depo grubu oluşturmak için kabuk ortamında gemini code-repository-indexes repository-groups create komutunu kullanın:

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

İsterseniz Cloud Key Management Service aracılığıyla müşteri tarafından yönetilen bir şifreleme anahtarıyla (CMEK) verilerinizi şifreleyip kontrol edebilirsiniz. CMEK kullanma hakkında daha fazla bilgi edinmek için Müşteri tarafından yönetilen şifreleme anahtarlarıyla verileri şifreleme başlıklı makaleyi inceleyin.

Bir projede depo grubuna IAM rolü verme

Yalnızca dizindeki depolardan öneri alırsınız. Her depo, bir veya daha fazla depo grubuna aittir. Önerilere erişmek için aşağıdaki yöntemlerden birini kullanarak Cloud AI Companion Repository Groups User IAM rolünü (roles/cloudaicompanion.repositoryGroupsUser) (gerekli cloudaicompanion.repositoryGroups.user IAM iznini içerir) depo grubuna atamanız gerekir:

  • Asıl kullanıcılara dizinin tamamına erişme izni verin.
  • Ana hesaplara dizinin bir alt kümesine erişim izni verme

Asıl kullanıcılara dizinin tamamına erişme izni verme

  1. Bir proje için IAM politikası bağlamak üzere kabuk ortamında projects add-iam-policy-binding komutunu kullanın:

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

    Aşağıdakini değiştirin:

    • PROJECT_ID: Depo grubunun bulunduğu proje kimliği.
    • PRINCIPAL: Erişim ihtiyacı olan yöneticinin e-posta adresi. Örneğin, user:test-user@gmail.com bireysel bir kullanıcı için veya group:admins@example.com bir grup için.

    Daha fazla bilgi için gcloud projects set-iam-policy konusuna bakın.

  2. Bir koşul belirtmeniz istendiğinde None yazın.

Ana hesaplara dizinin bir alt kümesine erişim izni verme

Birden fazla depo grubu oluşturabilir ve farklı IAM asıl kullanıcılarına IAM rolleri atayabilirsiniz.

gcloud

IAM politikası ayarlamak için IAM gruplarının ve atanmış rollerin listesini içeren IAM politikası JSON veya YAML dosyasını hazırlamanız gerekir. Örneğin:

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

Ek ayrıntılar ve söz dizimi için İzin verme politikalarını anlama başlıklı makaleyi inceleyin.

IAM politikasını ayarlamak için kabuk ortamında gemini code-repository-indexes repository-groups set-iam-policy komutunu kullanın:

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

Aşağıdakini değiştirin:

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
  ]
}

Ayrıca bağlama da oluşturabilirsiniz:

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"]
}

Aşağıdakini değiştirin:

Dizine ekleme durumunu kontrol etme

Dizine eklemek istediğiniz depoların sayısına ve boyutlarına bağlı olarak, içeriklerin dizine eklenmesi 24 saati bulabilir. Büyük depolarda dizine ekleme işlemi daha uzun sürebilir. Dizin oluşturma işlemi 24 saatte bir gerçekleşir ve depoda yapılan tüm değişiklikler alınır.

  1. indexing günlüklerini arayın. Daha fazla bilgi için Sorgu dilini günlüğe kaydetme bölümüne bakın.

    Console

    1. Google API Konsolu'nda Günlük Gezgini'ne gidin.

      Günlük Gezgini'ne gidin.

    2. indexing günlüklerini görüntülemek için günlük adları filtresini kullanın.

    gcloud

    Dizin oluşturma günlüklerini aramak için kabuk ortamında logging read komutunu kullanın:

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

    PROJECT_ID kısmını, depo grubunun bulunduğu proje kimliğiyle değiştirin.

    Örneğin, indexing günlüklerindeki hataları görüntülemek için aşağıdaki komutu çalıştırın:

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing" AND severity>=ERROR"
    
  2. Aşağıdakiler gibi ilişkili dizine ekleme durumlarını inceleyin:

    • Depo dizine ekleme başlangıcı (ör. Indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 6, failed: 0.)
    • Bireysel depo indekslemenin sonu (örneğin):
      • Başarılı: Successfully finished indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 7, failed: 0.
      • Başarısız: Failed to index repository REPOSITORY_NAME. Error: [<error message>]. Total number of repositories: 10, succeeded: 7, failed: 1.
    • Depo dizine ekleme işleminin sonu (örneğin):
      • Başarılı: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 0.
      • Başarısız: 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.

    Dizin durumlarında, REPOSITORY_NAME, incelemek istediğiniz depodur.

  3. Aşağıdakiler gibi ilişkili dizine ekleme hatalarını inceleyin:

    • Depo getirilemedi.
    • Depo dosyaları listelenemedi.
    • Dizinlerden depo bilgileri alınamadı.
    • Dosyalar dizinden alınamadı.
    • Dahili hata.

Kod özelleştirmeyi kullanma

Kod özelleştirmeyi ayarladıktan sonra, tam kod tabanı farkındalığından elde edilen sonuçlara ek olarak, dizine eklediğiniz özel koda dayalı olabilecek kod tamamlama ve kod oluşturma önerilerini görmeye başlarsınız.

Kod özelleştirmeyi kullanma ve en iyi uygulamalar hakkında daha fazla bilgi edinmek için Kod özelleştirmeyi kullanma başlıklı makaleyi inceleyin.

Kod özelleştirmeyi devre dışı bırakma

  1. Geçerli dizindeki tüm depo gruplarını listelemek için kabuk ortamında gemini code-repository-indexes repository-groups list komutunu kullanın:

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

    Aşağıdakini değiştirin:

    • REGION: Bu sayfanın Başlamadan önce bölümünde belirtildiği gibi, Google Cloud projenizdeki Developer Connect'te yapılandırdığınız desteklenen bir bölge.
    • PROJECT_ID: Google Cloud proje kimliğiniz.
    • INDEX_NAME: Dizin oluşturmak için önceki adımda oluşturduğunuz dizinin adı.
  2. Bir depo grubunu mevcut dizinden silmek için gemini code-repository-indexes repository-groups delete komutunu kullanın:

    gcloud gemini code-repository-indexes repository-groups delete REPOSITORY_GROUP \
        --location=REGION \
        --project=PROJECT_ID \
        --code-repository-index=INDEX_NAME
    
  3. Dizindeki tüm depo gruplarını silene kadar her depo grubu için 3. adımı tekrarlayın.

  4. İsteğe bağlı: Dizini silmek için kabuk ortamında gemini code-repository-indexes delete komutunu kullanın:

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

Sırada ne var?