Agora, pessoal, a gente vai falar de um dos caras que eu mais gosto na hora que eu tô trabalhando com prompt. Obviamente, você não pode ter preferência por tipo de prompt, porque cada tipo de prompt tem um caso de uso, concordo com você. Mas quando eu falo que é um dos caras preferidos meus, de forma geral, é porque a ideia dele é fantástica e ela muda o jogo quando você está trabalhando aí. E eu vou explicar isso aqui para você agora, tá? Então, a ideia aqui é o Tree of Thoughts, tá? Ou T ou T. É uma extensão da técnica do Chain of Thoughts, ou seja, ele é uma variação do Chain of Thoughts, que ele permite que o modelo explore múltiplos caminhos de raciocínio paralelos ou alternativos antes de tomar uma decisão final, ao invés de ele tomar a ideia de um único raciocínio linear. Então, o Tree of Thoughts, ele ajuda a ramificar ideias para a gente poder avaliar a alternativa como se a gente estivesse construindo uma árvore de decisão. Galera, isso aqui, quando eu olhei isso, isso explodiu a minha cabeça, tá? Porque muitas vezes a gente pede algo pra IA e ela traz uma opção, mas não necessariamente essa opção é a melhor opção que a gente tem. opção que a gente tem. Então, o que a gente pode pedir pra IA? Pra ela trazer mais opções baseadas naquela situação, tá? Então, a grande sacada é isso. Existe, tá? Também papers, mas quando eu utilizo esse cara, quando a tarefa, ela é ambígua ou tem múltiplas soluções possíveis, então, se existe uma contradição naquela tarefa ou se ela pode ser interpretada de formas diferentes ou eu tenho várias formas de resolver o mesmo problema, que é o que mais acontece na nossa vida como desenvolvedor, né? Trabalhar aí com o Tree of Thoughts sem dúvida é uma baita opção. Uma outra coisa que é importante pra eu utilizar é quando eu quero comparar estratégias ou caminhos diferentes. Ou seja, eu quero ter diversas opções pra eu fazer essa comparação. E uma coisa interessante aqui também é quando a decisão final depende de múltiplos critérios ou trade-offs. Eu quero falar disso com você porque você vai entender o que ele tá querendo dizer com isso, tá? Às vezes eu tenho diversas opções, mas eu tenho que pedir pra ele uma resposta final. E quando eu dou essa resposta final, eu vou falar o critério que eu vou dar pra ele pra essa resposta final, tá? E uma coisa interessante é quando eu desejo simular um raciocínio mais humano deliberado ali com ponderações, como assim eu posso passar problemas, trade-offs eu posso pedir diversas formas pra ele pensar passo a passo e daí ele vai pensando, dando diversas opções baseado naqueles não necessariamente só critérios mas baseado naqueles tópicos que você está trazendo, tá? Aqui tem o famoso paper do Tree of Thoughts, que eu recomendo depois você dar uma olhada, que é um cara também super interessante, tá? Dê uma olhada nesse paper e aqui você começa a perceber, deixa eu aumentar bem a minha tela, a ideia interessante que esse cara acaba fazendo. Então, eu posso ter um input e um output. Eu tenho aqui o chain of thought, onde ele pensa passo a passo. Aqui, uma das coisas interessantes, e é um outro cara que eu vou falar depois com vocês, é o self-consistence. E aqui a gente tem o famoso Tree of Thoughts, tá? E esse Tree of Thoughts, olha só que cara interessante. Eu pergunto algo para ele, eu solicito algo para ele e ele pode me dar várias opções. Essas opções podem ter ramificação. E baseado nessas ramificações, ele começa a trazer para mim a resposta que mais faz sentido baseado nessas ramificações. Entende qual que é a linha de raciocínio? Caras, isso aqui muda completamente a forma como você trabalha com o IA, principalmente quando você, desenvolvedvedor está desenvolvendo um problema, você sabe que existem diversas opções, então você pode até pensar e informar essas possíveis essas possíveis soluções para ele fazer essa análise, ou às vezes você não sabe que você não sabe as outras possíveis soluções, então você pode apontar as que você sabe e ainda falar para ele trazer outras opções que normalmente são os seus pontos cegos. Eu gosto de escrever isso para a Yá, porque ela fala, cara, isso aqui são formas meio fora da caixa de resolver o problema. Então, essa imagem aqui, eu acho que ela resume bem para você entender a ideia principal aqui do Chain of Thoughts, não, do Tree of Thoughts. Então, voltando aqui, galera, vamos aprofundar um pouquinho mais aqui para a gente ver as coisas um pouquinho mais na prática. Então, eu tenho esse seguinte prompt. Você é um engenheiro de software, especialista em sistemas distribuídos, um cliente que quer limitar o acesso à sua API, que recebe até 100 mil requisições por segundo, gere múltiplas abordagens ou caminhos de raciocínio, ou um chain of thought, para resolver esse problema. Para cada abordagem, exponha os prós e contras. Ao final, selecione a mais adequada com base em escalabilidade, confiabilidade e latência. Então, algumas coisas que eu queria trazer aqui para a gente. Eu estou situando o cara, dando mais contexto, personificando o cara. Eu estou falando a minha necessidade, ou seja, eu estou falando o que eu tenho como necessidade. Agora, eu estou falando para ele usar múltiplas abordagens. Então, nessa sentença aqui, eu estou falando para ele, no final das contas, é trabalho com o Tree of Thoughts. Mas, ao mesmo tempo, eu estou pedindo para ele trabalhar passo a passo. Ou seja, entre parênteses, eu estou falando use para ele trabalhar passo a passo. Ou seja, entre parênteses, eu estou falando use o chain of thought. E agora, em que eu estou falando para ele, e aqui é um ponto importante, é para cada abordagem, expõe a prós e contras. Por que isso é importante? Para que a própria IA, ela veja o pró e contra do que ela mesmo está colocando e para que eu também tenha um tracking de prós e contras. Agora o interessante aqui com isso é, ao final selecione a mais adequada com base escalabilidade, confiabilidade e latência. Então o que que isso significa? Aqui eu estou pedindo para ela colocar pró e contra, uma vez que ela sabe os pró e contras, ela vai para a parte final, que é o critério então depois que ela trouxe tudo eu falo, agora baseado nesse critério dessas opções, onde eu tenho prós e contras, qual vai dar mais pontos de escalabilidade, confiabilidade e latência? Agora, ela vai olhar caminho por caminho com prós e contras, e baseado nesses caminhos com prós e contras, ela vai ver qual é o melhor para esses critérios. Se eu mudo o critério para falar com base em prever bursts de acesso de uma vez em relação à minha API, aí provavelmente o critério dela poderia ser diferente na resposta final. Então a resposta esperada que eu tenho aqui é caminho 1, token com bucket com Redis aí ele trabalha aqui, permite bursts controlados, fácil de implementar Redis pode ser um gargalo sob carga intensa, exige replicação scripts atômicos, então ele trouxe aqui pro e contra de uma forma geral, não escrevendo pro e contra, eu poderia usar um skeleton of thoughts falando pra ele utilizar exatamente tal formato de resposta e aí eu estaria combinando tree of thoughts, chain of thoughts e skeleton of thoughts. Olha só que interessante. Aqui ele traz o caminho 2, leak bucket com cache local, caminho 3, algoritmo slide and window log e aqui a avaliação dos caminhos. Escalabilidade, caminho 1 e 2 são melhores. Baixa latência, caminho 2 se destaca. Facilidade de manutenção, caminho 1 é mais consolidado. A escolha final é token bucket com Redis mais buffer local representa o melhor equilíbrio entre simplicidade, performance e tolerância. Então, aqui pra mim é uma ideia super interessante porque ele consegue fazer a ponderação baseada nos próprios caminhos e no encadeamento de pensamento que ele mesmo colocou, tá? Então, isso aqui é algo que muda a nossa vida na hora que a gente tá trabalhando, tá? Agora, com o Tree of Thoughts a gente tem algumas técnicas auxiliares, vamos dizer assim. Por exemplo, uma é a expansão controlada de caminhos, porque a gente limita a profundidade e número de alternativas para evitar dispersão, porque dependendo da forma como eu peço para ele pensar, eu posso fazer uma espécie de recursividade onde ele vai fazendo o tree of thoughts, do tree of thoughts, do tree of thoughts, onde a gente tem uma árvore extremamente complexa de possibilidades. E quando isso acontece, obviamente a gente começa a ter dispersão. Então, uma das formas que eu posso falar é apresente no máximo três caminhos distintos para resolver esse problema e desenvolva até dois níveis de subetapas para cada um. Quando eu falo isso, ele vai pegar cada caminho e em cada caminho desse ele vai poder quebrar eventualmente mais dois caminhos, entre aspas. Outra coisa importante, critérios de decisão explícita. Guie o modelo com parâmetros como menor custo, maior confiabilidade, que é o que eu falei. Basicamente, pense nos critérios para que ele te dê uma resposta mais interessante. Então, por exemplo, para cada abordagem proposta, avalie com base em custo, latência, escalabilidade, escolha a melhor com base nesses critérios. E o outro ponto interessante aqui é reavaliação iterativa. O que significa? O modelo pode revisar suas escolhas se uma nova ramificação se mostrar superior. Por exemplo, depois de explorar todas as opções, reavalie as decisões com base nos resultados observados em cada caminho e corrija se necessário. Aqui você realmente está pedindo explicitamente para, depois de ele trazer tudo, ele reavaliar tudo o que ele fez. Então, você consegue entender, pessoal, o que ele fez. Então, você consegue entender, pessoal, o poder que isso dá nas nossas mãos, principalmente na nossa área onde nós temos diversas possibilidades para resolver o mesmo problema e ter os prós e contras, as ponderações, pedir para ele gerar o equilíbrio do que a gente está querendo como resultado final, isso aqui muda completamente o nosso jogo quando a gente está falando em Tree of Thoughts, tá? Então, eu consigo também, como eu falei pra você, fazer combinação com outras técnicas, ou seja, Tree of Thoughts, Chain of Thoughts e Skeleton of Thoughts. Ou seja, o of thoughts, chain of thoughts e skeleton of thoughts. Ou seja, o tree of thoughts é altamente compatível com as outras estratégias de prompting, resultando em maior controle, completude e escalabilidade. Então vamos dar um exemplo aqui embaixo dos caras combinados. Olha só que interessante. Você é um engenheiro de software em sistemas distribuídos. Sua tarefa é projetar uma solução de rate limiting para uma API que suporta 100 mil requisições por segundo. Apresente três estratégias distintas, usando o seguinte esqueleto para cada uma. Visão geral abordagem, etapas detalhadas do raciocínio, ou seja, pense passo a passo como o engenheiro resolveria isso em produção. Principais vantagens, principais desvantagens quando utilizar essa abordagem. Ao final, decida qual abordagem representa o melhor equilíbrio para cada caso proposto. E olha só que interessante. Aqui, apresente três estratégias. Tree of Thoughts, tá? Usando o seguinte esqueleto, ou seja, Skeleton of Thoughts. E etapas detalhadas de raciocínio, pense passo a passo, chain of thoughts aqui dentro. Então, você consegue perceber como, num simples parágrafo, a gente consegue combinar técnicas diferentes e que, no final das contas, dá um baita de um superpoder. Olha esse tipo de resposta por exemplo estratégia um toque em bucket visão geral permite pequenos bus burst a etapas de escrever o uso de token a bucket script luas atômicos que é local vantagem popular desvantagem uso ideal então aqui ele está trazendo as etapas e o mais interessante é que nas etapas ele começa a trazer aqui o raciocínio. Ele descreve isso, ele tem as equipas atuais, ele trabalha com o cache local. E aqui a gente vai tendo esse tipo de resultado e ele traz aqui para mim que a estratégia 1 oferece o melhor equilíbrio e etc. E o interessante de você trabalhar dessa forma é que você pode testar isso em diversos modelos diferentes, com empresas diferentes e coisas desse tipo. Então, isso aí é super interessante, porque a gente consegue trabalhar. Um ponto importante que eu quero trazer aqui para vocês, pessoal, é que sempre essa resposta esperada como um resumo é somente para ficar melhor aqui no meu querido, na minha apresentação, tá? Mas se a gente fosse ver isso na prática, eu poderia ver como é que isso fica. Por exemplo, eu vou copiar esse cara, vou aqui no meu chat GPT, por exemplo, vou colar esse cara, tá? Aqui é o esqueleto, somente para a gente deixar claro aqui, né? Principais vantagens, principais desvantagens, quando usar essa abordagem, e aqui ao final traga isso aqui para mim. Então, eu vou enviar isso aqui, e vamos ver como é que ele vai trazer esse tipo de resposta aqui pra mim nesse momento. Então, olha só que interessante. Estratégia, aqui ele dá a visão geral, e aqui, galera, olha só que interessante que é a parte mais legal, que é a etapa detalhada com raciocínio. Ou seja, é a parte do chain of thoughts. Então ele pensa para fazer isso, define o limite, armazena no Redis, cria uma lógica de reabastecimento, cada requisição verifica se há tokens, se sim, etc, usa TTL, testes automatizados com injeção de carga para verificar a consistência, e daí ele já vai para a principal vantagem, desvantagem, abordagem e tudo mais. E aí ele vai trazendo as outras estratégias. Olha só. Olha só que interessante. E depois a conclusão. Estratégia 1, por tais motivos. Estratégia 2, pode ser usada como fallback. E o interessante é que essa conclusão, eu o interessante é que essa conclusão, eu também posso escolher essa conclusão com o skeleton of thought para garantir que a minha conclusão também tenha uma estrutura final da forma como eu quero. Mas dá para perceber, pessoal, o quão animal é você ver com um prompt extremamente simples nós termos uma resposta extremamente completa e ainda com uma linha de raciocínio para que você consiga tomar diversos tipos de decisão. Quando eu falo de prompt engineering, galera, é disso que eu estou falando. Perceba que na maioria das vezes a gente fica no zero shot, one shot few shot, tá agora isso aqui muda realmente a forma de a gente trabalhar, maravilha pra gente voltar aqui, né, em relação a resumo, apesar desse vídeo tá ficando bem grande eu tenho aqui comparativo com as outras técnicas. Então, vamos partir a comparação a partir do Tree of Thoughts. Requer estrutura parcial. Por que eu estou dizendo parcial? Porque esse cara, apesar de estar utilizando o Tree of Thoughts, no final eu não dei estrutura para ele. Raciocina passo a passo? Sim, ele acaba raciocinando passo a passo porque eu tô pedindo no final das contas diversas opções, tá? Mas, tá? Ele tem essa possibilidade. Gera múltiplas alternativas? Sim. É ideal para decisão entre estratégias brainstorming também estruturados. Tá? Então, isso aqui é bem legal, se você quer fazer brainstorming, você também pode ter múltiplas alternativas para você conseguir rever. Beleza? Então, essa é a ideia aqui que a gente tem do Tree of Thought, espero que você tenha curtido aí.