Fluxo do processo de prompts do usuário do GitHub Copilot

Concluído

Nessa unidade, vamos detalhar como o GitHub Copilot transforma seus prompts em um código inteligente e utilizável. Geralmente, o GitHub Copilot recebe prompts e retorna sugestões de código ou respostas em seu fluxo de dados. Esse processo sugere um fluxo de entrada e saída.

Fluxo de entrada:

Ilustração do fluxo de entrada do GitHub Copilot.

Vamos percorrer todas as etapas que o Copilot executa para processar um prompt de usuário em uma sugestão de código.

1. Transmissão segura de prompts e coleta de contexto

O processo começa com a transmissão segura do prompt do usuário por HTTPS. Isso garante que seu comentário em linguagem natural seja enviado aos servidores do GitHub Copilot de forma segura e confidencial, protegendo as informações confidenciais.

O GitHub Copilot recebe com segurança o prompt do usuário, que pode ser um chat do Copilot ou um comentário em linguagem natural fornecido por você no seu código.

Simultaneamente, o Copilot coleta detalhes de contexto:

  • O código antes e depois da posição do cursor, o que o ajuda a entender o contexto imediato do prompt.
  • O nome e tipo do arquivo que está sendo editado, permitindo que adapte sugestões de código ao tipo de arquivo específico.
  • Informações sobre as guias abertas adjacentes, garantindo que o código gerado se alinhe a outros segmentos de código no mesmo projeto.
  • Informações sobre a estrutura do projeto e caminhos de arquivo
  • Informações sobre linguagens de programação e frameworks
  • Pré-processamento usando a técnica Fill-in-the-Middle (FIM) para considerar o contexto do código anterior e posterior, expandindo efetivamente a compreensão do modelo, permitindo que o Copilot gere sugestões de código mais precisas e relevantes aproveitando um contexto mais amplo.

Essas etapas traduzem a solicitação de alto nível do usuário em uma tarefa de codificação concreta.

2. Filtro de proxy

Depois que o contexto é coletado e o prompt é criado, ele passa com segurança para um servidor proxy hospedado em um locatário do Microsoft Azure de propriedade do GitHub. O proxy filtra o tráfego, bloqueando tentativas de hackear o prompt ou manipular o sistema para revelar detalhes sobre como o modelo gera sugestões de código.

3. Filtragem de toxicidade

O Copilot incorpora mecanismos de filtragem de conteúdo antes de prosseguir com a extração de intenções e geração de código, para garantir que as respostas e o código gerado não incluam nem promovam:

  • Discurso de ódio e conteúdo inadequado: O Copilot emprega algoritmos para detectar e prevenir a ingestão de discurso de ódio, linguagem ofensiva ou conteúdo inapropriado que possa ser prejudicial ou ofensivo.
  • Dados pessoais: O Copilot filtra o conteúdo de modo a deixar de fora todos os dados pessoais, como nomes, endereços ou números de identidade, para proteger a privacidade e a segurança de dados do usuário.

4. Geração de código com LLM

Por fim, o prompt filtrado e analisado é passado para os Modelos LLM, que geram sugestões de código apropriadas. Essas sugestões são baseadas no entendimento do Copilot sobre o prompt e o contexto circundante, garantindo que o código gerado seja relevante, funcional e alinhado com os requisitos específicos do projeto.

Fluxo de Saída:

Ilustração do fluxo de saída do GitHub Copilot.

5. Pós-processamento e validação de resposta

Depois que o modelo produz suas respostas, o filtro de toxicidade remove qualquer conteúdo gerado nocivo ou ofensivo. O servidor proxy então aplica uma camada final de verificações para garantir a qualidade do código, a segurança e os padrões éticos. Essas verificações incluem:

  • Qualidade do código: As respostas são verificadas quanto a bugs ou vulnerabilidades comuns, como cross-site scripting (XSS) ou injeção de SQL, garantindo que o código gerado seja robusto e seguro.
  • Código público correspondente (opcional): Opcionalmente, os administradores podem habilitar um filtro que impede o Copilot de retornar sugestões com mais de ~150 caracteres caso elas sejam muito semelhantes a códigos públicos existentes no GitHub. Isso evita que correspondências coincidentes sejam sugeridas como conteúdo original. Se qualquer parte da resposta falhar nessas verificações, ela será truncada ou descartada.

6. Entrega de sugestões e início do ciclo de feedback

Somente as respostas que passam por todos os filtros são entregues ao usuário. O Copilot então inicia um ciclo de feedback com base em suas ações para alcançar o seguinte:

  • Aumentar seu próprio conhecimento com base nas sugestões aceitas.
  • Aprender e se aprimorar por meio de modificações e rejeições das sugestões.

7. Repita para os prompts subsequentes

O processo é repetido à medida que você fornece mais prompts, com o Copilot lidando continuamente com as solicitações do usuário, entendendo sua intenção e gerando um código como resposta. Com o tempo, o Copilot aplica os dados cumulativos de feedback e de interação, incluindo os detalhes de contexto, para aprimorar seu entendimento da intenção do usuário e refinar seus recursos de geração de código.