Meu workflow de geração de código com LLM
(harper.blog)- tldr: faço um brainstorming da especificação, monto um plano e depois executo com LLM codegen. Um loop iterativo por vez. Aí a mágica acontece
- Estou usando LLMs para criar rapidamente vários produtos pequenos. É divertido e útil
- Mas, se você cair numa abordagem errada, pode desperdiçar muito tempo
- Muitos desenvolvedores estão adotando abordagens parecidas entre si, e abaixo está o meu workflow
"Está funcionando bem agora, mas em 2 semanas pode não funcionar mais ou funcionar duas vezes melhor"
- Existem 2 formas de desenvolver
- Código greenfield: começar um projeto novo
- Código legado modernizado: melhorar ou expandir uma base de código existente
Greenfield: começar do zero
- É um processo que funciona bem para situações de “começar do zero”
- O fluxo é fazer brainstorming da ideia, documentá-la, montar um plano pequeno em etapas e depois usar ferramentas de geração de código para implementar
- Passo 1: concretizar a ideia
- Explico a ideia para um LLM como o ChatGPT e vou refinando até chegar a uma especificação concreta, fazendo com que ele conduza perguntas uma a uma
- No final, crio uma especificação detalhada (
spec.md) e organizo isso em um formato de documento que pode ser entregue a um desenvolvedor - Se necessário, também posso usar uma ferramenta como Deep Research para obter materiais de apoio sobre a ideia
- Passo 2: planejamento
- Com base na especificação, peço a um modelo mais forte em “entendimento e raciocínio” para gerar um blueprint detalhado passo a passo
- Seja com TDD ou não, divido em pequenas unidades de trabalho por etapa e organizo na ordem certa
- Com esse processo, gero
prompt_plan.mdetodo.mdprompt_plan.mdcontém o desenho dos prompts necessários para a geração de código, etodo.mdinclui uma checklist
- Esse planejamento costuma levar uns 15 minutos e também é fácil de consultar depois
- Passo 3: execução
- Uso várias ferramentas de geração de código e apoio, como Aider, Cursor e Claude, para escrever o código de fato
- Claude e Aider são exemplos representativos
- Abordagem com Claude
- Primeiro configuro a estrutura do projeto (boilerplate etc.) e depois envio ao Claude os prompts de cada etapa
- Copio e colo o código gerado no IDE e executo os testes
- Se surgir algum problema, envio a base de código atual ao Claude com uma ferramenta como
repomixpara depuração - Workflow
- Configurar o repo (boilerplate,
uv init,cargo init, etc.) - Colar o prompt no Claude
- Fazer copy & paste do
claude.aipara o IDE - Executar o código, rodar os testes etc.
- …
- Se funcionar, seguir para o próximo prompt
- Se não funcionar, usar o
Repomixpara enviar a base de código ao Claude e depurar - Repetir esse processo (
rinse repeat)
- Configurar o repo (boilerplate,
- Abordagem com Aider
- No Aider, também trabalho inserindo
prompt_plan.mdem sequência - Ele ajuda a rodar testes automaticamente ou a encontrar e corrigir erros
- Quando necessário, resolvo o problema com depuração interativa
- Configurar o repo (boilerplate,
uv init,cargo init, etc.) - Executar o Aider
- Colar o prompt no Aider
- Assistir o Aider dançar ♪┏(・o・)┛♪
- O Aider pode rodar os testes ou executar o app para validar
- Se funcionar, seguir para o próximo prompt
- Se não funcionar, corrigir em Q&A com o Aider
- Repetir esse processo (
rinse repeat)
- Configurar o repo (boilerplate,
- No Aider, também trabalho inserindo
- Resultados
- Dessa forma, dá para implementar em pouco tempo vários projetos, como scripts, apps em Expo e CLIs em Rust
- Se você tem projetos grandes ou pequenos que vem adiando, recomendo tentar
- A vantagem é poder experimentar rápido enquanto aprende novas linguagens ou tecnologias
Non-greenfield: trabalho incremental/iterativo sobre código existente
- Este é o método que uso quando aplico repetidamente pequenas tarefas a uma base de código que já existe
- Em vez de um grande plano geral, o fluxo é trocar pedidos específicos e resultados por unidade de trabalho
- Garantir contexto
- É possível usar uma ferramenta como
repomixpara resumir a base de código e repassá-la ao LLM - Gerencio configurações repetitivas com
misee salvo o resultado resumido em um arquivo chamadooutput.txt - Se a base de código for grande demais, ajusto para resumir apenas as partes necessárias
- É possível usar uma ferramenta como
- Exemplo de workflow
- Uso um comando como
mise run LLM:generate_missing_testspara fazer o LLM identificar as partes onde faltam testes - Depois aplico essas sugestões (issues) com Claude ou Aider e testo o resultado novamente
- Assim vou melhorando gradualmente a base de código existente
- Uso um comando como
Principais exemplos de prompt
- Code review
“Como um desenvolvedor sênior, faça uma revisão minuciosa deste código. Inclua números de linha e contexto. Não faça uma revisão superficial; analise profundamente”
“You are a senior developer. Your job is to do a thorough code review of this code. You should write it up and output markdown. Include line numbers, and contextual info. Your code review will be passed to another teammate, so be thorough. Think deeply before writing the code review. Review every part, and don't hallucinate.“ - GitHub Issue generation
“Como um desenvolvedor sênior, revise este código e escreva os principais problemas no formato de issue do GitHub”
“You are a senior developer. Your job is to review this code, and write out the top issues that you see with the code. It could be bugs, design choices, or code cleanliness issues. You should be specific, and be very good. Do Not Hallucinate. Think quietly to yourself, then act - write the issues. The issues will be given to a developer to executed on, so they should be in a format that is compatible with github issues“ - Missing tests
“Como um desenvolvedor sênior, revise este código e apresente de forma concreta quais testes estão faltando ou quais testes são necessários“
“You are a senior developer. Your job is to review this code, and write out a list of missing test cases, and code tests that should exist. You should be specific, and be very good. Do Not Hallucinate. Think quietly to yourself, then act - write the issues. The issues will be given to a developer to executed on, so they should be in a format that is compatible with github issues“
Esqui ᨒ↟ 𖠰ᨒ↟ 𖠰
- Quando você usa LLMs para escrever código em alta velocidade, chega um momento em que a complexidade e o contexto se embolam e tudo fica confuso
- Nesses momentos, ajuda voltar aos documentos da etapa de planejamento (por exemplo, do processo greenfield) ou escrever os testes de forma mais sistemática
- Como tudo anda muito rápido, também é importante parar um pouco, descansar e reorganizar as ideias
Estou muito sozinho (。•́︿•̀。)
- A maioria dos workflows baseados em LLM hoje está otimizada para o “modo solo”
- Quando você tenta programar em equipe, conflitos e problemas de merge ficam mais complicados
- Espero que evolua um ambiente colaborativo “multiplayer” onde várias pessoas possam usar LLMs ao mesmo tempo
Tempo
- A eficiência para escrever código com LLM aumentou muito, mas existe um “downtime” causado pela espera do processamento de tokens
- Eu uso esse tempo para pensar em ideias de outros projetos, ouvir música ou conversar
- Tenho vivido uma experiência em que minha produtividade pessoal ficou muito maior do que antes
Haterade ╭∩╮( •̀_•́ )╭∩╮
- Muitos amigos têm uma atitude do tipo “LLM de merda, isso é totalmente inútil”, e eu não ligo tanto para esse ponto de vista
- Claro, eu também não compartilho dessa posição, mas é verdade que um olhar desconfiado é necessário
- Existem infinitos motivos para odiar IA, e o que mais me preocupa é o consumo de energia e o impacto ambiental
- Mesmo assim… “o código precisa fluir”, né… ai ai
- Se você quer saber mais, mas não necessariamente virar um programador ciborgue, minha recomendação é: “não mude de opinião à força; apenas leia
Co-Intelligence: Living and Working with AI, de Ethan Mollick”- O livro explica bem os benefícios dos LLMs sem exageros no estilo anarco-capitalista tecno-utópico
- Pessoalmente, me ajudou muito, e também consegui ter conversas bem mais profundas com amigos que leram o livro
- Recomendo muito
6 comentários
Parece que
Co-Intelligence: Living and Working with AI, de Ethan Mollick,está previsto para ser publicado em março com o título
Cérebro DuploNossa, então existia algo chamado Repomix. Eu ficava copiando e colando toda vez... buá
Obrigado!
Será que a llm também vai receber os xingamentos que outros desenvolvedores dão no meu lugar?
Eu ainda uso LLM mais ou menos como um Google avançado e um Stack Overflow simpático, mas acho que preciso pensar em formas de aproveitar melhor. Também é importante como eu construo as coisas, claro, mas parece importante pensar junto com a IA sobre por que elas funcionam. O LLM é útil quando vou procurar documentação técnica antiga ou padrões.
Opinião do Hacker News
LLM é uma ferramenta capaz de criar rapidamente protótipos de novos projetos. No entanto, ao fazer alterações em código existente ou em projetos maduros, tende a aumentar a complexidade ou adicionar frameworks desnecessários por falta de contexto. LLM não substitui a compreensão do código.
Na colaboração com LLMs, é importante construir contexto por meio de perguntas. Isso é mais eficaz do que tentar criar contexto diretamente.
Recentemente, tenho tentado fazer mob programming com LLMs. Um LLM cuida da implementação, enquanto outro faz críticas e sugere melhorias.
É desejável não adicionar frameworks opinativos ao projeto. Isso aumenta o tamanho do contexto que o modelo precisa reconhecer. Por exemplo, em vez de usar Plasmo, deixo o LLM configurar a extensão de navegador.
Gostaria de ouvir relatos de pessoas que começaram com o Cursor chat e evoluíram para um workflow melhor. Tenho curiosidade para saber se o tempo investido em planejamento valeu a pena, se as alucinações diminuíram e se, no geral, isso economizou tempo.
Este artigo explica como usar LLMs da forma correta. Muita gente não pratica o suficiente a comunicação eficaz com modelos de linguagem. O autor domina a comunicação com LLMs, e esse workflow maximiza a eficiência.
Para maximizar a eficiência em um workflow com LLMs, é preciso ter digitação rápida, bom senso e familiaridade com os pontos fortes e fracos de cada modelo.
Ferramentas de programação com LLM são divertidas, mas, para verificar se realmente ajudam, é preciso definir metas concretas e prazos. LLMs tendem a falhar nessas condições.
Muitos programadores iniciantes esquecem a parte de especificação e plano de execução da programação. Para usar LLMs com sucesso, é preciso fazê-los criar especificações e planos de execução.
Não entendo a expectativa em relação ao Claude. Em perguntas sobre Apache Spark, houve muitas alucinações. Quero entender por que o Claude seria melhor do que outros modelos.
Para desenvolvedores individuais, tudo bem, mas várias instâncias de LLM analisando a mesma base de código em equipe podem não ser econômicas e podem ser arriscadas. Gostaria de saber se existe algum produto que ofereça contexto centralizado para equipes.