Personalización de código con Gemini Code Assist Enterprise

1. Antes de comenzar

En este codelab, se muestra cómo preparar Gemini Code Assist para que proporcione sugerencias de personalización de código adaptadas a tus repositorios privados. Esto puede hacer que los resultados de Code Assist sean mucho más útiles, especialmente para los equipos que tienen convenciones específicas para el trabajo similar que se repite con frecuencia. Ten la certeza de que permitir que Gemini indexe tus bases de código privadas para esta función no habilita a Gemini para entrenarse de forma general con tu código privado.

También analizaremos cómo excluir archivos sensibles o irrelevantes para la personalización de código con un archivo .aiexclude.

Requisitos previos

  • Conocimientos básicos de Gemini Code Assist y acceso a un proyecto en el que esté habilitado
  • Conocimiento de un lenguaje de programación admitido para la personalización del código
  • Capacidad para crear recursos en us-central1 o europe-west1, ya que la personalización de código requiere conexiones de Developer Connect en esas ubicaciones.
  • Una CLI de Google Cloud autenticada y actualizada

Qué aprenderá

  • Cómo aprovechar la personalización de código en Gemini Code Assist Enterprise
  • Uno de los muchos casos de uso en los que la personalización del código puede ahorrar tiempo a tus equipos

Requisitos

  • Un proyecto de Google Cloud con Gemini Code Assist habilitado
  • Un repositorio privado para indexar solicitudes de personalización
  • Es el momento de indexar el código para las solicitudes de personalización. Esto puede tardar hasta 24 horas.
  • Un IDE con Gemini Code Assist instalado

2. Contexto

Para probar la personalización de código, se necesitan dos cosas:

  1. Acceso a un proyecto de Google Cloud con Gemini habilitado
  2. y un repositorio privado para informar las respuestas de Gemini.

Cómo habilitar Gemini

Los mejores repositorios candidatos para que Gemini los indexe contendrían código que se reutiliza con frecuencia en toda tu organización. El repositorio de muestra proporcionado para este codelab contiene un servicio web estándar de Spring Boot, con una carpeta de objetos de transferencia de datos que cumplen con este criterio, ya que se crearía una clase similar para describir cada entidad en una base de datos a medida que se transporta a la capa de presentación.

3. (Opcional) Configuración del repositorio

Si prefieres usar un repositorio de ejemplo en lugar de uno de tus repositorios privados, puedes seguir los pasos que se indican a continuación en el editor de terminal que prefieras o en Cloud Shell. Para comenzar, crea un repositorio privado que nos permita ver la personalización de código en acción:

mkdir customization-starter
cd customization-starter
curl https://start.spring.io/starter.zip -d dependencies=web,lombok \
           -d javaVersion=21 \
           -d type=maven-project \
           -d bootVersion=3.3.4 -o cc-starter.zip
unzip cc-starter.zip
rm cc-starter.zip
pushd src/main/java/com/example/demo
mkdir dtos
touch dtos/LedgerDTO.java

Agrega lo siguiente al archivo LedgerDTO:

package com.example.demo.dtos;

import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

@Getter
@Setter
@Accessors(chain = true)
public class LedgerEntryDto {
    private Long id;
    private String accountName;
    private double amount;
    private String transactionType; 
    private String description;
    private java.util.Date transactionDate;
}

Esto será suficiente para demostrar que los métodos de acceso que otros colaboradores de esta base de código esperarían usar se generarán con precisión con la personalización de código habilitada.

Crea un repositorio nuevo y asegúrate de que sea privado. Sigue los pasos que se indican a continuación para enviar el código inicial a tu nuevo repositorio:

popd
gh auth login
git init
git add .
git commit -m "code customization starter"
git remote add origin git@github.com:<YOUR_GITHUB_ID>/customization-starter.git
git branch -M main
git push -u origin main

4. Cómo excluir archivos

