4 pontos por GN⁺ 2025-02-15 | 2 comentários | Compartilhar no WhatsApp
  • O Zed é um editor projetado para velocidade e sempre buscou uma experiência de edição instantânea
  • Para ficar ainda mais rápido do que instant, adotou uma abordagem de “prever a próxima ação de edição” do usuário
  • Para isso, o Zed apresentou o novo recurso de edit prediction, que funciona com base no modelo open source Zeta
  • Durante o uso, é possível aplicar imediatamente a edição prevista com a tecla tab, e também executar várias edições subsequentes em sequência
  • Era um recurso muito pedido, e foi desenvolvido para se integrar da forma mais natural possível ao ambiente de edição do Zed
  • No momento, durante o período de beta público, basta baixar o Zed e entrar com uma conta GitHub para usar o Zeta gratuitamente
  • Porém, o edit prediction pode não continuar gratuito no futuro; por enquanto, está sendo disponibilizado para experimentar e aprender junto com os usuários

Thoughtful Integration

  • Com a adição do recurso de edit prediction, a tecla tab ficou mais poderosa
  • Mas isso pode entrar em conflito com formas de uso já existentes, como usar tab para indentação ou verificar sugestões fornecidas pelo servidor de linguagem (LS)
  • Quando uma sugestão de código do servidor de linguagem aparece, é preciso pressionar option/alt para que a edição prevista seja exibida em prévia
  • No macOS, é possível confirmar a edição prevista com tab, e ao soltar option, a tela original de sugestões do servidor de linguagem volta a aparecer
  • Como no Linux o alt-tab costuma estar reservado ao gerenciador de janelas, o padrão oferecido é alt-l
  • Se no ambiente Linux o alt-tab não causar conflito, ele pode ser usado normalmente

Introducing Zeta: Zed's Open Source Edit Prediction Model

  • Zeta é um modelo open source desenvolvido com base no Qwen2.5-Coder-7B
  • Um dataset aberto (link) também está disponível
  • Ao trabalhar em repositórios open source, a equipe espera receber contribuições para o dataset a fim de melhorar o Zeta
  • No início, os dados serão incorporados após análises de segurança e privacidade
  • A ideia é, em conjunto, transformar o edit prediction em um recurso melhor de forma geral
  • Link do vídeo: How Zed’s Open-Source Edit Predictions Work

Editing By Rewriting

  • A maioria dos modelos de código é treinada no formato “fill in the middle”
  • A estrutura consiste em fornecer um prefixo e um sufixo, e o modelo gera o trecho entre eles
  • Já o Zeta precisa prever edições em posições arbitrárias, o que torna a tarefa incompatível com essa estrutura tradicional
  • A equipe observou que o modelo é mais habilidoso em reescrever blocos relativamente grandes de código do que em mudanças muito granulares
  • Por isso, optou por receber como entrada o histórico recente de edições e a posição do cursor, e então reescrever aquele trecho de código

Evaluating Predictions

  • Como os resultados de grandes modelos de linguagem podem não ser idênticos a cada execução, os testes se tornam desafiadores
  • É possível controlar parte dessa variação definindo a temperature como 0 ou especificando uma semente de RNG
  • Mas, como em código muitas vezes existem várias respostas corretas, mesmo um resultado diferente da resposta esperada pode estar certo
  • Como testes unitários tradicionais são difíceis nesse caso, a equipe tentou usar um LLM maior para inspecionar, em linguagem natural, os resultados do Zeta
  • Exemplo: diante de um requisito como “chamar recursivamente a função quicksort para os arrays da esquerda e da direita”, o Claude foi usado para julgar se o resultado correspondia à intenção

Prompt Engineering

  • No início, foi usado o modelo Qwen2.5-Coder-32B para montar prompts que instruíssem com clareza qual edição deveria ser prevista
  • As primeiras avaliações (evals) foram aprovadas, mas conforme o número de testes aumentou, ficou difícil obter resultados consistentes apenas alterando os prompts
  • O modelo 32b também apresentava muita latência de resposta e não atendia aos rigorosos critérios de desempenho do Zed

Supervised Fine-Tuning

  • Após testar várias abordagens, a equipe migrou para fine-tuning supervisionado com Unsloth e LoRA
  • O objetivo é ensinar o modelo a inferir, a partir do histórico recente de edições, a mudança desejada pelo usuário e escrever bem o trecho de código sem inserções imprecisas
  • Porém, no início havia poucos dados reais de usuários, então cerca de 50 exemplos sintéticos foram criados com Claude e adicionados ao dataset
  • Depois, uma versão inicial foi implantada no Zed por meio de uma feature flag, permitindo que a equipe interna gerasse exemplos reais de uso e ampliasse o dataset
  • Com cerca de 400 exemplos, a precisão do modelo melhorou, mas ainda restava o problema de ele fazer alterações desnecessárias ao editar apenas partes de um arquivo

