Grandes projetos sempre falham... A Anthropic está resolvendo isso

AAI LABS
컴퓨터/소프트웨어창업/스타트업AI/미래기술

Transcript

00:00:00Hoje em dia, lançar pequenos projetos tornou-se muito fácil, mas os agentes começam a falhar no momento
00:00:04em que a base de código cresce e ganha múltiplas dependências. O problema torna-se ainda pior se
00:00:09estiver a trabalhar com linguagens pouco convencionais, onde erros e problemas se tornam ainda mais difíceis de rastrear.
00:00:14O que as pessoas ignoram é que é preciso dar os passos certos antes de pôr os agentes a trabalhar em grandes bases
00:00:19de código, e é exatamente sobre isso que a Anthropic fala aqui. Eles abordam como lidar
00:00:23com projetos quando estes escalam. Foi muito esclarecedor, porque são coisas que nós próprios temos
00:00:28usado nos nossos projetos e consideramos bastante úteis. Antes de entrarmos em detalhes sobre como configurar
00:00:33um projeto à grande escala, vamos primeiro entender como os agentes navegam pelo
00:00:38código em geral. Existem duas formas de o fazerem. A primeira é baseada em RAG. Funciona ao incorporar
00:00:43toda a base de código e recuperar os fragmentos relevantes no momento da consulta. Com base na sua pesquisa, executa
00:00:48uma pesquisa semântica que corresponde à sua consulta com o código na sua base de dados. A partir das correspondências de similaridade,
00:00:53carrega esse contexto específico para o modelo analisar e continuar a trabalhar. Isto pode funcionar para
00:00:58aplicações de pequena escala, mas não se sustenta em aplicações de grande escala. Isto acontece porque existe uma base de dados central
00:01:03que mantém os dados, e se existirem muitos ficheiros na base de dados, a correspondência semântica
00:01:08pode ser problemática. É esta a razão pela qual os agentes de codificação alucinam módulos que já não existem.
00:01:14Exatamente por causa destes problemas, a abordagem baseada em RAG foi completamente substituída. O outro
00:01:18tipo é a navegação baseada no sistema de ficheiros, que é o que o Claude Code e a maioria dos outros agentes utilizam agora. Isto
00:01:24é semelhante à forma como os programadores navegam realmente. O agente usa comandos bash, encontra ficheiros
00:01:29com o comando ls, depois usa grep para reduzir ao snippet de código exato que precisa e carrega isso
00:01:34para o contexto. As ferramentas bash funcionam porque não poluem a janela de contexto com snippets desnecessários.
00:01:39Portanto, este modo lida com todas as formas como os sistemas baseados em RAG falhavam, e quase todos
00:01:44os agentes de codificação navegam agora desta forma. O ponto aqui é que, por mais que os modelos estejam a melhorar
00:01:49por si próprios, o modelo isolado não determina a qualidade do código que será capaz de produzir.
00:01:54Algo ainda mais importante quando se trata de sistemas funcionais é o “harness” (estrutura de suporte) que utiliza
00:01:59para programar. Portanto, qualquer ferramenta que utilize, seja Claude Code, Codex ou Gemini CLI, o resultado que
00:02:05obtém não é definido apenas pelos seus modelos poderosos. Depende também do “harness” que combina com as
00:02:10capacidades do modelo. Se o “harness” for fraco e o modelo for forte, não faz sentido o modelo
00:02:15ser forte por si só. Agora, sabemos que agentes como o Claude Code e o Codex têm “harnesses” inerentes fortes,
00:02:19mas isto não significa que tenha de depender inteiramente deles. Precisa de configurar um “harness”
00:02:24adaptado diretamente ao seu projeto para que se adeque melhor. Existem também “harnesses” de código aberto
00:02:29como os superpowers e pode usar qualquer um deles quando está a construir algo, mas quando está
00:02:33a desenvolver um projeto de grande escala, estes “harnesses” podem não ser suficientes e terá de configurar
00:02:38o seu próprio de qualquer maneira. Cada “harness” de agente que constrói por conta própria ou retira de chats partilhados contém
00:02:42cinco peças centradas em como os trabalhos e loops agenticos do Claude estão configurados ambientalmente.
00:02:47Vamos passar por cada uma. A primeira peça no “harness” do agente é o ficheiro Claude.md, que é carregado
00:02:53no início da sessão e permanece na memória durante toda a sessão. Este ficheiro é muito
00:02:57importante porque dá ao Claude a base de conhecimento para a base de código. Já fizemos um
00:03:02vídeo separado sobre como escrever e estruturar um Claude.md adequado, que pode ver no canal.
00:03:07Quando a sua base de código cresce, o Claude.md torna-se crítico. Se não dedicar tempo a ele, o seu
00:03:12projeto está destinado a falhar à escala. Este ficheiro serve para convenções do projeto, conhecimento da base de código
00:03:17e os “do's and don'ts” (o que fazer e não fazer) que se aplicam a toda a base de código, não apenas a um aspeto. Isto
00:03:22pode ser bom se a sua base de código for pequena, mas torna-se um problema no momento em que escala para múltiplas
00:03:26arquiteturas. Portanto, colocar todos os aspetos do código num único ficheiro é altamente ineficiente. Distrai
00:03:32o agente com informação que ele não precisa no momento. É por isso que o Claude.md deve permanecer curto,
00:03:37idealmente com cerca de 300 linhas, e se estiver a executar um monorepo com múltiplas áreas, cada subdiretório
00:03:43deve ter o seu próprio Claude.md seguindo as mesmas regras. O agente carrega-o progressivamente quando trabalha
00:03:48nesse diretório, por isso, em vez de extrair tudo do ficheiro raiz, recebe instruções mais focadas
00:03:53dos ficheiros dos sub-repositórios. Este ficheiro não é algo que escreve uma vez e em que confia para sempre. Precisamos de
00:03:58o manter ativamente, não só à medida que o projeto evolui, mas também à medida que a inteligência do modelo evolui.
00:04:04Os princípios aplicáveis ao Sonnet 4.5 certamente não se aplicarão ao Opus. Os modelos mais recentes são
00:04:09treinados para superar padrões que falhavam em instruções anteriores. Portanto, dar as mesmas
00:04:14instruções a cada modelo apenas desperdiça tokens. Mas antes de avançarmos, vamos ouvir uma palavra
00:04:19do nosso patrocinador, CleanMyMac. Se trabalha com ferramentas de IA como nós, o seu Mac acumula silenciosamente lixo, builds antigas,
00:04:26cache, downloads corrompidos, e não repara até que comece a ficar lento. Executo o CleanMyMac todas as semanas e
00:04:31liberta mais de 15 gigas numa única verificação. É isso, um clique e o meu Mac ficou como novo outra vez. CleanMyMac
00:04:37é criado pela MacPaw, com notariação da Apple e é de confiança de mais de 29 milhões de pessoas há 17 anos. A funcionalidade de limpeza
00:04:42remove mais de 20 tipos de lixo, para que o seu sistema permaneça rápido sem precisar de supervisão. O SpaceLens mapeia
00:04:48o seu disco visualmente para que saiba o que está a consumir espaço. Até analisa o seu iCloud, Google Drive e
00:04:53Dropbox localmente em busca de ficheiros não sincronizados que desperdiçam armazenamento na nuvem. E deteta 99% dos malwares conhecidos através do
00:04:59Moonlock, para que o seu Mac permaneça limpo e seguro. O seu Mac deve acompanhar o seu ritmo, não o contrário.
00:05:03Use o código “AI Labs” para 20% de desconto e experimente o CleanMyMac gratuitamente durante sete dias. Agora, os “hooks” são
00:05:09outra coisa importante que ajuda ao trabalhar com estas grandes bases de código. São basicamente
00:05:14scripts que permitem ao agente realizar ações específicas com base em certas condições. Existem muitos tipos
00:05:19de “hooks” que pode configurar, geralmente escritos como scripts de shell que controlam o comportamento do agente. Por
00:05:23exemplo, pode configurar um “hook” de início de sessão que carrega a informação que deseja no início
00:05:28de cada sessão, como quais os ficheiros que o Claude deve carregar para contexto. Pode também usar um “hook” com código de saída
00:05:33também e alimentar a mensagem de erro de volta ao Claude para que ele possa iterar sobre isso. Os “hooks” pré-utilização de ferramentas são outro
00:05:38tipo. Sempre que o agente utiliza qualquer ferramenta que tenha configurado para o “hook”, ele executa os seus comandos.
00:05:43Pode usá-lo para impedir que o Claude edite ficheiros que não quer que ele toque. Mas um dos mais
00:05:48importantes é o “stop hook”, que é executado após o fim de uma sessão. Isto força o Claude a refletir sobre
00:05:53o que foi feito até agora. A partir daí, pode atualizar o Claude.md com as aprendizagens da sessão
00:05:58para que os mesmos problemas não voltem a acontecer. Também pode configurar “hooks” para linting, correr testes,
00:06:03e muitos outros propósitos. Todos estes, quando combinados, ajudam muito com bases de código de grande escala.
00:06:08Os “hooks” forçam o agente a fazer coisas com as quais deve ter cuidado, onde as instruções no Claude.md
00:06:13por si só podem não ser suficientes. As instruções no Claude.md podem ficar confusas no período de atenção do agente devido
00:06:19a demasiadas coisas em que se focar, mas os “hooks” forçam realmente o Claude a agir. A terceira peça no
00:06:23fluxo de trabalho são as habilidades (skills). É um conjunto de ficheiros skills.md e outros ficheiros agrupados que carregam a pedido em vez
00:06:29de estarem presentes em todas as sessões e as bloquearem desnecessariamente. As habilidades são importantes porque
00:06:34usam divulgação progressiva e são adaptadas para realizar uma tarefa específica necessária para o
00:06:40fluxo de trabalho. Elas expandem o conhecimento do agente sobre algo que ele já é capaz de fazer. Se
00:06:44colocar estas instruções no Claude.md, elas apenas consomem tokens desnecessários. As instruções específicas
00:06:49do projeto devem ir para as habilidades, porque carregam apenas quando o agente realmente precisa delas. Pode
00:06:54também limitar habilidades a caminhos específicos para que só se ativem na parte relevante do código
00:06:59e não bloqueiem o contexto fora dela. Por exemplo, se estiver a trabalhar na área de implementação,
00:07:04pode especificar o caminho desse diretório na descrição da habilidade, para que a habilidade nunca seja carregada quando
00:07:09estiver a trabalhar noutro lugar. Para configurar habilidades, basta invocar o criador de habilidades que agora vem integrado
00:07:14no Claude Code. Anteriormente, tinha de o obter de código aberto no GitHub; depois, responde às perguntas
00:07:19que ele faz durante a sessão de discussão. Terá uma habilidade adaptada às suas necessidades exatas,
00:07:23que pode aceder assim que reiniciar a sessão. Além de habilidades, pode também usar plugins. Plugins são um
00:07:29conjunto de habilidades, “hooks” e MCPs disponíveis como um único pacote descarregável e distribuível. Portanto,
00:07:34quem instalar este plugin terá exatamente o mesmo contexto e configurações disponibilizadas
00:07:39para o seu uso imediato. Então, se estiver a trabalhar numa equipa, criar os seus próprios plugins para distribuir
00:07:44pelos colegas torna-se muito importante. Se configurar todas as suas definições num só lugar, essa informação
00:07:49pode ser distribuída por toda a organização, para que os membros da sua equipa tenham o mesmo contexto que você. Pode
00:07:54fazê-lo criando os seus próprios plugins e gerindo-os, quer carregando-os manualmente ou sincronizando
00:07:59com um repositório GitHub. Pode instalar qualquer plugin usando o comando “plugin” e pode
00:08:03navegar no marketplace e instalar o que desejar. Pode também adicionar outros marketplaces usando
00:08:08o comando “add plugin marketplace”. O Claude Code também vem integrado com múltiplos plugins como
00:08:13design de front-end, revisão de código, simplificador de código, playwright e outros, todos do marketplace
00:08:18oficial do Claude. Pode usá-los diretamente no seu fluxo de trabalho e pode criar os seus próprios também.
00:08:22Os plugins importam especialmente para projetos de grande escala, porque muitas pessoas trabalham no mesmo projeto
00:08:27e distribuir o contexto entre elas é importante. Por isso, em vez de fazer com que cada pessoa descarregue habilidades
00:08:32e outros componentes separadamente, podem instalar o plugin diretamente. Além disso, se estiver a desfrutar do nosso
00:08:36conteúdo, considere pressionar o botão de “hype”, pois ajuda-nos a criar mais conteúdo como este e chegar
00:08:41a mais pessoas. Outra coisa que importa nos “harnesses” de agentes, mas que não é falada o suficiente, é
00:08:46LSP. O Language Server Protocol, ou LSP, é basicamente uma integração que dá ao agente o mesmo tipo
00:08:52de navegação que um programador tem num IDE. Existe um LSP para quase todas as linguagens de programação e
00:08:58pode ser desnecessário com as populares, mas torna-se crítico com as pouco convencionais. Dá
00:09:03ao agente inteligência sobre a linguagem de programação para que possa navegar na base de código da forma
00:09:08como um humano faz. Por exemplo, quando um humano quer encontrar uma função, verifica de onde essa função
00:09:13é importada, vai a esse ficheiro e verifica esse ficheiro para encontrar a definição da função. É assim
00:09:17que encontram realmente a fonte exata de que precisam. Sem LSP, o agente faz correspondência de padrões com base
00:09:22em texto e é provável que aterre no símbolo errado. Como mencionámos, o Claude Code usa a abordagem baseada
00:09:28no sistema de ficheiros com comandos bash, por isso, sem LSP, está apenas a fazer correspondência de padrões em nomes de ficheiros e texto,
00:09:33não a navegar com inteligência mais profunda. Agora, não presuma que o LSP não é necessário só porque o seu agente
00:09:38ainda não encontrou erros. Configure o LSP mesmo antes de começar a trabalhar no projeto. Configure-o para
00:09:44todas as linguagens que irá usar, mesmo antes de escrever qualquer código, para que o agente já tenha informação sobre
00:09:49como trabalhar com elas. Em vez de deixar o agente adivinhar padrões, instalar o LSP permite-lhe ler e editar
00:09:55código da forma como um programador pensa sobre isso, não apenas como texto. Agora, como já sabe, o MCP é usado para
00:10:00conectar o agente a ferramentas externas, mas pode também conectar os seus MCPs às ferramentas internas, fontes de dados,
00:10:05APIs ou outros sistemas do seu projeto que o agente não conseguiria alcançar de outra forma. Para isso, precisa
00:10:10de criar os seus próprios MCPs e torná-los disponíveis para que as pessoas na sua equipa os possam usar facilmente. Os MCPs
00:10:16são basicamente uma extensão à configuração existente, carregada sempre que são necessários, e as ferramentas que
00:10:20fornecem ficam então disponíveis para o agente usar. Se estiver a trabalhar numa base de código grande, pode construir
00:10:25MCPs que servem muitos propósitos, como agir como um guia de documentação, recuperar análises ou até
00:10:31deixá-lo fazer alterações através deles. Estes são úteis porque, se tiver a sua própria base de código, pode
00:10:35deixar o agente interagir naturalmente com informação interna, chamar ferramentas e fazer alterações lá
00:10:40em vez de andar às apalpadelas por documentação enorme. Isto dá ao agente acesso mais direto à
00:10:45informação e aos sistemas de que precisa. Mas para configurar um MCP, a configuração básica da aplicação já precisa de
00:10:51estar a funcionar. Se configurar o seu MCP antes disso, as coisas podem correr mal e a implementação do MCP pode
00:10:57falhar. Portanto, primeiro certifique-se de que a sua app está a funcionar corretamente, depois crie o MCP e deixe o agente
00:11:02interagir com o seu projeto com mais inteligência e melhor informação. Outra coisa que precisa de
00:11:06criar são subagentes. Os subagentes contêm janelas de contexto isoladas próprias e executam qualquer tarefa
00:11:12que lhes seja delegada pelo agente orquestrador principal, devolvendo apenas o resultado final ao pai.
00:11:17Esta é uma parte fundamental de um “harness” de agente, porque usar subagentes corretamente não bloqueia a janela de contexto
00:11:22e torna a utilização do contexto muito melhor, uma vez que não enchem o contexto do agente principal
00:11:28com informação de que ele não precisa. Os subagentes só correm quando invocados e depois devolvem as suas conclusões.
00:11:33O Claude cria subagentes por conta própria, mas pode configurar subagentes você mesmo também. Pode
00:11:38configurar as ferramentas e modelos que desejar para eles e fornecer instruções sobre como devem
00:11:42operar, criando agentes específicos para os seus próprios fluxos de trabalho. Pode também substituir os agentes
00:11:47existentes do Claude; por exemplo, pode criar o seu próprio agente cujas instruções substituem as existentes, como
00:11:52explorar, e fornecer uma descrição sobre como deve navegar pelo seu diretório. O próprio agente de exploração
00:11:57do Claude é generalizado para todos os tipos de bases de código, mas se configurar o seu, o personalizado
00:12:03substitui o padrão. Isto dá ao agente mais contexto sobre como os ficheiros no seu projeto estão
00:12:08estruturados, para que não desperdice tokens a navegar em ficheiros confiando apenas na informação do Claude.md.
00:12:13Portanto, pode fazer com que o agente principal controle toda a execução do projeto e confiar nos subagentes para o
00:12:18trabalho real. Os subagentes também ajudam porque pode paralelizar o trabalho deles através de delegação de agentes,
00:12:23o que torna o fluxo de trabalho muito mais suave e rápido do que fazer tudo sequencialmente.
00:12:28Existem mais algumas práticas que precisa de seguir ao navegar numa base de código grande.
00:12:32Isto é importante porque a capacidade do Claude de navegar numa base de código grande é determinada pela
00:12:36sua capacidade de encontrar o contexto certo. Portanto, garantir que o Claude obtém o contexto certo é
00:12:41importante para que o agente não obtenha muito pouco ou demasiado e se mantenha focado. Além de separar
00:12:46o ficheiro Claude.md, precisa de separar os testes para cada subdiretório em vez de os ter todos num
00:12:51só lugar. Desta forma, permanecem segmentados, evitam problemas de tempo limite quando muitos testes correm ao mesmo tempo e podem
00:12:56ser limitados mais eficazmente. Pode também criar um ficheiro de mapa da base de código que mapeie a estrutura do seu projeto.
00:13:01Se estiver a trabalhar com aplicações convencionais como React ou Next.js, pode saltar isto
00:13:06porque os agentes foram treinados extensivamente nelas. Mas com linguagens pouco convencionais como C++
00:13:12precisa de um mapa da base de código. Atua como um índice para o agente, deixando-o saber onde
00:13:16cada ficheiro vive, em vez de executar muitos comandos bash para reduzir até ao correto. Por último,
00:13:21mas mais importante, reveja a sua configuração a cada poucos meses à medida que o modelo evolui. Remova as instruções,
00:13:26“hooks” ou qualquer outra coisa que o modelo mais recente já não precise. Use ficheiros .ignore como .gitignore
00:13:32e .agentignore para que os ficheiros que não quer que o agente ou o controlo de versão toquem sejam deixados em paz.
00:13:37Desta forma, a sua configuração será capaz de se sustentar em aplicações de grande escala. Agora, os recursos para este
00:13:41vídeo podem ser encontrados no AI Labs Pro para este vídeo e para todos os nossos vídeos anteriores, de onde pode
00:13:46descarregar e usar para os seus próprios projetos. Se encontrou valor no que fazemos e quer apoiar o
00:13:51canal, esta é a melhor forma de o fazer. Os links estão na descrição. Isso leva-nos ao fim de
00:13:55este vídeo. Se gostaria de apoiar o canal e ajudar-nos a continuar a fazer vídeos como este, pode
00:14:00fazê-lo usando o botão “super thanks” abaixo. Como sempre, obrigado por assistir e vejo-o no próximo.