Antes de otorgarle acceso a Gemini a tus repositorios privados, es importante que comprendas cómo excluir los archivos irrelevantes o sensibles que tu equipo no quiere que se indexen. Para lograr esto, se usa un archivo .aiexclude, que es similar a un archivo .gitignore con algunas diferencias clave:

  • Un archivo .aiexclude vacío bloquea todos los archivos de su directorio y todos los subdirectorios.
    • Esto es lo mismo que un archivo que contiene **/*.
  • Los archivos .aiexclude no admiten la negación (agregar un prefijo ! a los patrones).

Teniendo esto en cuenta, intenta considerar los tipos de archivos o directorios que tu equipo desearía excluir y enuméralos en líneas separadas:

#Block all files with .key extensions
*.key

#Block all files under sensitive/dir
my/sensitive/dir/

#Block all .key files under sensitive/dir
my/sensitive/dir/ /.key

5. Configura Developer Connect

Developer Connect es el servicio que facilita las conexiones y los vínculos a tus repositorios de código privados en GitHub o GitLab. Este es el mecanismo que permite que Gemini Code Assist se conecte de forma segura a tus repositorios privados para crear el índice que se usará para mejorar las respuestas.

Estos dos conceptos son útiles para comprender cómo Developer Connect proporciona acceso seguro a tu código:

Conexión

  • Representa el puente entre Google y la plataforma externa de administración de código fuente.

Vínculo

  • Representa la asociación con un repositorio de código fuente individual que seleccionas dentro de una plataforma de administración de código fuente conectada.

Con esos conceptos en mente, comienza por navegar a la página Developer Connect para habilitar la API para tu proyecto.

Cómo habilitar Developer Connect

A continuación, sigue los pasos correspondientes para crear una conexión y un vínculo para GitHub o GitLab. Ambos recursos se crearán durante el proceso del asistente.

Crear conexión y vínculo

Repite estos pasos para crear un vínculo para cada repositorio que quieras que la función de personalización de código de Gemini tenga en cuenta en sus respuestas. Puedes reutilizar la conexión existente si varios repositorios provienen de la misma plataforma.

6. Crea un índice y conéctate a él

Para analizar tus repositorios rápidamente, la personalización de código se basa en un índice. Toma nota del INDEX_NAME que usas, ya que lo necesitarás en un paso posterior.

Para crear un índice, ejecuta el siguiente comando:

gcloud gemini code-repository-indexes create <INDEX_NAME> \
    --project=<YOUR_PROJECT_ID> \
    --location=<REGION>

Si encuentras algún error de Invalid choice: ..., asegúrate de que tu Google Cloud CLI esté actualizada ejecutando el siguiente comando:

gcloud components update

A continuación, crea un grupo de repositorios para permitir el acceso a tu índice:

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories='[{"resource": "projects/PROJECT_ID/locations/REGION/connections/INDEX_CONNECTION/gitRepositoryLinks/REPOSITORY", "branch_pattern": "BRANCH_NAMES"}]'

Reemplaza los siguientes valores:

  • REPOSITORY_GROUP: Es el nombre del grupo de repositorios que estás a punto de crear.
  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud.
  • INDEX_NAME: Es el nombre del índice que definiste en un paso anterior para crear un índice.
  • REGION: Es una región admitida de la lista en la documentación que configuraste en Developer Connect en tu proyecto de Google Cloud.
  • INDEX_CONNECTION: Es la conexión del índice que creaste en un paso anterior para crear un índice.
  • REPOSITORY: Es el repositorio que deseas indexar. Debes especificar al menos un repositorio, pero puedes especificar varios si es necesario.
  • BRANCH_NAMES: Es el nombre de las ramas que deseas indexar, como main o dev.

Según la cantidad de repositorios que quieras indexar y su tamaño, la indexación del contenido puede tardar hasta 24 horas. La indexación se realiza una vez cada 24 horas y detecta los cambios que se realizaron en el repositorio. Puedes consultar estos pasos para verificar el estado de la generación de tu índice:

Cómo buscar el estado de indexación

Por último, otorga el acceso principal deseado al grupo:

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

7. Genera código personalizado

Ahora que Gemini tiene acceso al código de tu repositorio privado, podemos esperar ver fragmentos relevantes en nuestras solicitudes de finalización de código. En nuestro repositorio de ejemplo, podemos navegar a nuestra carpeta DTO y, a medida que creamos una nueva clase para representar un nuevo objeto, puedes ver las anotaciones esperadas que aparecen a medida que escribimos:

Muestra generada

8. Conclusión

¡Felicitaciones por completar este codelab! Aprendiste a usar la función Personalización de código de Gemini Code Assist. Ahora que las respuestas se pueden adaptar a las bases de código privadas y específicas de tus equipos, cada instrucción y finalización de código será más valiosa para los desarrolladores de tus equipos.

No dudes en revisar estos otros documentos y materiales para obtener más información, y ayuda para configurar roles de IAM, entre otras cosas: