- 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
Novo editor criado pelos desenvolvedores do Atom. Beta aberta iniciada
Editor de código colaborativo 'Zed' agora se torna open source
Zed AI revelado (with Anthropic)
Comentários do Hacker News