Design clássico · Sênior
Assistente de código (estilo Copilot)
Projeto de entrevista clássico. Pontos centrais: FIM, contexto do repositório sob orçamento de tokens, latência de autocomplete e taxa de aceitação.
Resposta curta
Projeto de entrevista clássico. Pontos centrais: FIM, contexto do repositório sob orçamento de tokens, latência de autocomplete e taxa de aceitação. O Copilot da GitHub é o exemplo usado neste caso. Segundo a fonte, o Codex, descendente do GPT-3, foi o modelo escolhido para movê-lo, e o produto passou de prévia técnica em junho de 2021 para disponibilidade geral em…
01 · CONTEXTO E REQUISITOS
O que um assistente de código precisa fazer
O Copilot da GitHub é o exemplo usado neste caso. Segundo a fonte, o Codex, descendente do GPT-3, foi o modelo escolhido para movê-lo, e o produto passou de prévia técnica em junho de 2021 para disponibilidade geral em junho de 2022. Projetar um assistente assim é um exercício de design de sistemas de ML.
O objetivo declarado pela equipe é entregar respostas relevantes ao contexto com baixa latência. O desafio, nas palavras dela, é decidir não só quais dados enviar ao modelo, mas também em que ordem e de que forma inseri-los.
02 · DESENHO DO SERVIÇO
Do teclado ao modelo e de volta à telemetria
O desenho abaixo é uma leitura didática para entrevista, montada a partir dos pontos que a fonte descreve.
A IDE é quem dispara o processo: segundo a fonte, os prompts são gerados em segundo plano em qualquer ponto da digitação.
Neste desenho, o gateway é a porta de entrada do serviço e recebe os pedidos vindos da IDE.
A montagem de contexto seleciona trechos do arquivo atual e de outras fontes e depois os prioriza, filtra e monta no prompt final.
O cache entra para que a montagem rode em segundo plano sem latência adicional.
O servidor do modelo é onde a sugestão é gerada; no Copilot, o modelo que o moveria era o Codex, descendente do GPT-3.
A telemetria recebe da IDE as sugestões aceitas ou ignoradas; a fonte avalia as técnicas de contexto justamente pela aceitação das completions mostradas, em testes A/B.
A fonte diz que os prompts são gerados em segundo plano em qualquer ponto da digitação e que, graças ao uso otimizado de cache, as abas vizinhas e o FIM funcionam sem latência adicional. É um caso típico de cuidar de latência no caminho da requisição.
03 · CONTEXTO SOB ORÇAMENTO
Nem todo o código cabe no prompt
Na época do texto, os transformers rápidos o bastante para o Copilot processavam cerca de 6.000 caracteres por vez. Esse limite significa que nem todo o código da pessoa pode virar contexto.
Para escolher o que entra, uma série de algoritmos seleciona trechos de código e comentários do arquivo atual e de outras fontes; esses trechos são depois priorizados, filtrados e montados no prompt final.
A primeira versão considerava só o arquivo aberto na IDE como contexto.
As abas vizinhas passam a buscar, nos demais arquivos abertos, trechos parecidos com o código ao redor do cursor e os acrescentam ao prompt.
A recuperação no repositório é descrita como experimento: embeddings dos trechos ficariam num banco vetorial, com correspondência aproximada em tempo real.
A montagem prioriza, filtra e monta o prompt final com o que as fontes entregam.
Com o FIM, o prompt indica ao modelo qual parte é prefixo e qual é sufixo, e a sugestão cobre o trecho que deve ficar entre os dois.
| Técnica | O que a fonte relata |
|---|---|
| Arquivo atual | A primeira versão considerava só o arquivo aberto na IDE. |
| Abas vizinhas | Busca trechos parecidos nos arquivos abertos e os acrescenta ao prompt; aumento relativo de 5% na aceitação. |
| FIM | Indica ao modelo o prefixo e o sufixo; 10% mais completions aceitas nos testes A/B. |
| Embeddings | Em experimentação: embeddings do repositório num banco vetorial, com correspondência aproximada. |
Ao desenvolver as abas vizinhas, a equipe concluiu que um critério bem baixo para incluir uma correspondência rendeu as melhores sugestões. Incluir a melhor correspondência encontrada, mesmo imperfeita, foi melhor do que não incluir nada.
04 · FIM E ACEITAÇÃO
Prefixo, sufixo e a métrica que importa
Antes do FIM, só o código anterior ao cursor entrava no prompt. A GitHub chama o código antes do cursor de prefixo e o código depois dele de sufixo; com o FIM, é possível dizer ao modelo qual parte do prompt é qual.
A fonte mede esses ganhos pela aceitação das sugestões: as abas vizinhas elevaram a aceitação relativa em 5%, e o FIM rendeu 10% a mais de completions aceitas nos testes A/B.
05 · RECUPERAÇÃO NO REPOSITÓRIO
O passo seguinte: embeddings e banco vetorial
A fonte descreve, como experimento, o uso de bancos vetoriais para uma experiência personalizada em repositórios privados. Os algoritmos criariam embeddings de todos os trechos do repositório, potencialmente bilhões, e fariam correspondências aproximadas em tempo real com os trechos da IDE.
O recurso era pensado para clientes corporativos que aceitassem usá-lo de forma explícita (opt-in).
06 · PONTOS PARA DISCUTIR
Trade-offs que o entrevistador costuma explorar
Pontos para discutir: tamanho do contexto contra latência, custo de consultar mais fontes contra qualidade da sugestão, e como medir a aceitação sem atrasar a digitação.
Vale também perguntar o que acontece quando o modelo demora: uma sugestão tardia perde o valor, e o cliente pode preferir não mostrar nada.
Perguntas frequentes
O que é Assistente de código (estilo Copilot)?
Projeto de entrevista clássico. Pontos centrais: FIM, contexto do repositório sob orçamento de tokens, latência de autocomplete e taxa de aceitação.
O que o design de Assistente de código (estilo Copilot) cobre?
Ele está organizado nestas seções: O que um assistente de código precisa fazer, Do teclado ao modelo e de volta à telemetria, Nem todo o código cabe no prompt, Prefixo, sufixo e a métrica que importa, O passo seguinte: embeddings e banco vetorial e Trade-offs que o entrevistador costuma explorar.
Quanto tempo leva Assistente de código (estilo Copilot) e qual é o nível?
Leva cerca de 16 minutos para ler e tem nível Sênior.
Agora projete você mesmo
Rode este caso como uma entrevista na escola de System Design: você toma as decisões, o tutor as questiona e você vê a nota do seu desenho.