O Loop ShadCN É A Melhor Solução Para Sua UI Quebrada

AAI LABS
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00A maioria de vocês já conhece o shad cn como uma das bibliotecas de interface mais usadas,
00:00:04mas usar um agente de IA para desenvolver com ela pode ser problemático.
00:00:07Se você está construindo páginas de destino simples,
00:00:10não terá grandes problemas,
00:00:11mas se está desenvolvendo um novo aplicativo ou implementando uma nova funcionalidade,
00:00:15as coisas quebram e quebram outras partes do aplicativo também.
00:00:18Mas isso não é novidade,
00:00:19esse problema já foi resolvido e é assim que os engenheiros constroem aplicativos atualmente.
00:00:23Os agentes de IA sempre testam o código que escrevem,
00:00:26mas esses agentes se tornam não confiáveis com contextos grandes.
00:00:29Portanto,
00:00:29precisamos de uma forma de garantir que os agentes completem o trabalho que lhes é dado.
00:00:33É aqui que entra o conceito de loops agênticos,
00:00:36e a Anthropic resolve isso usando o loop ralph.
00:00:38Para resolver meu problema de interface,
00:00:40tentei implementar o loop ralph e no início falhou completamente,
00:00:43mas logo aprendi que não era por causa do loop ralph,
00:00:45era por causa do processo que eu havia implementado com ele.
00:00:48Então o ralph é na verdade um novo plugin que foi lançado pela própria Anthropic,
00:00:52mas essa não foi uma de suas ideias originais,
00:00:54é baseado em uma técnica de outra pessoa e a Anthropic implementou e disponibilizou como código aberto.
00:00:59Basicamente,
00:00:59ralph é um loop e se você conhece os hooks do claud code,
00:01:02ele usa esses hooks de parada que rodam quando o claud para de gerar uma resposta.
00:01:06Assim que para,
00:01:07o agente de IA recebe seu arquivo de prompt inicial novamente e isso permite que ele melhore seu trabalho iterativamente.
00:01:12Agora aqui está a pergunta importante: quando ele realmente sai do loop?
00:01:16Existe algo chamado promessa de conclusão que pode ser qualquer palavra que você inserir.
00:01:20Quando o claud sente que sua tarefa está concluída,
00:01:22ele emite essa promessa sozinho.
00:01:24Por exemplo, neste caso a promessa é a palavra complete.
00:01:26Se a promessa está no prompt de retorno,
00:01:28então o loop não roda novamente.
00:01:30Então até que o claud emita uma promessa, ele não para.
00:01:32Isso garante que o claud não desista quando quiser.
00:01:35Depois de instalar o plugin,
00:01:36você terá três comandos: o comando do loop ralph,
00:01:38um comando de cancelamento e um comando de ajuda.
00:01:41No comando do loop você precisa fornecer o prompt que é alimentado ao agente repetidamente.
00:01:45Às vezes ele pode receber uma tarefa impossível que não consegue resolver e pode ficar preso em um loop infinito,
00:01:50então definir uma contagem máxima de iterações é uma prática muito boa.
00:01:54Vou deixar o link para o repositório abaixo porque eles têm algumas boas práticas recomendadas para os prompts que você pode dar ao loop ralph,
00:02:00mas neste vídeo vou discutir apenas os relacionados ao fluxo de trabalho de interface que vou mostrar.
00:02:05Então digamos que queremos implementar dois recursos neste aplicativo.
00:02:08Um é uma paleta de comandos onde adicionamos um menu para pesquisar pelo nosso aplicativo e executar outros comandos.
00:02:14Para garantir que esse novo recurso não quebre outras partes do aplicativo,
00:02:17você começaria com os testes.
00:02:19Isso é chamado de desenvolvimento orientado a testes.
00:02:21Se você não está familiarizado com isso,
00:02:23pode pedir ao claud code para configurar a estrutura de TDD para você,
00:02:27onde ele cria uma pasta de testes ponta a ponta,
00:02:29uma pasta de capturas de tela para verificar problemas de interface e o teste correspondente também.
00:02:34O outro recurso que vamos implementar é uma visualização em quadro no banco de dados,
00:02:38semelhante ao que o Notion nos permite fazer com seus bancos de dados.
00:02:41Se você entendeu,
00:02:42desenvolvimento orientado a testes é uma abordagem onde os testes são escritos antes do código ser implementado,
00:02:47mas isso significa que os testes iniciais sempre falharão.
00:02:50Então se estou implementando o recurso da paleta de comandos,
00:02:53não começaria simplesmente escrevendo o código para ele.
00:02:55Em vez disso,
00:02:56primeiro escreveria testes elaborados para ele.
00:02:58Então escrevemos a quantidade mínima de código necessária para passar nesses testes.
00:03:02Quando isso está feito,
00:03:03refatoramos e adicionamos mais funcionalidades,
00:03:05e a cada adição garantimos que os testes ainda passem.
00:03:08Outra coisa interessante é que esses testes são automatizados e o playwright pode ser importado e usado para verificação visual.
00:03:14Se você pensa que estamos usando o MCP do playwright para verificar isso autonomamente através do navegador,
00:03:19está enganado.
00:03:19Com TDD,
00:03:20para cada comportamento funcional você pode tirar capturas de tela.
00:03:23Por exemplo,
00:03:24se o comportamento funcional é adicionar um cartão,
00:03:26então a captura de tela mostraria um cartão adicionado ao quadro.
00:03:29Então agora tudo que o agente de IA precisa fazer é olhar essas capturas de tela e garantir que não há problemas na forma como esses componentes shad cn foram implementados.
00:03:37Esses arquivos de teste garantem que sempre que algo novo é adicionado ou enquanto um recurso está sendo construído,
00:03:43todos os nossos requisitos comportamentais são atendidos.
00:03:45Mas no nosso caso queremos usar as capturas de tela puramente para verificação de interface.
00:03:50Mas se já temos TDD, por que precisamos do loop ralph?
00:03:52Como já mencionei,
00:03:53com tarefas maiores e janelas de contexto ficando quase cheias,
00:03:56esses modelos desistem abruptamente de suas tarefas e exigem entrada humana constante.
00:04:00Portanto,
00:04:00posso ter testes escritos antecipadamente para qualquer tipo de função que eu queira,
00:04:04então usar o loop para instruí-lo sobre o que fazer e ele pode trabalhar autonomamente,
00:04:08dizendo a ele qual fluxo de trabalho seguir e então dando a condição para quando ele pode emitir a promessa.
00:04:14Ele completa a tarefa e sai do loop,
00:04:15que neste caso é quando passa em todos os 25 testes únicos.
00:04:18Então usando o comando de barra ralph,
00:04:20dei a ele um prompt para que construísse iterativamente o recurso da paleta de comandos.
00:04:24No prompt estávamos basicamente dizendo para ele implementar o recurso junto com alguns requisitos básicos que não são realmente importantes porque os requisitos podem ser encontrados nos testes também,
00:04:33mas delineamos todo o fluxo de trabalho.
00:04:35Nesse fluxo de trabalho,
00:04:36ele deveria começar rodando os testes.
00:04:38Ele sabe que os testes vão falhar e depois disso precisa implementar os componentes para fazê-los passar.
00:04:43Então esse é o objetivo geral.
00:04:45Agora se essa fosse uma tarefa muito mais ampla,
00:04:47as chances são de que quando a janela de contexto encher ou o claud ficar confuso,
00:04:51ele desistirá automaticamente.
00:04:52Ele nunca emitirá a promessa de conclusão e como nunca emite a promessa,
00:04:55o prompt será alimentado de novo e ele terá que começar tudo de novo,
00:04:59o que significa que continuará trabalhando nisso iterativamente.
00:05:02Mas como essa era uma tarefa menor,
00:05:03ele foi capaz de implementar tudo de uma vez,
00:05:05escrever todos os componentes e fazer todos os testes passarem.
00:05:08Agora depois que os testes passam,
00:05:10o fluxo de trabalho diz a ele para revisar todas as capturas de tela da paleta de comandos.
00:05:14Estas são capturas de tela tiradas em diferentes estágios para garantir que a interface,
00:05:18seja shad cn ou qualquer outra biblioteca de componentes que você esteja usando,
00:05:22esteja implementada corretamente e que não haja problemas menores.
00:05:25Depois disso,
00:05:26ele deve rodar os testes novamente e garantir que ainda passem após as mudanças de interface.
00:05:30Como todos os testes estavam passando e as capturas de tela foram revisadas,
00:05:34ele emitiu a promessa de conclusão.
00:05:35É aqui que o loop parou e não continuou novamente.
00:05:38Mas havia um problema realmente grande com isso que eu não notei no recurso da paleta de comandos porque havia muito poucas chances de erros de interface.
00:05:45No entanto,
00:05:45quando passei a implementar a visualização em quadro,
00:05:48percebi que havia um erro enorme no sistema.
00:05:50Comecei implementando o quadro com o mesmo prompt.
00:05:52Os requisitos eram diferentes,
00:05:54claro,
00:05:54mas o fluxo de trabalho era praticamente o mesmo.
00:05:57Agora fiquei meio surpreso quando ele completou todos os requisitos de uma vez.
00:06:00Não me entenda mal,
00:06:01ele estava realmente garantindo que todos os testes estavam passando,
00:06:04mas enquanto fazia isso havia casos em que o número de testes bem-sucedidos na verdade diminuía porque ao mudar algo ele quebrava outra coisa e é por isso que TDD é realmente importante por causa desse teste recursivo e garantir que tudo funciona.
00:06:16Mas o principal problema era que depois que ele havia verificado que estava pronto e eu fui verificar a interface,
00:06:21a maioria das coisas estava implementada corretamente,
00:06:24mas ele havia perdido completamente alguns erros de interface como este.
00:06:27Também verifiquei as capturas de tela e os erros estavam aparecendo nessas capturas também.
00:06:31Então perguntei a ele e analisamos o que realmente deu errado.
00:06:34O problema real era uma falha de processo,
00:06:36especificamente em termos de corrigir a interface.
00:06:39O que aconteceu foi que ele passou em todos os testes porque deveria rodar os arquivos de teste repetidamente,
00:06:44mas não havia teste específico para a interface além das capturas de tela.
00:06:47Ele deu uma olhada rápida em algumas delas e até ignorou alguns dos erros de interface que havia visto.
00:06:52Alguns arquivos foram completamente ignorados.
00:06:54Então o principal problema era que ele emitiu sua declaração de promessa prematuramente e não verificou se a interface estava realmente corrigida.
00:07:01Passamos por toda uma sessão de brainstorming sobre como poderíamos corrigir isso e até dei as melhores práticas de escrita de prompt do repositório ao clod code,
00:07:09mas no final chegamos a algumas regras específicas e uma mudança no processo que garantiria que a interface estivesse sempre correta.
00:07:15Agora isso não tinha nada a ver com os testes porque eles sempre vão rodar.
00:07:18O prompt que usamos para a paleta de comandos é realmente útil quando o recurso ou implementação é muito grande,
00:07:24onde o clod não alucina que completou a tarefa,
00:07:26mas em vez disso devido a uma janela de contexto cheia ou à complexidade da tarefa,
00:07:30ele desiste abruptamente.
00:07:31Agora o clod code já é realmente autônomo,
00:07:33não há dúvida sobre isso,
00:07:34mas ainda há problemas como este que precisamos corrigir.
00:07:37Então mudamos várias coisas no prompt principal.
00:07:39A primeira foi o protocolo de verificação de capturas de tela.
00:07:42Adicionamos um prefixo simples a cada imagem que dizia ao clod se ele havia lido a captura de tela ou não.
00:07:47Mas quando implementei isso pela primeira vez,
00:07:49ele ainda não lia todas as imagens.
00:07:51Ele lia algumas,
00:07:52escrevia verified em cima delas e assim como antes desistia cedo.
00:07:55Então para resolver isso o encorajamos a pensar de uma forma diferente.
00:07:58Dissemos a ele que depois de renomear todas as capturas de tela,
00:08:01não deveria emitir a promessa ainda,
00:08:03ou seja,
00:08:03não deveria considerar a tarefa concluída e deveria deixar a próxima iteração confirmar a conclusão.
00:08:08Então pelo menos dois loops deveriam rodar.
00:08:10O que acontece na próxima verificação é que o clod verifica se todos os arquivos têm o prefixo verified.
00:08:15Claro que isso significava que tínhamos que mudar os testes e separar a verificação de imagem dos testes funcionais.
00:08:20A próxima iteração garante que todas as imagens tenham resultados verificados e se o clod perder alguma,
00:08:25ele olha para elas novamente e corrige a saída.
00:08:27Com essa mudança,
00:08:28os pequenos erros de interface que estávamos enfrentando finalmente foram corrigidos e ele foi capaz de implementar todos esses recursos corretamente.
00:08:35Então quando entrou no próximo loop,
00:08:37rodou os testes novamente.
00:08:38Como encontrou alguns erros,
00:08:39os corrigiu e porque todos os arquivos tinham a palavra verified neles,
00:08:43rodou um teste final.
00:08:44Desta vez completou sua tarefa em dois loops e foi capaz de corrigir todos os principais erros de interface no aplicativo.
00:08:49Vamos falar sobre a Automata agora.
00:08:51Depois de ensinar milhões de pessoas como construir com IA,
00:08:54começamos a implementar esses fluxos de trabalho nós mesmos.
00:08:57Descobrimos que podíamos construir produtos melhores mais rápido do que nunca.
00:09:00Ajudamos a dar vida às suas ideias,
00:09:02sejam aplicativos ou sites.
00:09:03Talvez você tenha assistido nossos vídeos pensando: tenho uma ótima ideia,
00:09:07mas não tenho uma equipe técnica para construí-la.
00:09:09É exatamente aí que entramos.
00:09:10Pense em nós como seu copiloto técnico.
00:09:12Aplicamos os mesmos fluxos de trabalho que ensinamos a milhões diretamente ao seu projeto,
00:09:16transformando conceitos em soluções reais e funcionais sem as dores de cabeça de contratar ou gerenciar uma equipe de desenvolvimento.
00:09:23Pronto para acelerar sua ideia em realidade?
00:09:25Entre em contato em hello@automata.dev.
00:09:27Se você quiser apoiar o canal e nos ajudar a continuar fazendo vídeos como este,
00:09:30pode fazê-lo usando o botão super thanks abaixo.
00:09:33Como sempre, obrigado por assistir e te vejo no próximo..

