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

Bu dokümanda, 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 yararlanarak kod önerileri almanızı sağlar.

Başlamadan önce

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

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

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

(İsteğe bağlı) Dizine eklenmeyecek dosyaları seçme

Kod özelleştirme, varsayılan olarak belirttiğiniz depolardaki tüm desteklenen kod dosyalarını dizine ekler.

Birçok senaryoda dizine eklenmesini istemediğiniz belirli dosyalarınız veya alt ağaçlarınız olabilir. Örneğin:

  • Kuruluşunuzda sınırlı erişime sahip olan son derece hassas bilgiler
  • Eski veya desteği sonlandırılmış kod
  • Otomatik olarak oluşturulan veya geçici kod

Dizine eklemek istemediğiniz kodun gösterilmesini önlemek için şunu yapabilirsiniz: Dizininize erişimi kontrol etmek için dal kalıplarını kullanın ve main gibi kararlı bir dal kullanın.

Dilerseniz .aiexclude dosyası oluşturarak de dosyaları dizinden hariç tutabilirsiniz.

Dizin oluşturma

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

gcloud Terraform

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

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

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

  • INDEX_NAME: dizine ekleme adınız. Önemli: Dizin adınızı kaydedin. Bu dokümandaki birkaç adımda bu anahtara 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 projenizde Developer Connect'te yapılandırdığınız desteklenen bir bölge.

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

Google, kod deposu dizinlerinin sayısını her proje ve kuruluş için bir ile sınırlandırır.

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

Depo grubu, depoları ve dal kalıplarını içeren dizine ekleme yapılandırması kapsayıcısıdır. Depo grupları, ayrıntılı IAM denetimi için tasarlanmıştır. Geliştiriciler, cloudaicompanion.repositoryGroups.use iznine sahip oldukları bu gruplardaki dizine eklenen verilere erişim elde eder.

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:

  • Kod Deposu Dizini kaynağı oluşturun.
  • Aynı proje ve konumda yeni bir Developer Connect bağlantısı yapılandırın.
  • Bağlantıda Git depolarını bağlayın.
  • Bağlantıların kaynak adlarını alın, her bağlantı için dizine eklenecek dal desenini seçin ve bir veya daha fazla depo grubuna ekleyin.

gcloud Terraform

Depo grubu oluşturmak için 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"}]'
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: Kod deposu grubunun adı (ör. default).
  • 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 bir 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 Depolar sekmesinde, tablodaki Bağlantı sütununun altında Bağlantı Kimliği'ni bulun. Kaynak adını kopyalamak için daha fazla seçenek görmek üzere more_vert menüsünü tıklayın ve Kaynak yolunu kopyala'yı seçin.
  • BRANCH_NAMES: dizine eklemek istediğiniz şubelerin adı (ör. main|dev).

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

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 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:

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

Dilerseniz Cloud Key Management Service üzerinden müşteri tarafından yönetilen bir şifreleme anahtarıyla (CMEK) verilerinizi şifreleyebilir ve 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.

Projedeki depolama alanı 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, gerekli cloudaicompanion.repositoryGroups.user IAM iznini içeren Cloud AI Companion Repository Groups User IAM rolünü (roles/cloudaicompanion.repositoryGroupsUser) aşağıdaki yöntemlerden biriyle depolama grubuna vermeniz gerekir:

  • Yöneticilere dizinin tamamına erişme izni verin.
  • Ana hesaplara dizinin bir alt kümesine erişim izni verin.

Üst yöneticilere 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şime ihtiyacı olan müdürün e-posta adresi. Örneğin, bir kullanıcı için user:test-user@gmail.com veya bir grup için group:admins@example.com.

    Daha fazla bilgi için gcloud projects set-iam-policy başlıklı makaleyi inceleyin.

  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 IAM rollerini farklı IAM asıllarına atayabilirsiniz.

gcloud Terraform

IAM politikası oluşturmak için IAM gruplarının ve atanan 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

Daha fazla bilgi ve söz dizimi için İzin 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:

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, aşağıdaki yöntemlerle de bağlama 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çeriğin dizine eklenmesi 24 saati bulabilir. Dizine ekleme işlemi, büyük depolar için daha uzun sürebilir. Dizine ekleme işlemi 24 saatte bir gerçekleşir ve depoda yapılan tüm değişiklikleri alır.

  1. indexing günlüklerini arayın. Daha fazla bilgi için Günlük kaydı sorgu dili bölümüne bakın.

    1. Google Cloud Console'da 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 adı filtresini kullanın.

    Dizine ekleme 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ı, kod deposu 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 işleminin başlangıcı (ör. Indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 6, failed: 0.)
    • Bireysel depolama alanı dizine ekleme işleminin sonu (ör.
      • 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 (örnek):
      • 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.
    • Depo bilgileri dizinden alınamadı.
    • Dosyalar dizinden alınamadı.
    • Dahili hata.

Kod özelleştirmesini kullanma

Kod özelleştirmeyi ayarladıktan sonra kullanıcılar, 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 önerileri görmeye başlar.

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

  1. Mevcut dizin için tüm depo gruplarını listelemek üzere 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 bir adımda oluşturduğunuz dizinin adı.
  2. Bir depo grubunu geçerli 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. Tüm depo gruplarını dizinden silene kadar her depo grubu için 3. adımı tekrarlayın.

  4. İsteğe bağlı: Dizinleri 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?