Flujo de proceso de solicitud de usuario de GitHub Copilot

Completado

En esta unidad desglosaremos cómo convierte GitHub Copilot los mensajes en código inteligente y utilizable. Por lo general, GitHub Copilot recibe solicitudes y devuelve sugerencias de código o respuestas en su flujo de datos. Este proceso sugiere un flujo de entrada y de salida.

Flujo de entrada:

Ilustración del flujo de entrada de GitHub Copilot.

Vamos a recorrer todos los pasos que sigue Copilot para procesar el mensaje de un usuario en una sugerencia de código.

1. Transmisión segura de solicitudes y recopilación de contexto

El proceso comienza con la transmisión segura del mensaje del usuario a través de HTTPS. Así se garantiza que el comentario en lenguaje natural se envíe a los servidores de GitHub Copilot de forma segura y confidencial, protegiendo la información confidencial.

GitHub Copilot recibe de forma segura el mensaje del usuario, que podría ser un chat de Copilot o un comentario en lenguaje natural que haya proporcionado dentro del código.

Simultáneamente, Copilot recopila detalles de contexto:

  • El código anterior y posterior a la posición del cursor, lo que le ayuda a comprender el contexto inmediato del mensaje.
  • El nombre y tipo del archivo que se está editando, lo que le permite adaptar las sugerencias de código al tipo de archivo específico.
  • Información sobre las pestañas abiertas adyacentes, garantizando que el código generado se alinee con otros segmentos de código del mismo proyecto.
  • Información sobre la estructura del proyecto y las rutas de acceso de los archivos
  • Información sobre lenguajes y marcos de programación
  • Preprocesamiento mediante la técnica Fill-in-the-Middle (FIM) para tener en cuenta tanto el contexto del código anterior como el siguiente, ampliando de forma efectiva la comprensión del modelo y permitiendo a Copilot generar sugerencias de código más precisas y relevantes aprovechando un contexto más amplio.

Estos pasos convierten la solicitud de alto nivel del usuario en una tarea de codificación concreta.

2. Filtro de proxy

Una vez recopilado el contexto y creada la solicitud, este pasa de forma segura a un servidor proxy hospedado en un inquilino de Microsoft Azure propiedad de GitHub. El proxy filtra el tráfico, bloqueando los intentos de piratear la solicitud o manipular el sistema para revelar detalles sobre cómo el modelo genera sugerencias de código.

3. Filtrado de toxicidad

Copilot incorpora mecanismos de filtrado de contenido antes de continuar con la extracción de intenciones y la generación de código, para asegurarse de que el código y las respuestas generados no incluyan o promuevan:

  • Discursos de odio y contenido inapropiado: Copilot emplea algoritmos para detectar y prevenir la ingesta de discursos de odio, lenguaje ofensivo o contenido inapropiado que pueda resultar dañino u ofensivo.
  • Datos personales: Copilot filtra activamente los datos personales, como nombres, direcciones o números de identificación, para proteger la privacidad del usuario y la seguridad de los datos.

4. Generación de código con LLM

Por último, la solicitud filtrada y analizada se pasa a modelos de LLM, que generan sugerencias de código adecuadas. Estas sugerencias se basan en la comprensión de la solicitud y el contexto circundante de Copilot, lo que garantiza que el código generado sea relevante, funcional y se ajuste a los requisitos específicos del proyecto.

Flujo de salida:

Ilustración del flujo de salida de GitHub Copilot.

5. Procesamiento posterior y validación de las respuestas

Una vez que el modelo genera sus respuestas, el filtro de toxicidad elimina cualquier contenido generado dañino u ofensivo. A continuación, el servidor proxy aplica una capa final de comprobaciones para garantizar la calidad, la seguridad y los estándares éticos del código. Estas comprobaciones incluyen:

  • Calidad del código: Las respuestas se comprueban para detectar errores o vulnerabilidades comunes, como scripting entre sitios (XSS) o inyección SQL, garantizando que el código generado sea sólido y seguro.
  • Código público coincidente (opcional): Opcionalmente, los administradores pueden habilitar un filtro que evita que Copilot devuelva sugerencias de más de ~150 caracteres si se parecen mucho al código público existente en GitHub. Así se evita que las coincidencias se sugieran como contenido original. Si alguna parte de la respuesta no supera estas comprobaciones, se trunca o se descarta.

6. Entrega de sugerencias e inicio del bucle de retroalimentación

Solo las respuestas que pasan todos los filtros se entregan al usuario. A continuación, Copilot inicia un bucle de retroalimentación basado en sus acciones para lograr lo siguiente:

  • Ampliar sus conocimientos a partir de sugerencias aceptadas.
  • Aprender y mejorar gracias a las modificaciones y rechazos de sus sugerencias.

7. Repetición para solicitudes posteriores

El proceso se repite a medida que proporciona más mensajes, y Copilot controla continuamente las solicitudes de usuario, comprende su intención y genera código en respuesta. Con el tiempo, Copilot aplica los datos acumulados de las interacciones y los comentarios, incluidos los detalles de contexto, para mejorar su comprensión de la intención del usuario y refinar sus funcionalidades de generación de código.