Key Takeaway

O loop RALF da Anthropic combinado com desenvolvimento orientado a testes e verificação visual em múltiplas iterações resolve o problema de agentes de IA que implementam interfaces ShadCN quebradas ou incompletas.

Highlights

O loop RALF da Anthropic resolve o problema de agentes de IA que desistem prematuramente em tarefas complexas com ShadCN UI

Desenvolvimento Orientado a Testes (TDD) é essencial para garantir que novos recursos não quebrem outras partes do aplicativo

O loop RALF usa hooks de parada que realimentam o prompt inicial ao agente, permitindo trabalho iterativo até emitir uma 'promessa de conclusão'

Verificação visual com Playwright e capturas de tela automatizadas detecta erros de interface que testes funcionais podem perder

Um protocolo de verificação de capturas de tela com prefixos 'verified' e múltiplas iterações obrigatórias previne conclusão prematura de tarefas

A combinação de TDD, loop RALF e verificação visual em duas etapas corrige efetivamente erros de interface em aplicativos ShadCN

Timeline

O Problema com Agentes de IA e ShadCN UI

O vídeo apresenta o problema central: embora o ShadCN seja uma das bibliotecas de interface mais populares, usar agentes de IA para desenvolver com ela é problemático. Páginas de destino simples funcionam bem, mas ao desenvolver aplicativos complexos ou implementar novas funcionalidades, as coisas quebram e afetam outras partes do aplicativo. Os agentes de IA testam o código que escrevem, mas se tornam não confiáveis com contextos grandes. A solução apresentada envolve o conceito de loops agênticos para garantir que os agentes completem o trabalho que lhes é dado.

