कोड से जुड़ी सहायता देने वाली Gemini की सुविधा को कॉन्फ़िगर करना और उसका इस्तेमाल करना

इस दस्तावेज़ में, Gemini Code Assist कोड को पसंद के मुताबिक बनाने की सुविधा को सेट अप करने का तरीका बताया गया है. इसके लिए, Gemini Code Assist को अपने निजी कोड रिपॉज़िटरी से कनेक्ट करना होगा. इस सुविधा की मदद से, आपको कोड के सुझाव मिलते हैं. ये सुझाव, आपके संगठन की इंटरनल लाइब्रेरी, निजी एपीआई, और कोडिंग स्टाइल के आधार पर दिए जाते हैं.

शुरू करने से पहले

चुनें कि कौनसे निजी रिपॉज़िटरी कनेक्ट किए गए हैं

सबसे सही तरीके के तौर पर, पक्का करें कि आपने ऐसे रिपॉज़िटरी कनेक्ट किए हों जो:

  • आपके पास ऐसा कोड हो जो उसी स्टाइल या स्ट्रक्चर का हो जिसे आपको अपने डेवलपर से लिखवाना है.
  • आपके पास निजी लाइब्रेरी या एपीआई हों जिन्हें आपको अपने मौजूदा कोडबेस से कॉल करना है.

(ज़रूरी नहीं) चुनें कि किन फ़ाइलों को इंडेक्स न किया जाए

डिफ़ॉल्ट रूप से, कोड में बदलाव करने की सुविधा, आपकी बताई गई रिपॉज़िटरी में मौजूद सभी काम करने वाली कोड फ़ाइलों का इंडेक्स बनाती है.

कई मामलों में, हो सकता है कि आपके पास ऐसी फ़ाइलें या सबट्री हों जिन्हें आपको इंडेक्स नहीं करना है. उदाहरण के लिए:

  • आपके संगठन में सीमित ऐक्सेस वाली बेहद संवेदनशील जानकारी
  • पुराना या काम न करने वाला कोड
  • अपने-आप जनरेट हुआ या कुछ समय के लिए मान्य कोड

जिस कोड को इंडेक्स नहीं करना है उसे एक्सपोज़ होने से रोकने के लिए, शाखा के पैटर्न का इस्तेमाल किया जा सकता है. इससे, इंडेक्स के ऐक्सेस को कंट्रोल किया जा सकता है. साथ ही, main जैसी किसी स्थिर शाखा का इस्तेमाल किया जा सकता है.

इसके अलावा, .aiexclude फ़ाइल बनाकर भी फ़ाइलों को इंडेक्स से बाहर रखा जा सकता है.

इंडेक्स बनाना

कोड को पसंद के मुताबिक बनाने की सुविधा, इंडेक्स पर निर्भर करती है. इससे, कोड जनरेट करने के सुझाव और लुकअप को तेज़ी से पाने के लिए, आपकी रिपॉज़िटरी का विश्लेषण और उसे पार्स किया जाता है.

gcloud Terraform

इंडेक्स बनाने के लिए, शेल एनवायरमेंट में 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: ऐसा देश या इलाका जहां यह सुविधा काम करती है. इसकी जानकारी, इस पेज के शुरू करने से पहले सेक्शन में दी गई है. साथ ही, यह भी ज़रूरी है कि आपने अपने Google Cloud प्रोजेक्ट में Developer Connect में इसे कॉन्फ़िगर किया हो.

आम तौर पर, इंडेक्स बनाने में 30 मिनट लगते हैं. हालांकि, इसमें एक घंटा भी लग सकता है.

Google, हर प्रोजेक्ट और संगठन के लिए कोड रिपॉज़िटरी इंडेक्स की संख्या को एक तक सीमित करता है.

रिपॉज़िटरी ग्रुप का इस्तेमाल करके, अपने इंडेक्स का ऐक्सेस कंट्रोल करना

रिपॉज़िटरी ग्रुप, इंडेक्स करने के कॉन्फ़िगरेशन के लिए एक कंटेनर होता है. इसमें रिपॉज़िटरी और उनके शाखा पैटर्न शामिल होते हैं. रिपॉज़िटरी ग्रुप को, IAM के कंट्रोल को बेहतर बनाने के लिए डिज़ाइन किया गया है. इससे डेवलपर को उन ग्रुप के इंडेक्स किए गए डेटा का ऐक्सेस मिलता है जिनके लिए उनके पास cloudaicompanion.repositoryGroups.use अनुमति होती है.

रिपॉज़िटरी ग्रुप में, एक ही प्रोजेक्ट और जगह के Developer Connect रिपॉज़िटरी या लिंक होते हैं.

