Configurar e usar a personalização de código do Gemini Code Assist

Neste documento, descrevemos como configurar Personalização de código do Gemini Code Assist conectando o Gemini Code Assist aos seus repositórios de código particulares. Esse recurso permite receber recomendações de código, que são extraídas das bibliotecas internas, APIs privadas e estilo de codificação da sua organização.

Antes de começar

Escolher quais repositórios particulares estão conectados

Como prática recomendada, conecte repositórios que:

  • Ter um código com estilo ou estrutura semelhante ao que você quer que os desenvolvedores escrevam.
  • tem bibliotecas ou APIs privadas para chamar pelo seu serviço atual; de código aberto.

(Opcional) Escolher quais arquivos não são indexados

Por padrão, a personalização de código indexa todos os arquivos de código com suporte nos repositórios especificados.

Em muitos cenários, você pode ter arquivos ou subárvores específicos que não deseja indexado. Exemplo:

  • Informações altamente sensíveis com acesso limitado dentro da sua organização
  • Código antigo ou descontinuado
  • Código gerado automaticamente ou temporário

Para evitar a exposição de código que você não quer indexar, use padrões de ramificação para controlar o acesso ao seu índice e use uma ramificação estável, como main.

Como alternativa, você também pode excluir arquivos do índice criando um arquivo .aiexclude.

Criar um índice

A personalização do código depende de um índice para analisar e analisar seu repositório em busca de sugestões e pesquisas de geração de código mais rápidas.

Para criar o índice, em um ambiente de shell, use o comando gemini code-repository-indexes create:

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

Substitua:

  • INDEX_NAME: o nome do índice.
  • PROJECT_ID: é seu ID do projeto no Google Cloud.
  • REGION: uma região com suporte, conforme indicado nos Antes de começar desta página, você precisa: configuradas no Developer Connect na sua Google Cloud projeto.

A criação de índices geralmente leva 30 minutos para ser concluída, mas pode levar até uma hora.

O Google limita o número de índices do repositório de código a um para cada projeto e organização. Se precisar de mais índices de repositório de código, solicitar uma cota maior.

Controlar o acesso ao índice usando grupos de repositórios

Para criar um grupo de repositórios, em um ambiente shell, use o Comando 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"}]'

Substitua:

  • REPOSITORY_GROUP: nome do grupo de repositório, como default.
  • PROJECT_ID: é seu ID do projeto no Google Cloud.
  • REGION: uma região com suporte, conforme indicado nos Antes de começar desta página, você precisa: configuradas no Developer Connect na sua Google Cloud projeto.
  • INDEX_NAME: nome do índice que você criou em um etapa anterior para criar um índice.
  • REPOSITORY_RESOURCE_NAME: nome do repositório. na conexão Developer Connect. Para encontrar o nome de repositório, vá para a página do Developer Connect no no console do Google Cloud e, na guia Repositórios, procure ID da conexão na coluna Conexão da tabela. Para copiar o nome do recurso, clique no botão more_vert para mais opções. Selecione Copiar caminho do recurso.
  • BRANCH_NAMES: nome das filiais que você quer indexar, como main|dev.

Também é possível criar um grupo de repositórios com repositórios definidos em um arquivo JSON (ou YAML), formatado da seguinte maneira:

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

Para criar um grupo de repositórios com base em um arquivo JSON ou YAML, em um ambiente de shell, use o comando gemini code-repository-indexes repository-groups create:

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

Conceder o papel do IAM ao grupo de repositório em um projeto

Você só recebe sugestões de repositórios no índice. Cada repositório pertence a um ou vários grupos de repositórios. Para acessar as sugestões, você precisa conceda o papel do IAM de usuário dos grupos de repositórios complementares do Cloud AI (roles/cloudaicompanion.repositoryGroupsUser): contém o parâmetro permissão do IAM cloudaicompanion.repositoryGroups.user à que podem ser agrupadas de acordo com uma das formas a seguir:

  • Conceda aos principais a permissão para acessar todo o índice.
  • Conceda aos principais acesso a um subconjunto do índice.