Introdução ao Loop RALF da Anthropic

O loop RALF é explicado como um novo plugin lançado pela Anthropic, baseado em uma técnica de outra pessoa e disponibilizado como código aberto. Funciona usando hooks de parada do Claude Code que são executados quando o Claude para de gerar uma resposta. Assim que para, o agente de IA recebe seu arquivo de prompt inicial novamente, permitindo que melhore seu trabalho iterativamente. O conceito de 'promessa de conclusão' é introduzido - uma palavra específica que o Claude emite quando sente que sua tarefa está concluída, fazendo com que o loop pare de executar.

Comandos e Boas Práticas do Loop RALF

Após instalar o plugin, três comandos ficam disponíveis: o comando do loop RALF, um comando de cancelamento e um comando de ajuda. No comando do loop, é necessário fornecer o prompt que é alimentado repetidamente ao agente. Uma prática recomendada importante é definir uma contagem máxima de iterações, pois o agente pode receber uma tarefa impossível e ficar preso em um loop infinito. O apresentador menciona que o repositório contém boas práticas para prompts, mas o vídeo focará especificamente no fluxo de trabalho de interface.

Desenvolvimento Orientado a Testes (TDD) como Fundação

Dois recursos de exemplo são introduzidos: uma paleta de comandos e uma visualização em quadro no banco de dados. O desenvolvimento orientado a testes (TDD) é apresentado como a abordagem fundamental, onde os testes são escritos antes do código ser implementado. O Claude Code pode configurar a estrutura de TDD automaticamente, criando pastas de testes ponta a ponta e capturas de tela para verificação de interface. Na abordagem TDD, os testes iniciais sempre falham, depois escreve-se o código mínimo necessário para passar nos testes, e finalmente refatora-se enquanto garante que os testes ainda passem.

Verificação Visual Automatizada com Playwright

O vídeo esclarece que não está usando o MCP do Playwright para verificação autônoma através do navegador. Em vez disso, com TDD, para cada comportamento funcional, capturas de tela são tiradas automaticamente. Por exemplo, se o comportamento funcional é adicionar um cartão, a captura de tela mostraria um cartão adicionado ao quadro. O agente de IA precisa apenas olhar essas capturas de tela e garantir que não há problemas na forma como os componentes ShadCN foram implementados. Esses arquivos de teste garantem que todos os requisitos comportamentais sejam atendidos sempre que algo novo é adicionado.

Por Que o Loop RALF É Necessário Junto com TDD

Embora TDD seja útil, o loop RALF ainda é necessário porque com tarefas maiores e janelas de contexto quase cheias, os modelos desistem abruptamente de suas tarefas e exigem entrada humana constante. Com testes escritos antecipadamente para qualquer função desejada, o loop pode instruir o agente sobre o que fazer para trabalhar autonomamente. O prompt define qual fluxo de trabalho seguir e a condição para emitir a promessa de conclusão. No exemplo dado, a promessa é emitida quando o agente passa em todos os 25 testes únicos.

Primeiro Teste: Implementação da Paleta de Comandos

Usando o comando /ralf, foi dado um prompt para construir iterativamente o recurso da paleta de comandos. O prompt incluía requisitos básicos e delineava todo o fluxo de trabalho: começar rodando os testes (que sabidamente falharão), depois implementar os componentes para fazê-los passar. Se fosse uma tarefa mais ampla, quando a janela de contexto enchesse ou o Claude ficasse confuso, ele não emitiria a promessa de conclusão e o prompt seria realimentado, fazendo-o continuar trabalhando iterativamente. Como era uma tarefa menor, o agente conseguiu implementar tudo de uma vez, escrever todos os componentes e fazer todos os testes passarem.