Key Takeaway

O escalonamento de agentes em grandes bases de código depende da transição da abordagem RAG para a navegação por sistema de ficheiros e da implementação de um harness robusto composto por Claude.md segmentado, hooks, skills e LSP.

Highlights

  • A navegação baseada no sistema de ficheiros, utilizando comandos bash como ls e grep, supera a abordagem RAG para agentes de codificação em grandes bases de código.

  • O ficheiro Claude.md deve manter cerca de 300 linhas e ser segmentado em subdiretórios para evitar a sobrecarga de contexto do agente.

  • Hooks funcionam como scripts de shell que forçam o agente a executar ações como reflexão pós-sessão e limitação de edição de ficheiros.

  • A integração de um Language Server Protocol (LSP) permite ao agente navegar na base de código com inteligência estrutural, similar a um programador humano.

  • Subagentes isolam janelas de contexto, permitindo a execução de tarefas específicas sem bloquear o agente orquestrador principal.

Timeline

Limitações da Abordagem RAG e a Navegação por Sistema de Ficheiros

  • A abordagem baseada em RAG falha em projetos grandes devido a problemas na correspondência semântica e alucinação de módulos.
  • Agentes como o Claude Code utilizam comandos bash para localizar ficheiros e trechos de código exatos.
  • A qualidade do código produzido depende mais do harness de suporte do que apenas do poder do modelo isolado.