Conceder aos principais permissão para acessar todo o índice

  1. Para vincular uma política do IAM a um projeto, em um ambiente de shell, use o comando projects add-iam-policy-binding:

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

    Substitua:

    • PROJECT_ID: o ID do projeto em que o grupo do repositório está localizado.
    • PRINCIPAL: o endereço de e-mail do principal que precisa de acesso. Por exemplo, user:test-user@gmail.com para um indivíduo ou group:admins@example.com para um grupo.

    Para ver mais informações, consulte gcloud projects set-iam-policy.

  2. Quando solicitado a especificar uma condição, insira None.

Conceder aos principais acesso a um subconjunto do índice

É possível criar vários grupos de repositórios e atribuir papéis do IAM a diferentes principais do IAM.

Para configurar uma política do IAM, você precisa preparar o arquivo JSON ou YAML da política do IAM, que vai conter uma lista de grupos do IAM e papéis atribuídos. Exemplo:

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

Para mais detalhes e a sintaxe, consulte Como funcionam as políticas de permissão.

Para definir a política do IAM, em um ambiente shell, use o Comando 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

Substitua:

Verificar o status de indexação

Dependendo do número de repositórios que você quer indexar e do tamanho deles, a indexação de conteúdo pode levar até 24 horas. Para repositórios grandes, a indexação pode demorar mais. A indexação ocorre uma vez a cada 24 horas, detectando todas as mudanças feitas no repositório.

  1. No console do Google Cloud, acesse Análise de registros.

    Acessar o Explorador de registros

  2. Use o filtro de nomes de registro para conferir os registros indexing ou pesquise os registros de indexação com o seguinte comando:

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

    Substitua PROJECT_ID pelo ID do projeto em que o grupo de repositórios está localizado.

    Por exemplo, para visualizar erros nos registros indexing, execute o seguinte comando:

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing" AND severity>=ERROR"
    

    Para mais informações, consulte Linguagem de consulta do Logging.

  3. Analise os status de indexação associados, como estes:

    • Início da indexação do repositório. Por exemplo, Indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 6, failed: 0..
    • Fim da indexação de repositório individual. Por exemplo:
      • Problema resolvido: Successfully finished indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 7, failed: 0.
      • Falha: Failed to index repository REPOSITORY_NAME. Error: [<error message>]. Total number of repositories: 10, succeeded: 7, failed: 1.
    • Fim da indexação do repositório, por exemplo:
      • Problema resolvido: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 0.
      • Falha: 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.

    Nos status de índice, REPOSITORY_NAME é o repositório que você quer analisar.

  4. Analise os erros de indexação associados, como os seguintes:

    • Falha ao buscar o repositório.
    • Falha ao listar os arquivos do repositório.
    • Falha ao recuperar informações de repositório do índice.
    • Falha ao recuperar arquivos do índice.
    • Erro interno.

Usar a personalização de código

Depois que você configurar a personalização de código, os usuários vão começar a receber sugestões de preenchimento e geração de código que podem ser baseadas em código privado que você indexou, além dos resultados da detecção completa da base de código.

Desativar a personalização do código

  1. Para listar todos os grupos de repositórios do índice atual, em um ambiente shell, use o método Comando 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
    

    Substitua:

    • REGION: uma região com suporte, conforme indicado nos Antes de começar desta página, que que você configurou no Developer Connect em sua projeto do Google Cloud.
    • PROJECT_ID: é seu ID do projeto no Google Cloud.
    • INDEX_NAME: nome do índice que você criou em um etapa anterior para criar um índice.
  2. Para excluir um grupo de repositórios do índice atual, use o evento Comando 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. Repita a etapa 3 para cada grupo de repositório até excluir todos os grupos do índice.

  4. Opcional: para excluir o índice, em um ambiente shell, use o método Comando gemini code-repository-indexes delete:

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

A seguir