Descobrindo o Problema de Verificação de Interface

Após os testes passarem, o fluxo de trabalho instruía o agente a revisar todas as capturas de tela da paleta de comandos em diferentes estágios para garantir que a interface estivesse implementada corretamente. Depois deveria rodar os testes novamente para garantir que ainda passassem após as mudanças de interface. Como tudo estava correto, o agente emitiu a promessa de conclusão. No entanto, um problema grande não foi notado neste recurso porque havia poucas chances de erros de interface. Ao implementar a visualização em quadro com o mesmo prompt, um erro enorme no sistema foi revelado.

Análise da Falha no Sistema de Verificação

Na implementação do quadro, o agente garantiu que todos os testes estavam passando, mas havia casos em que o número de testes bem-sucedidos diminuía porque ao mudar algo quebrava outra coisa, demonstrando a importância do TDD. O problema principal era que após o agente verificar que estava pronto, a interface tinha erros significativos que apareciam nas capturas de tela mas foram ignorados. O agente passou em todos os testes porque deveria rodar os arquivos de teste repetidamente, mas não havia teste específico para a interface além das capturas de tela. Ele deu uma olhada rápida em algumas capturas, ignorou erros de interface e até pulou alguns arquivos completamente.

Solução: Protocolo de Verificação de Capturas de Tela

