E agora, pessoal, chegou a hora da gente se movimentar e ir para o próximo tipo, né? Nos vídeos passados a gente falou de Zero Shot Learning e agora a gente vai falar em conjunto de One Shot ou Few Shot, tá? Então, eu vou sempre trazer aqui falando muito mais em Few Shot, mas você vai entender a diferença dos dois e daí já vai ficar bem mais claro, tá? Então é o seguinte, few shot prompting é uma técnica onde fornecemos um pequeno número de exemplos, normalmente entre um e cinco, para que o modelo entenda o padrão de entrada e saída antes de gerar uma nova resposta. O modelo, ele aprende apenas com base nos seus exemplos dentro do próprio prompt, sem qualquer retreinamento. Então, o mais interessante aqui do one shot ou do few shot, aqui eu tô falando de um a cinco exemplos, quando é um exemplo a gente tá falando em one shot, quando a gente tá falando em mais de um, a gente tá falando em few shot, tá? Mas o mais interessante é que se você vai perceber, é que no mesmo prompt onde você declara o que você quer, nesse mesmo prompt onde você declara o que você quer, nesse mesmo prompt você, entre aspas, ensina a IA. Então você treina a sua IA em tempo de execução. Obviamente os modelos já são treinados, mas quando você, entre aspas, treina, você explica algo para ela, aí o nível de resultado vai ser muito mais preciso, porque ela vai aprender com o que você ensinou, nem que seja ali num pequeno prompt, legal? Então, qual que é a ideia aqui do estudo? Ela é uma técnica formalizada também, num artigo onde fala language models are few short learners, basicamente aquele mesmo paper que eu trouxe pra vocês, num artigo onde fala Language Models are Few Shot Learners. Basicamente, aquele mesmo paper que eu trouxe para vocês, porque nesse paper ele faz, inclusive, as comparações de Zero Shot, One Shot e Few Shot. Então, é o mesmo link do paper, mas eu estou deixando aí para vocês. Quando que a gente utiliza? Quando a tarefa tem múltiplas formas de execuções válidas e você deseja orientar o estilo da resposta. Afinal de contas, como que a gente pode fazer algum cálculo ou algum resultado na hora de trabalhar com algoritmo? Sei lá, vou fazer um sort, vou fazer uma ordenação. Existem várias formas de eu trabalhar. Agora, como eu tenho várias formas de trabalhar, eu posso dar exemplos de como que eu quero que aquele tipo de solicitação seja respondida, ou seja, eu consigo orientar a ideia da resposta, tá? O modelo, ele comete erros ou ele se comporta de forma inconsistente em zero shot. O que que significa? Muitas vezes a gente utiliza a técnica de zero shot, mas cada vez ele dá respostas muito diferentes, ou cada vez ele começa a fazer erros cada vez mais bizarros em como que ele vai responder aquilo pra você. Então, quando você começa a ter respostas muito ruins e muito rasas, ou até mesmo respostas que acabem, às vezes, não fazendo tanto sentido, uma forma de evitar fazer a IA errar feio ali com você é você conseguir dar exemplo. Afinal de contas, inclusive, a gente aprende, por exemplo. Se alguém pedir para mim responder algo e ele dá um exemplo, uma referência, é muito diferente. A mesma coisa é uma arquitetura de referência. Ou seja, eu quero criar a arquitetura do meu software, eu não vou copiar e colar arquiteturas, porque eu não acredito que existem arquiteturas que servem para todos os casos, mas eu posso usar uma arquitetura de referência para ter uma base na hora de criar a minha. E é exatamente o que acontece com on-shot e few-shot, tá? Outro ponto, quando que eu utilizo? Quando a tarefa é relativamente complexa e específica e pode se beneficiar, né? Pode se beneficiar de demonstrações diretas. Ou seja, quando eu falo relativamente complexa, eu não estou querendo dizer para ela fazer uma tese e fazer cálculos extremamente, mas muitas vezes eu tenho uma tarefa que não é tão simples de resolver. Às vezes eu tenho uma tarefa que eu espero tipo de resultados e acaba sendo mais complexo, inclusive, eu explicar pra ela como que eu quero aquilo. Então, quando você dá exemplos, o que que começa a acontecer? Vai ficando mais fácil pra ela entender do que você tá falando, tá? Outra coisa que acaba meio que trazendo exatamente o que eu acabei de falar é quando eu preciso replicar padrões linguísticos, técnicos ou formais, né? então eu vou gerar uma documentação e eu dou um exemplo, por exemplo de como que é o estilo de linguagem, de como que ela deve escrever naquela documentação por exemplo, eu posso chegar e falar o seguinte, olha, responda formalmente esse e-mail. E ela vai lá e faz uma resposta com uma formalidade que não é muito a sua cara. Aí você pega um e-mail formal que na sua opinião é formal e cola com o exemplo. E aí ela vai conseguir falar, agora eu entendi o que ele tá querendo dizer com o formal. Porque existem palavras que acabam sendo subjetivas, né? Então porque existem palavras que acabam sendo subjetivas. Então, olha, escreva um poema triste. Agora, o que é o nível de intensidade de tristeza para cada um? Entendeu? Então, novamente, está aqui o link do paper aqui para vocês. Ainda aqui em one shot, em few shots, a gente tem vantagens. Quais são as vantagens? Eu tenho mais precisão, porque os exemplos, eles me ajudam, né? O modelo a compreender as nuances da minha tarefa. Ele me ajuda a ter um estilo mais consistente, ou seja, é mais útil pra gerar código e documentação como padronização, mas entenda, preste bem atenção, consistência de estilo. Estilo não significa padrão. E o porquê que eu estou dizendo isso? Apesar de eu conseguir gerar daquela forma. Então a gente fala muito mais nesse caso de estilização, que é uma espécie de uma padronização. Você vai perceber que existem outros tipos de prompts que você escreve, tá? Para sim gerar um resultado muito mais claro, padronizado e esperado, tá bom? Outra coisa, pouco curso de engenharia, mais simples do que treinar modelo. É muito mais simples eu dar alguns exemplos naquilo que eu quero, do que eu pegar um banco de dados de exemplos, né? E eu conseguir fazer fine-tuning em cima do modelo. Então, existem técnicas de fine-tuning para eu treinar o modelo. Inclusive, sei lá, se eu pegar a OpenAI, ela tem formas de você fazer fine-tuning, onde você treina o modelo para ele conseguir te ajudar melhor. Mas, é muito caro fazer isso. Então, com alguns exemplos, às vezes já vai resolver o seu problema. Limitações. Custo em tokens. Quanto mais exemplo eu tenho, mais token eu gasto e o que acontece? Existem modelos específicos que ele tem um espaço de contexto menor. O que significa? Vamos imaginar que eu tenho um modelo que ele permite que eu utilize no máximo mil tokens. Significa que quando eu usar mais que mil tokens, ele vai começar a esquecer o que você colocou lá no início. Ou seja, a quantidade ou a janela de contexto que eu tenho, vamos dizer como se fosse a memória que a IA tem para lembrar de uma conversa. Quanto maior a quantidade de exemplos e de conteúdo que eu coloco, mais eu uso essa memória, essa janela de contexto, e mais vai fazer com que eu gaste e também quanto, se eu começo a perder minha janela de contexto, eu começo a perder a precisão na minha resposta. Eu dependo muito também da qualidade do exemplo. Porque não adianta dar um exemplo. Se você dá um exemplo bem mais ou menos, a resposta vai sair bem mais ou menos. E uma das coisas chatas, na realidade, é que às vezes a gente quer usar o one shot, few shot, no dia a dia, de forma comum, que nem a gente faz com zero shot. E daí, o que acontece? O zero shot não está legal, daí você dá um exemplozinho. Mas como você tá escrevendo meio de última hora correndo, você também manda um exemplo mal e fica bravo com a IA. Por quê? Porque no final das contas, o seu exemplo foi ruim, tá? Outra coisa, fragilidade à ordem. O que que significa? Ele muda a ordem dos exemplos, pode afetar o desempenho. Olha que muito louco. De acordo com que os exemplos que você dá, ela pode entender diferente. Ou seja, imagina que eu dou um exemplo A, um B e um C. Se eu colocar o exemplo C na frente do exemplo A, a minha resposta ou a forma de como ela vai processar isso pode ser diferente, tá? E aqui eu tenho um exemplo aqui de estruturas de exemplos que eu quis trazer aqui para vocês, somente para a gente tangibilizar um pouquinho mais isso aqui. Por exemplo, o exemplo 1, ou seja, a gente tem exemplo 1, entrada, saída, exemplo 2, entrada e saída. Ou seja, eu coloco a entrada do meu exemplo e como eu espero a minha resposta. Então, isso aqui é algo importante para você entender como que é realmente o fio shot ali para você, porque na hora que eu falo para você entender como que é realmente o fill shot ali para você. Porque na hora que eu falo para você dar um exemplo, parece que é só siga os exemplos, mas você vai perceber que com o nível de precisão que você escreve, o seu resultado vai ser melhor. Por exemplo, gere testes unitários para funções Go. Aí eu coloco exemplo e eu dou função. E eu dou um exemplo de uma função. Aí eu coloco o teste, ou seja, é a minha saída com a resposta esperada. Teste, teste de somar e eu coloco o exemplo do meu teste. Depois, em cima, eu dou função, multiplica. E agora eu coloco, por exemplo, o teste com o meu resultado esperado. Ou seja, o exemplo gera o teste de multiplicação seguindo o estilo da estrutura do exemplo anterior do teste de soma que eu dei aqui para a gente. Então, eu dou um exemplo nesse caso que eu trabalhei e no segundo exemplo eu falo como que eu quero o meu teste escreva o resultado do teste do multiplica, então a gente consegue ter esse tipo de resultado somente pra você entender pessoal, quero novamente deixar claro aqui pra vocês quando a gente tá falando de qualquer tipo de prompt, estruturar como você quer as coisas mudam muito. Então, olha, isso aqui é um exemplo, isso aqui é outro exemplo. Não, seja claro. Eu quero isso. Exemplos. Eu tenho essa função e o teste é dessa forma. Eu tenho essa função, como que vai ser o resultado desse teste? Então, perceba que é estruturado. Você tem estrutura na hora de você perguntar. Não adianta ficar colando simplesmente um monte de exemplos. Adiantar, adianta, ela vai responder. Mas quando você estrutura para ela com mais clareza, o nível de resposta é outro aí para você. Então, apenas para a gente fechar essa primeira cadeia de exemplos um pouco mais simples, em relação a zero shot, few shot e one shot, eu tenho aqui uma tabela comparativa simples aqui pra vocês, ou seja, tipo de prompt, zero shot, nenhum exemplo, precisão média controle de saída muito baixo custo é mais baixo one shot, um exemplo você tem uma precisão um pouco mais mediana, né? O controle de saída é médio, porque você deu um exemplo, por exemplo, né? E o custo também é médio, se fazer a comparação entre os outros. E o few shot, que são de dois a cinco exemplos, por exemplo, você tem uma precisão muito mais alta, porque ele tem mais padrões que ele consegue seguir, o controle de saída é muito mais alto e o custo também é muito mais alto pela quantidade de exemplos. Então, essa que é a nossa ideia aqui do zero shot, zero shot não, do one shot e few shot aí pra você.