Projetos em escala enfrentam desafios de rastreabilidade que o RAG, dependente de bases de dados centrais, não resolve eficientemente. A alternativa, usada atualmente pela maioria dos agentes, emula o comportamento humano ao usar comandos bash para navegar diretamente no sistema de ficheiros. Esta técnica evita poluir a janela de contexto com informações irrelevantes, garantindo maior precisão na manipulação do código.

Estruturação de um Harness Eficaz

  • O Claude.md serve como base de conhecimento, mas deve ser curto e distribuído em subdiretórios para evitar ineficiência.
  • As instruções do Claude.md precisam de atualização constante conforme a evolução dos modelos.
  • Um Claude.md ideal tem aproximadamente 300 linhas para manter o foco do agente.

O harness é a estrutura de suporte que combina com a capacidade do modelo. O componente central, Claude.md, deve ser tratado como uma documentação ativa e modularizada, onde cada subdiretório possui seu próprio ficheiro para fornecer instruções contextualmente relevantes, em vez de um único ficheiro raiz massivo.

Hooks, Skills e Plugins

  • Hooks permitem ações automatizadas, como reflexão após o fim da sessão e testes de linting.
  • Habilidades (skills) utilizam divulgação progressiva, carregando instruções apenas quando a tarefa específica exige.
  • Plugins permitem a distribuição de contexto e configurações padronizadas entre membros de equipa.