Após brainstorming sobre como corrigir o problema usando as melhores práticas do repositório, chegaram a regras específicas e uma mudança no processo. A primeira foi o protocolo de verificação de capturas de tela: adicionar um prefixo simples a cada imagem dizendo ao Claude se ele havia lido a captura ou não. Na primeira implementação, ele ainda não lia todas as imagens - lia algumas, escrevia 'verified' nelas e desistia cedo. Para resolver isso, o prompt foi modificado para encorajar o agente a pensar diferente: após renomear todas as capturas de tela, não deveria emitir a promessa ainda, deixando a próxima iteração confirmar a conclusão, garantindo pelo menos dois loops.

Validação em Duas Etapas e Resultados Finais

Na próxima verificação, o Claude verifica se todos os arquivos têm o prefixo 'verified'. Isso exigiu separar a verificação de imagem dos testes funcionais. A próxima iteração garante que todas as imagens tenham resultados verificados e se o Claude perder alguma, olha para elas novamente e corrige a saída. Com essa mudança, os pequenos erros de interface foram finalmente corrigidos e o agente implementou todos os recursos corretamente. No próximo loop, rodou os testes novamente, encontrou alguns erros, os corrigiu e porque todos os arquivos tinham a palavra 'verified', rodou um teste final. A tarefa foi completada em dois loops com todos os principais erros de interface corrigidos.

Promoção da Automata e Conclusão

O vídeo conclui com uma promoção da Automata, a empresa do apresentador que implementa esses fluxos de trabalho de IA para construir produtos. Após ensinar milhões de pessoas como construir com IA, descobriram que podiam construir produtos melhores mais rápido do que nunca. A Automata ajuda a dar vida a ideias, sejam aplicativos ou sites, servindo como copiloto técnico para quem tem ideias mas não tem equipe técnica. Aplicam os mesmos fluxos de trabalho ensinados a milhões diretamente aos projetos dos clientes, transformando conceitos em soluções funcionais sem as dores de cabeça de contratar ou gerenciar equipe de desenvolvimento. Informações de contato e agradecimentos encerram o vídeo.

Community Posts

View all posts