Direct Preference Optimization

  • Para resolver esse problema, foi introduzida a técnica DPO (Direct Preference Optimization)
  • Em vez de mostrar apenas “bons exemplos”, ela também explicita “exemplos a evitar”, treinando o modelo para distinguir edições inadequadas
  • Com apenas cerca de 150 exemplos cuidadosamente selecionados, o comportamento do modelo melhorou bastante em casos difíceis
  • A expectativa é que melhorias adicionais sejam possíveis com a coleta de exemplos mais variados

Minimizing Latency: Speculative Decoding

  • Assim como em todos os recursos do Zed, minimizar a latência também é essencial no edit prediction
  • A meta é ter p50 abaixo de 200 ms e p90 abaixo de 500 ms
  • Como reescrever parte do código exige gerar muitos tokens, isso pode ser mais lento do que o método comum de fill-in-the-middle
  • No entanto, aproveitando o fato de que o processo de rewrite costuma ter muitos trechos parecidos com o código original, foi aplicada a técnica de speculative decoding
  • A estratégia consiste em consultar a entrada e usar busca por n-gramas para gerar tokens em paralelo, acelerando sem perda de qualidade

Minimizing Latency: Serving The Model

  • Além da velocidade de inferência do modelo, a forma de servir o modelo no ambiente de servidores também foi um grande desafio
  • Trata-se do problema que mais exigiu capacidade computacional entre tudo o que a equipe já fez até agora
  • No lançamento, após um breve processo de validação, a escolha foi a Baseten
  • Os engenheiros da Baseten otimizaram o modelo Zeta e conseguiram atingir os critérios de latência desejados
  • Como o tempo de transmissão na rede também é um fator importante, GPUs foram posicionadas nos EUA e na Europa para processar solicitações fisicamente mais perto dos usuários
  • O encaminhamento das requisições é feito via Cloudflare Workers em data centers próximos aos usuários

Conclusion

  • No futuro, a equipe pretende explorar várias direções para tornar o edit prediction ainda mais poderoso
  • Os planos incluem aumentar a quantidade de contexto recebida pelo modelo, realizar mais fine-tuning e expandir o dataset do Zeta para continuar evoluindo
  • Desde o lançamento do Zed AI no outono do ano passado, muita coisa foi aprendida
  • Como o mundo muda rapidamente, a equipe continua experimentando e construindo recursos que os usuários possam realmente amar
  • A intenção é evoluir a IA também dentro do espírito open source que o Zed sempre buscou
  • A equipe espera que qualquer pessoa possa participar como usuária, colaboradora ou integrante do time, enquanto seguem correndo para abrir um futuro ainda melhor

2 comentários

 
GN⁺ 2025-02-15
Comentários do Hacker News
  • O recurso de edição preditiva do Zed é gratuito no momento, mas pode se tornar pago no futuro. O usuário decidirá se vai integrá-lo ao fluxo de trabalho quando o preço for definido. Gostaria de um teste gratuito, mas não usará se o preço for alto
    • O Zed só consegue executar um LSP por tipo de arquivo. Rust e C++ funcionam bem, mas Angular não
    • O recurso de edição remota não funciona no Windows. Para usar edição remota no Windows, é necessário suporte a SSH
  • Os recursos de previsão estão sendo usados em excesso. O usuário sente que esse tipo de recurso atrapalha e interfere no seu fluxo de trabalho
    • Quando a previsão é usada demais, ela deixa de ajudar. Como o algoritmo não consegue ler a mente das pessoas, ele deve evitar atrapalhar o trabalho do usuário
  • O usuário não quer que o código seja enviado a terceiros. Especialmente ao editar arquivos confidenciais, chaves privadas ou chaves de API podem ser transmitidas
    • Gostaria que houvesse uma opção local
  • O usuário gosta da forma como o Zed anuncia novos recursos. Eles aparecem como um banner no canto superior esquerdo e não interrompem o trabalho
    • Ao contrário de outros softwares, ele não força o usuário a conferir os novos recursos
  • O Zed tenta autocompletar comentários. O usuário não quer autocompletar na parte de comentários, e foi adicionada uma opção para desativar isso
  • A interface de aceitação de sugestões do CoPilot é incômoda. Ao usar a tecla Tab, aparecem muitas sugestões de IA indesejadas
  • Em um editor de texto, o usuário prefere estabilidade. Muitos recursos relacionados a IA acabam sendo inconvenientes
    • Depois de usar o Zed, achou bom
  • O Intellisense moderno já oferece recursos de previsão adequados. A previsão por IA está sendo usada em excesso
    • Seria útil se a IA oferecesse recomendações sobre estrutura e padrões do programa. Quanto maior o programa, mais difícil fica estruturá-lo
  • É possível definir arquivos de modelo para usar os recursos do Zed localmente. No entanto, não está claro se o Zed permite alterar o endpoint desse recurso