Enquanto o Claude.md fornece instruções, os hooks forçam ações concretas através de scripts de shell. As skills otimizam o uso de tokens ao serem carregadas apenas sob demanda, e os plugins consolidam habilidades e configurações em pacotes distribuíveis, garantindo consistência em equipas de desenvolvimento que trabalham na mesma base de código.

LSP, MCP e Subagentes

  • O Language Server Protocol (LSP) fornece inteligência de navegação estrutural, evitando erros de correspondência de padrões de texto.
  • MCP permite a integração do agente com fontes de dados e sistemas internos do projeto.
  • Subagentes delegam tarefas específicas, mantendo isoladas as janelas de contexto.

O LSP é fundamental para que o agente entenda a estrutura da linguagem e localize definições de funções corretamente. Os MCPs conectam o agente a APIs e documentação interna para facilitar interações, enquanto os subagentes permitem a paralelização de tarefas, delegando partes complexas do trabalho a agentes especializados que devolvem apenas os resultados necessários ao pai.

Melhores Práticas Adicionais

  • Segmentar testes por subdiretório previne problemas de timeout e melhora a eficiência do agente.
  • Um mapa da base de código é essencial em linguagens pouco convencionais para servir de índice.
  • Utilizar ficheiros .ignore protege ficheiros sensíveis contra alterações indesejadas pelo agente.

A manutenção contínua da configuração e a adaptação às novas versões dos modelos são cruciais para o sucesso a longo prazo. A organização metódica, incluindo a criação de mapas de projeto e o uso correto de mecanismos de ignorar, permite que o agente se mantenha focado em grandes bases de código sem degradar a qualidade do suporte oferecido.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video