एडमिन ये काम कर सकते हैं:

  • कोड रिपॉज़िटरी इंडेक्स संसाधन बनाएं.
  • उसी प्रोजेक्ट और जगह में, Developer Connect का नया कनेक्शन कॉन्फ़िगर करें.
  • कनेक्शन में Git डेटा स्टोर करने की जगहों को लिंक करें.
  • लिंक के रिसॉर्स के नाम पाएं, हर लिंक के लिए इंडेक्स करने के लिए शाखा पैटर्न चुनें, और इसे एक या एक से ज़्यादा रिपॉज़िटरी ग्रुप में डालें.

gcloud Terraform

शेल एनवायरमेंट में कोई रिपॉज़िटरी ग्रुप बनाने के लिए, 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: ऐसा देश या इलाका जहां यह सुविधा काम करती है. इसकी जानकारी, इस पेज के शुरू करने से पहले सेक्शन में दी गई है. साथ ही, यह भी ज़रूरी है कि आपने अपने Google Cloud प्रोजेक्ट में Developer Connect में इसे कॉन्फ़िगर किया हो.
  • INDEX_NAME: इंडेक्स बनाने के लिए, पिछले चरण में बनाए गए इंडेक्स का नाम.
  • REPOSITORY_RESOURCE_NAME: Developer Connect कनेक्शन में मौजूद रिपॉज़िटरी का नाम. रिपॉज़िटरी का नाम ढूंढने के लिए, Google Cloud Console में Developer Connect पेज पर जाएं. इसके बाद, रिपॉज़िटरी टैब में, टेबल के कनेक्शन कॉलम में कनेक्शन आईडी देखें. संसाधन का नाम कॉपी करने के लिए, ज़्यादा विकल्पों के लिए 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) का इस्तेमाल करके, अपने डेटा को एन्क्रिप्ट (सुरक्षित) किया जा सकता है और उसे कंट्रोल किया जा सकता है. CMEK का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, ग्राहक की ओर से मैनेज की जाने वाली एन्क्रिप्शन कुंजियों की मदद से डेटा एन्क्रिप्ट करना लेख पढ़ें.

किसी प्रोजेक्ट में, रिपॉज़िटरी ग्रुप को IAM भूमिका देना

आपको सिर्फ़ इंडेक्स में मौजूद रिपॉज़िटरी से सुझाव मिलते हैं. हर रिपॉज़िटरी, एक या एक से ज़्यादा रिपॉज़िटरी ग्रुप से जुड़ी होती है. सुझावों को ऐक्सेस करने के लिए, आपको 'क्लाउड एआई साथी' के रिपॉज़िटरी ग्रुप के उपयोगकर्ता को आईएएम की भूमिका (roles/cloudaicompanion.repositoryGroupsUser) देनी होगी. इसमें ज़रूरी 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 डालें.

प्रिंसिपल को इंडेक्स के सबसेट का ऐक्सेस देना

एक से ज़्यादा रिपॉज़िटरी ग्रुप बनाए जा सकते हैं. साथ ही, अलग-अलग आईएएम प्रिंसिपल को आईएएम भूमिकाएं असाइन की जा सकती हैं.

gcloud Terraform

IAM नीति सेट अप करने के लिए, आपको IAM नीति की JSON या YAML फ़ाइल तैयार करनी होगी. इसमें IAM ग्रुप और असाइन की गई भूमिकाओं की सूची होगी. उदाहरण के लिए:

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

ज़्यादा जानकारी और सिंटैक्स के लिए, अनुमति देने की नीतियों के बारे में जानकारी लेख पढ़ें.

शेल एनवायरमेंट में आईएएम नीति सेट करने के लिए, 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 लॉग खोजें. ज़्यादा जानकारी के लिए, क्वेरी लैंग्वेज को लॉग करना देखें.

    कंसोल gcloud
    1. Google Cloud Console में, लॉग एक्सप्लोरर पर जाएं.

      लॉग एक्सप्लोरर पर जाएं

    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: ऐसा देश या इलाका जहां यह सुविधा काम करती है. इसकी जानकारी, इस पेज के शुरू करने से पहले सेक्शन में दी गई है. साथ ही, यह भी ज़रूरी है कि आपने अपने Google Cloud प्रोजेक्ट में Developer Connect में इसे कॉन्फ़िगर किया हो.
    • 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. हर रिपॉज़िटरी ग्रुप के लिए, तीसरा चरण तब तक दोहराएं, जब तक कि इंडेक्स से सभी रिपॉज़िटरी ग्रुप मिटा नहीं दिए जाते.

  4. ज़रूरी नहीं: इंडेक्स मिटाने के लिए, शेल एनवायरमेंट में gemini code-repository-indexes delete कमांड का इस्तेमाल करें:

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

आगे क्या करना है