00:00Fala aí, pessoal
00:01Nessa playlist, ó, playlist de novo aqui nesse canal
00:01E nessa playlist a gente vai falar de uma coisa muito interessante que vai dar um upgrade na sua carreira nesse momento agora que a gente precisa tanto disso, que é falar de inteligência artificial, ou seja, como integrar inteligência artificial dentro do nosso programa
00:15E para começar essa playlist, eu vou começar com LangChain e LangGraph
00:19Aqui, ambos eu vou utilizar com Python por enquanto, tá? E aí, dependendo de como fluir a playlist aqui, eu também vou introduzir JavaScript, TypeScript
00:31A gente faz isso também em JavaScript, TypeScript, tá? Só que conforme eu tava te falando, eu preciso saber como vai fluir essa playlist
00:34Então, eu..
00:38Preciso muito, mas muito do seu engajamento
00:41Toda playlist eu falo isso para você, e sempre acaba acontecendo a mesma coisa
00:46A playlist morre porque ninguém engaja com o vídeo e ninguém assiste o vídeo quando o assunto começa a ficar interessante
00:53Então, quando eu vou falar de algo mais avançado, a turma some toda
00:56Então, eu preciso muito que você engaje com este vídeo, curtindo, deixando um comentário, compartilhando com alguém, assistindo o vídeo inteiro, para que esta playlist não morra, para que o algoritmo do YouTube não pare de entregar este vídeo
01:12E se ele parar de entregar este vídeo, eu vou ter que parar de fazer esses vídeos, e aí a playlist morre
01:15A gente vai falar de outro assunto, tá? Então, já faz aquelas..
01:18Coisas todas aí, já curte, já comenta, já compartilha, deixa o vídeo rodando aí em background, faz qualquer coisa aí para que essa playlist não morra, tá? Porque eu quero muito falar disso aqui com você, mas se não tiver, viu, não vai ter jeito da gente falar dessas coisas, tá? Dito isso, o que que eu vou fazer? É, a gente vai falar de integração de inteligência artificial utilizando o LangChain e o Lagraph, tá? Então, inicialmente, vamos só ver qual que é a diferença dessas duas coisas aqui, tá? A gente vai acabar usando as duas
01:45Não teria necessidade de usar as duas, mas as duas ferramentas casam muito bem
01:49Então, como essas duas ferramentas casam muito bem e a gente vai utilizar as duas, nada melhor do que a gente ver a..
01:55Diferença entre as duas, tá? Ambos, LangChain e LangGraph, são da mesma empresa e ambos fazem basicamente a mesma coisa, que é fazer comunicação com LLMs de formas diferentes
02:04O LangChain, ele é focado em chain, ou seja, em encadeamento de chamadas
02:10Então, basicamente, você começa com um passo A, vai pro passo B, vai pro passo C, D e assim até terminar
02:17Beleza? Então, você tem basicamente uma cadeia de coisas ali que vai acontecer em determinado momento, sempre daquela mesma forma, OK? Quando você quer uma coisa mais complicada, por exemplo, suponha que eu queira um negócio que vai do passo A pro passo B, do passo B volta pro passo A, do passo A pula pro passo C, do passo C vai pro passo D e entra em looping
02:40Nesses casos
02:42Específicos, eu não tô falando de encadeamento mais, né, de chamada de A, B, C, D
02:45Eu tô falando de uma coisa que vai e volta em determinados momentos
02:51Então, isso aqui, ao invés de ser uma chain, ser um encadeamento de coisas, a gente tá falando de um grafo, da teoria dos grafos mesmo
02:57Então, do nó A, do grafo, eu vou para o nó B; do nó B, eu vou para o nó D; eu pulo um nó e aí volto para um nó, posso fazer essas coisas utilizando o length, OK? Então, LangChain, passos fixos, geralmente coisas que não vão mudar e que você não vai poder voltar, no caso, né? Você vai sempre seguir adiante
03:17No Lumen, você vai poder fazer uma coisa mais assim, um ninho ali macarrônico de coisas, que vai de um nó para outro, volta em um nó, vai para outro nó, e assim por diante
03:26Específicas assim, tá? Isso permite, por exemplo, o LangGraph, que permite que a gente faça coisas como React agents, que basicamente são agentes que têm o formato de reasoning e acting, né? Ele faz alguns passos que podem, por exemplo, ter ferramentas envolvidas
03:41Enfim, a gente vai falar dessas coisas mais teóricas um pouquinho mais para frente
03:46Então, só para a gente ficar na parte superficial aqui, por enquanto, vamos só entender isso aqui
03:52Assim, o LangChain é um framework que daria para você fazer alguma coisa semelhante ao que você faz com o LangGraph, só que o LangChain foi feito especificamente para isso, OK? Então, se você quer utilizar as ferramentas que vêm dentro do LangChain junto com o LangGraph, você tem o Melhor dos dois mundos, as ferramentas específicas do LangChain e o formato de graph
04:16E aí a gente tem essas duas coisas reunidas aqui, tá? Basicamente é isso aqui, tá? Tem, eu escrevi várias coisas aqui para você ler
04:21Se você quiser depois parar e ler isso aqui, eu vou deixar o repositório lá para você, tá? Inclusive, eu já vou te falar como é que eu estou organizando esse repositório aqui no GitHub
04:30Então, no GitHub, eu vou deixar o link desse repositório para você
04:33E na pasta Docs, eu não estou colocando documentação, tá? Eu estou colocando os textos que eu estou falando aqui para você
04:39Então, por exemplo, isso aqui que eu falei, está aqui na pasta docs, e eu coloquei esses 001, 002, 003, e assim por diante, para ficar em ordem
04:49Então você vai seguir isso aqui em ordem, pelo número mesmo
04:51Você pode ver até o que é o texto aqui que eu estou falando, mas a ordem vai ficar mantida pelos números ali
04:57Então, por exemplo, agora a gente vai partir para fazer a nossa primeira configuração e o nosso primeiro contato com o LangChain, que é mais simples de ser utilizado, tá? Isso aqui está também na pastinha do GitHub
05:07Além disso, isso aqui é um negócio um pouco mais complexo, por isso requer uma playlist
05:13Eu poderia fazer um vídeo só, mas de duas uma: ou eu fazia um vídeo muito superficial, o que eu não gosto de fazer, você sabe disso; ou eu faria um vídeo muito longo, o que também muita gente não gosta, porque eu já pesquisei com os inscritos do canal e..
05:26A maioria esmagadora das pessoas prefere um vídeo por vez, por isso uma playlist que vira uma espécie de curso aqui, no caso, tá? Então, o que que eu vou fazer aqui? Eu vou criar uma pastinha chamada de src, e dentro desse src eu vou criar uma pastinha chamada de examples
05:41Essa pastinha de examples a gente pode ir até fazendo isso juntos aqui, ó, que é o seguinte: MKDIR src/examples, e dentro da pastinha de examples a gente vai, em algum momento, tratar de um assunto específico
05:53Então, nesse assunto específico, eu vou deixar nessas coisas, nessa pastinha de exemplos, para você ter o código deste exemplo em particular
05:59E aí, quando a gente for fazer alguma coisa final, aí sim eu crio dentro de SRC alguma coisa relacionada, por exemplo
06:08Com React Agent ou o nome que a gente quiser dar para isso, tá? Então, quando a gente for fazer um produto maior, que vai integrar várias coisas, a gente vai utilizar a pasta src com um nome adequado para aquela coisa
06:18Quando for, por exemplo, uma atividade específica de alguma aula, eu vou usar esses exemplos aqui
06:23Então, agora, por exemplo, estou criando a pastinha de exemplos e já estou criando a pastinha de X01, que é o que vamos usar neste primeiro, e vou criar a de X02 também, que vamos usar neste segundo
06:34Vou criar o seguinte: vou criar uma pasta src dentro dessa pasta de exemplos X01, lá eu vou criar um arquivo main.py para colocar qualquer coisa depois
06:43E na de X02 também já tenho, então agora um arquivo main.py
06:46Então, aqui está
06:50Sim, a estrutura do meu projeto aqui na minha máquina, né? Então, o diretório, como eu te mostrei antes, o pyproject
06:54Tomal, já vou te mostrar, o README não tem nada ainda
06:56Em algum momento eu vou escrever
06:58E aí a pastinha examples, exemplo um, main, exemplo dois, main, UV lock, que também não deve ter nada, né? Eu só dei um, deixa eu ver aqui
07:01É, não tem nada no UV lock
07:05Eu só dei um UV sync aqui
07:08Como eu não tenho dependência ainda, não tem nada aqui ainda
07:12Vamos dar uma olhada no nosso pyproject
07:14Tomal, só para você ver como é que tá aqui, tá? Isso aqui vem do nosso ambiente Python 2025, tá? É só ir aí no Google digitar Otávio Miranda ambiente Python 2025, e aí você já deve achar uma coleção de resultados, ó
07:26Tá vendo, ó? Parte quatro aqui já, ó
07:28Tem quatro partes
07:29Este vídeo aqui
07:30Você acompanha a parte 1, 2, 3 e 4
07:34Caso você não tenha utilizado o UV ainda, tá? Porque na maioria dos casos eu vou usar o UV aqui para fazermos o nosso código, tá? Aliás, eu vou usar só o UV para fazer os nossos códigos, OK? Dito isso, o nosso Pipertomal tem o nome aqui de React Agent, foi um nome genérico que eu quis colocar aqui e nada demais
07:52Meu nome, a versão do Python 3.13, meu site aqui, que também não seria necessário ter isso, mas eu vou manter
07:58A configuração do Ruff, que na configuração do Ruffi, esse trecho do nosso ambiente lá
08:05O que eu fiz? Eu fiz o inverso lá no nosso ambiente Python
08:07Eu configurei as regras que eu queria aqui e desativei algumas regras
08:12Aqui eu estou fazendo o inverso
08:14Aqui eu estou ativando todas as regras, ou seja, estou trabalhando no modo mais rígido para ir liberando aos poucos, e conforme eu quero, vou liberando algumas regras
08:23Por exemplo, aqui eu já desativei várias regras, que são coisas que eu não preciso manter aqui, porque preciso dessas regras para te mostrar
08:32Por exemplo, preciso manter o print no código para você ver o que estou falando
08:37Também, no caso aqui, não preciso criar o arquivo __init__.py
08:40Não sei por que esse arquivo existe, já que é possível criar um pacote namespaces no Python sem o arquivo __init__.py
08:45Além disso, não vou obrigar a criar docstrings em todas as funções, então desativei essa regra também
08:52Anotação de N
08:54E isso aqui vai ser importante também para o PRI, porque a tipagem aqui pode te atrasar bastante
08:59Eu vou te mostrar já já
09:01E também, eu desativei a regra que me xinga se eu deixar código comentado, porque às vezes eu preciso deixar um código comentado para você ver esse código
09:09Então, essas regras eu desativei e provavelmente vou desativar mais ao longo das aulas, tá? Voltando aqui, falando do PRight, tá? A única outra coisa que eu mudei foi o seguinte: estou mantendo, toda vez que trabalho com o LangChain, LangGraph, o type checking do PRight como padrão aqui
09:17Por quê? E às vezes até básico
09:26Por quê? Porque percebi que estou perdendo muito mais tempo com a tipagem do que com outras coisas
09:30Necessário
09:34E aí eu fico mais tempo fazendo tipagem do que escrevendo código
09:39Me atrasa muito
09:45Então, para eu não ficar focando em tipagem aqui, vou deixar ou em padrão, ou em algum momento posso até passar para basic, ao invés de manter em strict, como a gente tem feito em várias aulas deste canal, tá? Então, foi basicamente isso que eu mudei
09:50O resto está tudo igual ao que está lá no nosso ambiente Python 2025
09:54Segue ele lá
09:56Eu expliquei tudo isso bonitinho lá naquelas aulas, OK? Dito isso, quando eu tenho isso aqui pronto, posso fazer UV sync aqui e pronto
10:05Aí, já faço o build do meu projeto e pronto, tá? E o ambiente virtual também já foi criado aqui, já está tudo certinho
10:10Agora, uma outra..
10:12A coisa é o seguinte, eu deixei o DotV ali criado, deixa eu apagar ele aqui, ó
10:16Apaguei o DotV, OK? Então, isso aqui que a gente vai precisar agora do DotV, por quê? Quando a gente vai trabalhar com LLM, em algum momento você vai ter que chamar alguma LLM qualquer, tá? Seja do Google, da OpenAI, da Anthropic, qualquer uma dessas, você vai ter que chamá-las, e elas requerem uma API
10:33Beleza? O que eu consegui fazer aqui pra gente? Tá? E isso parece publicidade, tá? Não é nada de publicidade isso aqui
10:40Eu não tenho, eu nunca fiz publicidade nesse canal, você sabe disso
10:44Mas, voltando aqui, é o seguinte: eu tenho o Olama aqui, que eu já fiz vídeo sobre ele, tá? Está no canal, pode dar uma olhada
10:52Deixei o link aqui pra você também
10:55Deste vídeo
10:58E no OLAMA você consegue rodar LLM local, beleza? E aí você pode escolher o modelo da sua preferência lá
11:01Dá uma olhada neste vídeo aqui
11:03Só que eu sei que nem todo mundo vai conseguir rodar o OLAMA localmente na sua máquina
11:06E também sabemos que essas LLM open source têm uma janela de contexto muito pequena
11:13Elas não são geralmente tão boas quanto as LLMs pagas, né? Por exemplo, o Geminai, sei lá
11:21Até tem mudado isso
11:23Agora estão saindo umas LLMs menores e melhores, mas ainda assim você vai querer utilizar alguma outra LLM em algum momento ou não vai conseguir utilizar o OLAMA
11:32Se você conseguir usar o OLAMA, recomendo fortemente, fica só com ele aí, porque..
11:37Depois que você fizer todos os seus testes, vai ser só trocar o modelo que você está utilizando por um modelo pago quando precisar
11:45Não vai precisar mexer no código
11:47Apesar de que a saída de alguns modelos é um pouco diferente, mas geralmente com LangChain e LGraph, você tem uma coisa mais uniforme para todas elas, ok? Então, se você conseguir usar o Llama, usa o Llama aí
11:59Se você não conseguir usar o Llama, a única API gratuita que eu consegui achar aqui foi a Google AI Studio
12:06Você até pode utilizar APIs da OpenAI ou da Anthropic
12:11Eu até vi em algum lugar falando que tem algum free tier lá, mas não consegui usar nenhuma coisa gratuita lá
12:17Então, quando você cria alguma API na Anthropic ou na OpenAI, você vai..
12:20Tem que colocar pelo menos cinco, no mínimo cinco de crédito na API para você conseguir fazer requisições, senão ela vai negar as requisições aqui
12:31Eu testei isso antes
12:33Agora, essa aqui é a única gratuita que funciona, tá? Então, é essa daqui
12:35Eu já vou criar isso aqui com você, ó
12:37Por exemplo, você vai lá, eu deixei o link ali para você, o repositório você já viu ali, não tá óbvio, né? Mas você vai lá neste link aqui, no caso, aistudio.google.com, e aí vai em "Get API Key" aqui embaixo que você achar
12:51E aí, no "Get API Key", vai ser este link, se você quiser tentar ir direto: API key, aqui no final, né? E aí, aqui, ó, você vai ter que criar uma chave de API
13:01Aí, você cria sua chave de API
13:11Você está vendo aqui que eu tô numa conta meio desatualizada, né? Não tem nada aqui, Tá? Então, não tenho projeto, não tenho nada no Google Cloud aqui, tá? Então, em teoria, ó, tá vendo que aqui eu já tinha criado uma API, eu a apaguei, tá? Mas, se você não tiver, vai ter um botão aqui, no caso, dizendo que você quer criar um projeto sem API, ou algo assim nesse sentido, tá? Você pode clicar lá e criar
13:20Então, por exemplo, aqui eu vou, sei lá, escolher qualquer um desses aqui, porque já tava ali, tá? Mas você vai ter o botão para criar sem projeto também
13:27Então, vou escolher isso aqui, vou criar minha API aqui, tô te mostrando, ó lá, ó
13:31Não vai usar a minha API aqui, ó
13:32É, é como falar, usa a minha API aqui
13:34Olha ela aqui, ó
13:36Eu vou apagar essa API depois que eu gravar essa aula aqui, só para você
13:39Ver, saber, tá? Mas eu tô criando ela para que você nunca mostre isso aqui para ninguém, tá? Eu tô te mostrando que eu vou apagar ela depois que terminar de gravar essa aula
13:46Vai copiar a variável de ambiente aqui
13:47E aí você vai fazer o seguinte: vai criar um arquivinho na raiz do seu projeto que será um arquivo .env
13:51Nesse arquivo .env, você vai colocar os nomes das variáveis que eu deixei ali para a gente já
13:54Então, deixa eu fechar isso aqui
13:57Isso aqui também a gente pode fechar
14:00E aqui, ó, aqui embaixo, eu falei sobre isso que eu mencionei com você, das APIs gratuitas e das APIs pagas, se você quiser usar, tá? Mas aqui embaixo, ó, eu deixei isso aqui, ó, os nomes das variáveis de ambiente, tá? É óbvio que a gente não vai utilizar todas elas
14:14Eu, por exemplo, eu vou… Vou utilizar mais o LLaMA local, e em alguns momentos, só para testar se está tudo funcionando com o LLaMA, eu vou testar o GPT, o Google aqui
14:24Então, vou colocar apenas o valor da API do Google aqui
14:28Você coloca só o valor da API que você precisar aqui
14:31Acabei de perder o valor da minha API aqui e eu não estou usando ela agora
14:35Acho que nem tenho isso aqui porque copiei de uma fonte externa, mas vamos lá
14:36Vou copiar de novo
14:37Ok
14:39Agora eu vou colar isso aqui e pronto
14:40E aí, estou deixando assim, só para a gente ver isso aqui no final, tá? Mas como te falei, não vou usar todas, então vou deixar só isso aqui, ó
14:47Essa é a API da Anthropic
14:50Aqui pode apagar isso aqui, né? E aqui embaixo, eu vou copiar isso aqui, vou colar e vou mudar para o modo apropriado
14:53Pronto
14:56Então, aqui, por que..
14:59Por que eu estou fazendo isso aqui com você? Porque você vai precisar carregar essas variáveis de ambiente se quiser usar uma dessas aqui
15:05Então, só para você ver como ficaria isso, tá? Lá no nosso, eu acho que já criei esses arquivos, né? É, eu já criei lá, no nosso primeiro exemplo
15:13Vamos pegar aquele arquivo X01 lá, ok? Então, é X001
15:19Eu vou abrir esse arquivo main.py e aqui vou tentar carregar minhas variáveis de ambiente
15:25Como você poderia carregar suas variáveis de ambiente? Você poderia instalar um pacote chamado python-dotenv e utilizar esse pacote, mas não é assim que eu vou fazer
15:34Eu já falei sobre esse pacote aqui no canal, não me lembro qual vídeo foi, mas já falei bastante sobre isso aqui
15:40Falei por meia hora sobre esse pacote aqui
15:42Mas isso aqui carrega aquele arquivo .env nas variáveis de ambiente do seu sistema, tá? Mas o UV tem uma forma de você executar aqui que é UV RAM
15:50E aí, você executa dessa forma aqui, ó: passa --env-file igual ao caminho do seu arquivo .env, e aí você executa lá, por exemplo, o arquivo que você quiser
16:00Nesse caso aqui, ó, estou tentando executar o main.py, no qual o arquivo eu não fiz nada ainda, né? Então, lá no nosso código, eu deixei aqui um exemplo abaixo de como você pode executar isso carregando já o .env e aqui como ver se ele está funcionando bonitinho
16:14Então, aqui, ó, deixa eu colar lá no nosso código, ó: importe isso aqui
16:18Por que esse arquivo está sem..
16:20Highlighting? Ué, estranhamente o arquivo ficou
16:21Ah, tá
16:23Eu só saí do Discord e vou entrar de novo aqui
16:25Beleza? Então, aqui, ó, eu vou fazer o seguinte: se deu tudo certo, eu vou verificar o valor da IPI aqui ou vou ver que não está configurado
16:31Se eu ver que não está configurado, é porque não deu certo
16:36Se eu ver o valor da IPI aqui, é porque deu tudo certo
16:38Então, voltando aqui, deixa eu executar de novo ali
16:41Executando, deixa eu limpar o terminal aqui, tá? Ó, clear
16:43E aí, ó lá, ó, executando, você está vendo aqui que os valores apareceram no finalzinho
16:48Então, quer dizer, o arquivo já está carregando as variáveis de ambiente, eu já estou conseguindo lê-las dentro do projeto
16:50Então, maravilha
16:52Para que eu preciso disso aqui? Nada
16:55Se as variáveis de O ambiente já está configurado e os pacotes necessários também já estão carregados
16:59O próprio LangChain já vai fazer o trabalho de carregar isso aqui para a gente
17:03Beleza? Então, o que nós podemos fazer agora? Podemos começar entendendo o que vamos precisar usar para isso, ok? Quando estou trabalhando com LangChain e LangGraph, aqui estou falando especificamente do LangChain, sem focar em nada de LangGraph, apenas para termos um "hello world" com a LLM
17:20Quando trabalho com LangChain, o que posso fazer? Preciso primeiro, aliás, acho que ainda não fizemos isso, né? Precisamos primeiro instalar os pacotes
17:27Acabei pulando essa etapa
17:29Ia já escrever o código, mas esqueci de te falar isso aqui, ok? E isso aqui é uma..
17:32Uma parte muito importante da versão atual do LangChain, porque o que acontece nesse momento aqui? A gente tem essa mensagem enorme na documentação do LangChain e do LangGraph também, dizendo que esses documentos estarão obsoletos e não serão mais mantidos com o lançamento da versão do LangChain 1.0
17:52E aí, no final, eles dizem para clicar aqui e você ver o versão 1.0 alfa
17:57E o alfa vai ter uma mensagem enorme dizendo assim: "O LangChain V1 está em desenvolvimento ativo e não é recomendado para produção." Então, eu optei por focar na documentação mais nova, até porque ela será liberada em outubro de 2025
18:13Então, vou focar nesse alfa aqui
18:16E aí, pra gente instalar um pacote alfa, a forma de fazer muda um pouquinho
18:20Instala as coisas ali, tá? E é isso que eu quero te mostrar aqui
18:22Então, para a gente instalar o que vamos utilizar ao longo dessas aulas, você precisa saber qual provider vai usar
18:30Por isso, falamos de obter a API antes de fazer isso aqui
18:35Porque a gente, eu obtive a API do Google, então vou precisar do pacote Google GenAI
18:40Existem outros pacotes relacionados ao Google que liberam modelos do Google Cloud, no caso do Gemini, mas esse aqui já vai liberar o Gemini para a gente
18:49Então, Google GenAI
18:51E eu também vou usar o LangChain
18:54Então, preciso desses dois pacotes aqui, tá? Só de instalar um desses, você já vai ter tudo que precisa para usar o LangChain
19:00Então, deixa eu te..
19:02Mostrar com o terminal aqui para você ver, só para você saber como você pode conferir isso aqui também
19:04Então eu vou colar ali, ó
19:07E aí perceba isso aqui, ó
19:10Esse comando aqui, ele vai fazer o upgrade do pacote caso eu já tenha instalado ele
19:14E esse '--pre' é ele que vai trazer a versão pré-release aqui, que é a versão alfa 1 que a gente está querendo aqui
19:23Então, quando a versão alfa já for a versão oficial, ou seja, você já tiver o LangChain na versão 1, você não precisa mais colocar esse '--pre' no final, ok? Porque senão, você vai estar baixando versões mais avançadas ainda, que não foram lançadas oficialmente
19:36Então, aqui agora, a gente precisa do '--pre' porque a gente ainda não tem a versão 1 oficial do LangChain nem do LangGraph
19:44Então, a gente vai..
19:45Precisar dessas coisas para a gente aprender na documentação mais recente, OK? Dito isso, eu estava te falando que agora, depois de você instalar, você vai ter tudo o que precisa
19:52É só você conferir lá no seu UV Lock
19:54Você vai ver que vai ter um monte de pacote no seu UV Lock lá
19:59Em algum momento, você vai ver alguma coisa relacionada com o LGraph ou aqui, ó, o LangChain
20:03Então aqui, ó, isso aqui, ó, o LangChain já veio instalado, e aí, junto com o LangChain, a gente pegou neste momento da instalação a versão 1.0.0 alpha 6
20:07Maravilha
20:11Se tiver uma versão mais alta, não tem problema
20:15Se não for alpha, também a sua versão é melhor ainda, OK? Só que tem que ser a versão 1.0.0
20:19E a gente obteve também o LangChain core, que a gente precisa dessas coisas
20:22LangChain Text
20:25Splitters, a gente também precisa dessas coisas
20:27LangChain já veio e LangGraph também já veio
20:30Além disso, a gente também obteve o pacote LangChain traço OLAMA, que vai permitir que a gente execute modelos do OLAMA localmente aqui na máquina
20:39Então, isso que eu estava querendo te mostrar
20:41Só de você instalar um desses aqui, você já tem todos eles ali
20:45Agora, vou instalar mais um deles aqui, mas eu poderia fazer isso tudo junto também, se eu quisesse, tá? Por exemplo, se eu quisesse instalar o OLAMA, o Google PaLM ou o Google Gemini aqui, para ter acesso ao Gemini, eu poderia fazer assim, ó
20:58Este comando aqui, ó, ao invés de só o OLAMA, eu separo por vírgula e coloco o Google Geni
21:02E aí já vem o pacote do OLAMA mais o pacote do Google Generative AI
21:07Lá no caso, que é o SDK do Google para a gente utilizar esses modelos do Gemini ali, mais alguns outros modelos também
21:14Beleza? Se você quisesse rodar tudo de uma vez, eu deixei até o comando aqui para você, para você ter Anthropic, OpenAI e assim por diante, tá? Eu não vou, como eu te falei, usar nem OpenAI, porque eu não quero ficar pagando por isso aqui também, né? Porque as aulas são gratuitas e assim por diante, mas você pode utilizar qualquer modelo que você quiser, OK? E aí, depois que a gente fez isso, as nossas dependências do projeto ficaram assim
21:39Eu tenho o LangChain e aí tenho o Google GenAI na versão lá que eu te mostrei, maior ou igual a 1.0
21:44Alfa 6
21:49Só isso aqui por enquanto, tá? Em algum momento, eu vou colocar o Reach aqui, vou colocar mais coisas aqui, mas por agora já vai ser suficiente para a gente
21:54Agora é o seguinte: eu falei para você, né, que eu vou manter os exemplos das aulas nesse formato aqui, na pasta src/examples, e aí será nomeado como aula 01, 02, e assim por diante
22:06A que a gente vai fazer agora será 01
22:07Eu também vou fazer uma 02 com você aqui, tá? Mas, igual eu comentei também, espero não passar do exemplo 999, mas se passar, vou ficar muito feliz com o engajamento dessa playlist
22:19Beleza? Mas eu espero não passar do exemplo 999 aqui com você
22:24É por isso que os exemplos são numerados como 001, 002 e assim por diante
22:27E aqui eu até deixei um link para você já ir para o arquivo assim que criarmos
22:33Pode ir nesse link e clicar
22:38Você vai cair no arquivo certinho lá dentro do GitHub, ok? E também vou te mostrar umas mensagens aqui interessantes para a gente utilizar, tá? Mas, dito isso aqui, vamos lá testar o nosso projeto
22:43Então, posso fechar isso aqui
22:47O exemplo 01 é o que eu vou utilizar
22:48Posso fechar isso aqui
22:49O exemplo 01 é este aqui
22:50Então, vamos lá
22:51O que é que a gente vai precisar fazer aqui? Inicialmente, quando trabalhamos com a nossa LLM, geralmente você precisa instanciar a classe do próprio provedor
23:01Por exemplo, se estou utilizando o GPT, tenho que instanciar uma classe chamada ChatOpenAI, ou algo assim, e passar as configurações dela aqui
23:11Se eu estiver com..
23:13Google, vai ser ChatGPT, deixa eu ver aqui que eu não lembro
23:17Então aqui, ó, teria que importar assim: import, ó, from LangChain, Google Gemini, import e aí ChatGPT, isso aqui
23:24E aí, isso aqui eu teria que colocar aqui assim, por exemplo, o meu LLM é Google Gemini, alguma coisa assim, e aí eu configuraria ele aqui
23:35Beleza? Só que o LangChain, a beleza que eu acho nessas coisas do LangChain é que ele já pensa em algumas coisas que realmente facilitam a vida
23:44Às vezes eles pensam em coisas que facilitam a vida tanto que eu acho ruim
23:49Por exemplo, eu não vou seguir esse tutorial que está aqui nessa documentação deles, porque tem muita magia acontecendo aqui
23:54Tá vendo, ó? Isso aqui
23:56Criar um agente já vai ofuscar meio mundo de coisa que a gente vai fazer aqui manualmente
24:02Então, não quero usar isso aqui agora, tá? Por isso que eu tô te falando que, às vezes, eles fazem coisas que facilitam tanto a vida que deixam o negócio obscuro, vira mágica
24:11Então, não quero usar isso aqui agora
24:14Mas o que eu quero usar? Eu quero instanciar uma LLM sem depender do provedor em si
24:18Eu vou depender só do nome que eu escolhi aqui
24:19Como que eu faço isso? Eu posso fazer assim, ó
24:21LL = a
24:24E aí, na onde eu tava importando isso aqui antes, era assim, ó: from langchain.chat_models import ChatOpenAI
24:28E aí, esse ChatOpenAI, ele me permite fazer um negócio muito genial, porque agora eu posso colocar, poderia, se eu quiser
24:38Não vou fazer isso agora, mas eu poderia colocar o nome do meu modelo de chat no meu próprio DNEV e configurar isso por lá, sem mexer em código
24:46Então, isso aqui é basicamente um adapter que vai escolher, ou melhor, inferir, tá? Então, ele vai inferir qual o provedor que você vai utilizar, baseado no nome que você colocar aqui
24:55Por exemplo, se eu quiser utilizar um modelo da OpenAI, eu vou digitar "openai", seguido do nome do modelo
25:02Se eu for usar a Anthropic, vai ser "anthropic", seguido do nome do modelo
25:07Se for utilizar, por exemplo, o Gemini, vai ser "google Gemini", e aí Gemini, sei lá, versão 2.5 com alta performance
25:13E aí, esse já é o modelo, ele já vai instanciar
25:18Deixa eu te mostrar isso aqui
25:20Se eu der um print no LLM, e..
25:22Tá tudo bem, vamos ver se a gente consegue ver
25:23Eu não testei isso aqui antes
25:24A gente vê isso em tempo real juntos
25:25Então aqui vamos executar lá o arquivo main.py
25:30Então, executando ele aqui, a gente tem o seguinte, ó
25:32Esse warning aqui está aparecendo e eu já tinha notado que essa parte do Google está exibindo esse aviso
25:36Não vou me preocupar com isso, porque esse aqui é um aviso das bibliotecas em C lá do próprio Google, por exemplo
25:44Mas aqui, ó, olha só, ele já carregou o modelo models/gemini 2.5 flash, etc
25:49Olha qual classe está sendo utilizada aqui: LangChain em Google Genai.chatmodels
25:56Aquela que eu te mostrei antes
25:57Percebeu que ele já se adapta? Olha só, se eu agora colocar, por exemplo, o Llama 2, GPT
26:05Traço OS 2.B ou 120B, tanto faz
26:07Se eu executar esse modelo e executar isso aqui, olha lá, qual foi a classe utilizada, LC Chain ou Lama Chat Models, você vê que ele já importou, já instanciou, já fez tudo pra gente
26:19Então, eu acho muito melhor utilizar esse initat model, tá? Depois, a gente pode ir para aquelas mágicas de create agent lá que tem na documentação, mas eu acho muito melhor iniciar com esse initat model aqui agora, porque isso aqui vai deixar o seu código menos acoplado ao modelo que você está utilizando
26:37Eu não preciso escolher um modelo específico
26:39Agora, vamos falar de um hello world para a nossa LLM
26:43Então, nesse caso específico, eu vou falar o seguinte: eu quero uma resposta, então response
26:47E aí eu vou falar, Eu posso usar vários métodos que a gente vai olhar ao longo das aulas, todos, tá? Posso fazer streaming, posso fazer stream de eventos, posso carregar de forma síncrona ou assíncrona
26:57A melhor maneira de utilizarmos isso neste momento é com um código síncrono
27:01Então, invoke aqui, que eu vou chamar
27:03Então, invoke
27:06Aliás, eu tenho que chamar aqui o LLM, tá? LLM
27:08Invoke
27:10E aí, o que eu vou fazer? Passar a mensagem que quero mandar para o LLM
27:12Oi, olá, né? Tudo bem? Vamos ver o que temos de resposta
27:14Então, print(response)
27:16Vamos executar ele de novo
27:18E eu subi um modelo de 120 bilhões de parâmetros, que tem, sei lá, 65 GB de tamanho
27:23Tempo que demorou para responder aqui, mas olha lá, temos uma resposta
27:25Olá, tudo
27:28Tudo bem? E tudo bem
27:32E com você? E aí, como posso te ajudar hoje? E aí a gente já tem o nosso Hello World aqui da nossa LLM
27:35Você está vendo que essa mensagem aqui fica bem difícil de a gente depurar, isso aqui, tá? Tem um negócio que é chamado de LLMith, tem outro negócio que é chamado de Lang Studio, que você pode utilizar e que vai facilitar sua vida
27:45Em algum momento eu te mostro essas coisas aqui, mas nesse momento eu quero foco, quero que a gente veja isso aqui
27:50Então a gente vai fazer o V a de "reach"
27:52O reach vai me dar um print
27:55Então, from reach import print
27:57E aí o código vai reclamar e a gente vai ter que desativar a regra A001 lá no projeto
28:05Toma, porque lá, no caso, eu não lembro qual era essa regra aqui, mas eu acho que é A001 ou..
28:104
28:14A 004, porque eu vou precisar disso aqui, né? Qual era o problema? Import shadowing
28:18Então vamos colocar shadowing do Python built-in, só isso
28:21Shadow in Python built-in
28:24Então agora, em teoria, eu espero que o Reich não reclame mais comigo
28:26Salvei lá, salvei
28:28É, não deu nada
28:30Então vamos recarregar o arquivo aqui
28:31Beleza? Então, pronto
28:34Agora a gente consegue ver a nossa saída de uma forma mais fácil de ler, visualmente
28:38Então aqui, ó, olha o que que a gente teve de resposta
28:39Ai, message
28:41Content
28:44Olá, tudo bem? O que que é isso aqui? É a resposta da nossa LLM
28:46Então aquelaquele modelo de 120 bilhões de parâmetros respondeu isso aqui
28:53Esse é o AI message
28:54Aqui veio o Content
28:55Olá, tudo bem? Obrigado por
28:59Perguntar
29:03Como posso ajudar você hoje? Beleza? E aí, veio os dados do modelo que eu utilizei, a data, e aí vêm vários metadados aqui que você pode utilizar
29:06Inclusive, vem a quantidade de tokens que você está usando aqui, no caso, para essa mensagem, tá? Isso vai ficar muito melhor no LangGraph
29:13Aqui, no caso, eu vou fazer a maioria das coisas manualmente, só para você entender como que isso aqui funciona, tá? OK
29:18O que mais eu posso fazer? Porque eu só mandei uma mensagem, ele me respondeu e acabou a conversa
29:24Não, e aí, era aqui já que entraria o Nraf, mas só para não falar de muita coisa numa aula só
29:28Eu vou fazer as coisas manualmente aqui com você, tá? Então, vou copiar esse código e vou lá para o nosso exemplo 002
29:31002
29:34Está aqui o nosso
29:36Main
29:37Vou colar esse código aqui só para a gente ter
29:39E aqui está o nosso exemplo 002, tá? Antes de comentar tudo, eu vou comentar essas coisas todas que eu fiz aqui para você ter isso tudo comentadinho, bonitinho, no repositório, tá? Vou fechar essas coisas aqui
29:49Isso aqui também
29:50Então, o que é que eu posso fazer? Olha que interessante, você vê que eu iniciei o meu modelo de chat com o Oama, e aí eu te falei que eu poderia mudar para Google Gemini e trocar isso aqui para Gemini 2.5-Flash, e fazer a mesma coisa, esperando receber a mesma resposta
29:57Lá, a mesma resposta
30:04Não, aqui no caso, eu estou executando o outro arquivo
30:07Deixa eu mudar para o 02
30:10Ó aquele alerta lá, mas olhe lá, olhe
30:13Aqui, você vê que eu tenho uma resposta
30:18Relativamente diferente
30:23Essas coisas são importantes porque, se você depender de várias coisas nessa saída, pode ser que quebre o seu código, entendeu? Porque cada modelo vai ter um funcionamento um pouco específico
30:29Apesar de estar bem similar, eu tenho conteúdo aqui que já é mais importante para mim
30:32Mas olha só, aqui eu chamei o modelo, mas ele não me falou qual que é o modelo exato aqui, ó
30:36Tá vendo? Ah, aqui sim, ó
30:38Modelo Gemini 2.5 Flash
30:41Aqui tem a razão, alguma coisa de safety que você pode configurar nesse Gemini
30:43Enfim, tem algumas coisas aqui relacionadas ao modelo, mas você vê que eu troquei só o nome do modelo, meu código continua funcionando perfeitamente
30:50Mas era isso que eu queria te mostrar
30:53Antes
30:57Mas o problema que eu tô tendo aqui agora, que eu não te falei ainda, é que o meu chat não tem nenhum contexto das mensagens que eu tenho
31:00E observa uma coisa aqui, percebe que essa mensagem de AI message aqui, ela é importante pra gente por conta do seguinte: se eu vier aqui e verificar o que esse método invoke da LLM recebe, olha só o que ele recebe no input, que é o primeiro parâmetro que a gente está passando, que é o language model input
31:18Se eu seguir o language model input, você vê que isso é um Union, que pode ser um prompt value, pode ser uma string, que é o que a gente estava passando, ou uma sequência de message-like representation
31:26O que é message-like representation? Se eu for aqui, eu tenho uma message-like
31:33representation, que é um union, que pode ser uma base message, uma lista de strings, uma tupla com string, uma str, um dict de str para str, ou uma message v1
31:40O que que é message v1? Se eu for aqui, eu tenho
31:46Agora eu achei onde que tá o AI message
31:48É o message v1 ali
31:50Mas se você for no AI message, você vai ver que ele é uma classe
31:53Não, eu achei que ele herdava de base message, mas não herda não
31:56Então, voltando aqui no nosso AI message, a gente tem AI message, AI message chunk, isso é para streaming, a gente vai ver depois
32:03E human message, essa é a sua mensagem
32:05System message, essa é a mensagem que o sistema manda para IA
32:10E tool message, que é uma mensagem que a ferramenta que você criar vai mandar para dentro do IA para ela ler o resultado
32:17Daquela ferramenta, tá? Então, vamos voltar lá para criar a nossa própria estrutura
32:21Então, eu tenho o system message, esse system, a gente vai importar lá de langchain.schema.messages
32:29E aí, isso é uma classe que eu vou passar para dentro a mensagem do sistema, tipo, você é um assistente
32:36Deixa eu pegar um prompt que eu já fiz aqui, que vai ser mais rápido para a gente
32:39Olha só, um textão enorme aqui, mas para você ver o que que isso aqui faz, né? No caso, esse system message é uma mensagem que a gente quer mandar para a IA como prompt, para ela se comportar de forma diferente
32:51Beleza? Então, eu quero que a IA se comporte como, sei lá, um animal de pelúcia
32:56Eu vou falar isso no system prompt
32:58Eu quero que a IA seja esse..
33:01Caso aqui, que eu peguei só um exemplo para você entender, tá? Eu quero que essa IA seja isso aqui, ó
33:04Você é um guia de estudos que ajuda estudantes a aprenderem novos tópicos
33:07Seu trabalho é guiar as ideias do estudante para que ele consiga entender o tópico escolhido sem receber respostas prontas da sua parte
33:15Evite conversar sobre assuntos paralelos ao tópico escolhido
33:17Se o estudante não fornecer um tópico inicialmente, seu primeiro trabalho será solicitar um tópico até que o estudante o informe
33:25Você pode ser amigável, descolado e tratar o estudante como um adolescente
33:29Queremos evitar a fadiga de um estudo rígido e manter o estudante engajado no que estiver estudando
33:34As próximas mensagens serão do estudante
33:41Então..
33:49Isso aqui, como que eu injeto isso na minha LLM para que ela se comporte dessa forma? Eu venho aqui e crio um message, tá? Isso, eu estou fazendo essas coisas manualmente, OK? Lá no LangGraph, muitas dessas coisas são feitas para você automaticamente, OK? Então isso aqui é só para a gente entender como essas coisas funcionam
33:56Então aqui nessa lista tem messages, que é uma lista de mensagens
34:03Lembra que a gente viu isso aqui na tipagem? Por isso que eu gosto tanto de ir na própria biblioteca que estou importando e ver como está essa tipagem, porque é isso que estamos colocando ali, ó
34:13Sequence, message-like representation
34:16E percebe que isso aqui é uma sequência
34:18A gente viu
34:19Lá na nossa playlist, que vocês deixaram essa playlist morrer
34:21Meu Deus, a nossa playlist de type hints, a gente falou sobre sequence
34:25Sequence é read-only, então a gente não quer alterar essas mensagens aqui
34:29Voltando ali, a gente está criando uma lista, uma sequence, na verdade, de mensagens de like
34:36E aí, dentro dessas mensagens, a gente poderia colocar a nossa própria mensagem aqui
34:41Olá, tudo bem? Só que isso aqui fica muito estranho para mim, porque, o que que acontece, ó? Vou tirar isso daqui, vou colocar messages
34:46Pronto
34:48Isso aqui para mim fica muito estranho, porque, olha só, eu tenho uma classe de mensagem de sistema aqui
34:51Isso aqui vai gerar o quê? Dependendo do modelo, ele vai gerar uma role para que essa..
34:55Mensagem chega lá para a LLM como sendo system ou developer ou alguma coisa, depende do modelo
35:03Mas isso aqui vai chegar lá para a LLM e ela vai saber que essa mensagem não é do usuário, é do sistema
35:08E essa mensagem é para que ela se comporte dessa forma
35:11Nem sempre funciona perfeitamente, mas mesmo assim a gente usa isso aqui ainda, tá? Só que vai chegar uma system message, mas agora eu quero que todas as mensagens cheguem nesse formato aqui, porque presta atenção lá na resposta da LLM, não vem AI message
35:25Eu não tô mandando aqui para a LLM uma system message, eu quero mandar a minha mensagem como string
35:30Vai ficar muito esquisito isso aqui
35:32Então aqui eu vou ter uma human message, e esse human message aqui vai ser a sua mensagem, ou seja, a..
35:39Mensagem que a pessoa envia para o GPT
35:41Então, olá, tudo bem? Vamos ver como o Gemini vai se comportar agora, quando eu enviar essa mensagem aqui, porque teoricamente ele teria que seguir isso aqui
35:49Concorda? Vamos ver
35:51Eu não sei por que eu estava testando com o OAM antes
35:53Então aqui, mensagem do usuário enviada e aqui a gente está passando a mensagem
35:57E aqui embaixo a gente pega a resposta de novo do GPT, tá? Aí depois a gente embute essa resposta do GPT e aí podemos continuar fazendo isso eternamente para ter um histórico de conversa
36:09Então, voltando aqui, executando, vamos ver o que ele vai falar
36:12E aí, beleza? Tudo tranquilo por aqui? Massa que você chegou para a gente desvendar uns mistérios
36:17Conhecimento
36:22Qual é o rolê hoje? Qual tópico tá te tirando sono ou te deixando curioso pra caramba? E a gente vai desvendar juntos
36:28Manda brasa
36:33Tá vendo como é que ele mudou o comportamento completamente com base nisso que eu mandei pra ele? Então isso aqui é super poderoso pra gente aqui, tá? Agora, se eu quiser continuar conversando com a LLM, não tem como eu fazer isso aqui, tá? Então deixa eu pegar
36:39Eu fiz um loop aqui infinito, tá? Manualmente artesanal, porque o LangGraph tem essas funcionalidades já pra gente utilizar, mas só pra você ter um pico de dopamina aí no caso e fazer sua própria LLM, eu criei um código aqui
36:52Eu vou colar aqui pra você ver, tá? Só pra gente não ter que ficar digitando isso aqui, porque não é muito..
36:55Importante
36:57Então, olhem só, pessoal, o que eu fiz aqui? Eu copiei o código inteiro, acabou vindo um modelo diferente aqui
37:00Deixa eu voltar ele aqui, ó
37:02Google Gemini GenAI 2.5 Flash
37:06Beleza, mudamos o modelo aqui
37:09Eu deixei os comentários, tá? Porque eu tinha deixado isso como uma referência para eu seguir nas aulas, que vocês sabem, né? Eu tenho a minha cola, que não estou fazendo isso de cabeça, porque senão fica tudo muito bagunçado
37:13Então, aqui está o mesmo prompt
37:15Aqui eu deixei o comentário sobre a mensagem do usuário lá, neste caso, eu já enviei a primeira mensagem
37:21Aqui eu fiz a mesma coisa que tinha feito antes: primeiro, a mensagem do sistema, depois a mensagem do usuário
37:27Depois, eu peguei a resposta da LLM e imprimi várias linhas, umas 80
37:30Linhas com IA no meio, só para isso, basicamente
37:33E aqui eu peguei o response, só que eu já peguei o conteúdo aqui do response, tá? Para eu ver só o texto
37:40Eu não queria ver nenhum metadado ali
37:41Então, em response content, teremos uma mensagem de IA nesse contexto, porque isso muda dependendo do método que você utilizar aqui no Invoke, no Invoke ou Stream, a Stream, e assim por diante
37:54Eu vou, a gente vai ver isso depois
37:55Então, aqui também eu até posso fazer um loop infinito e simular essas coisas aqui artificialmente, tá? Porque não é necessário fazer isso, porque o LangGraph faz isso aqui que eu estou fazendo, ó
38:07message, append e colocando a resposta da LLM aqui
38:09Isso o LangGraph faz no estado do nó que a gente for utilizar, tá? Mas só para a gente que ainda não mexeu com LRAP, só para termos um histórico de conversa aqui, estou colocando a resposta da LLM de volta na mensagem e fazendo um loop infinito
38:21Nesse loop, pego novamente a mensagem do usuário por meio de um input
38:28Então, no primeiro ciclo, ele já para no input esperando eu digitar a mensagem
38:32Quando eu digito, crio uma nova mensagem humana com o input do usuário
38:36Feito isso, a primeira coisa que faço é verificar se o usuário digitou exit, quit, bye ou algo assim, para sair, pois senão ficará aqui eternamente, ok? Essas são as palavras para terminar o loop e sair
38:48Depois, adiciono a mensagem do usuário ao array de mensagens e chamo a LLM passando..
38:54Todo o histórico de conversa que a gente teve até agora
38:56Isso vai incluir a mensagem do sistema lá em cima, a primeira mensagem do usuário também lá de cima, a resposta da LLM que eu embuti aqui, e aí essa nova mensagem do usuário que eu também embuti aqui
39:07Então estou colocando tudo isso na lista
39:09Agora, envio tudo para a LLM e dou aquele print daquele cabeçalho com AI e um monte de traços, e a resposta da LLM
39:15Depois, embuto de novo a resposta da LLM na lista de mensagens
39:18E assim, voltamos ao início do loop e fazemos esse trecho todo de novo
39:22Então, eu vou sempre aumentar o contexto eternamente
39:27Pode ser que, se você ficar com uma conversa muito longa aqui, você envie novamente todo o histórico de conversa para a LLM
39:30Se você..
39:33Estava pagando por uma API aqui, cuidado com isso
39:36Por isso que eu gosto de usar o OLAMA ou alguma ferramenta gratuita para evitar esse problema, porque no máximo, com uma API gratuita do Gemini, eu atingo o limite da API lá e pronto
39:41Mas vamos testar isso aqui
39:45Deixa eu executar agora
39:50E aí, estou vendo esse warning chatinho aqui, mas olha só
39:52E aí, lembra que eu enviei uma mensagem inicial para ele aqui, ó, falando isso aqui, ó
39:59Olá, meu nome é Luis Otávio
40:01Essa foi a primeira mensagem após a mensagem do sistema aqui
40:03Então, olá, meu nome é Luiz Otávio
40:04E ele me respondeu, que foi aquilo que você viu
40:07Aqui, eu embuti a mensagem da LLM nesta lista de mensagens
40:11E aí, entrei no loop e caí nesse input aqui
40:13Agora..
40:15Então, nesse momento, eu estou nesse input
40:17Voltando aqui
40:18Aí, o que ele está falando, ó? E aí, Luiz Ottavo, beleza? Massa te conhecer, para a gente começar
40:20Que tal? Qual é a ideia? Meu Deus, o Gemini virou mana aqui
40:25Qual é a ideia que você quer aprender hoje? Me manda o tópico que a gente desenrola junto
40:29Eu gostaria muito de aprender sobre buracos brancos
40:32Você saberia me informar algo sobre eles? É o inverso do buraco negro
40:41Pronto
40:45E agora a gente já entra num modo mega científico aqui
40:47Boa, buracos brancos são tópicos incríveis
40:49Adoro essa parábola
40:51E aí, então? Ah, eu não vou ficar conversando com ele aqui, mas essa pergunta que você faz é a chave
40:55Ela é o inverso do buraco branco? Essa é uma sacada muito boa para começar a
40:58Pensar
41:00Então, me diz aí o que você já sabe ou imagina sobre o buraco negro e tal, buraco branco e aí tal
41:05Você viu como é que o Gemini se comportou, né? Ele mudou completamente o comportamento aqui, né? É, agora vou, deixa eu trocar o modelo só para você ver
41:13Ah, tá
41:21Outra coisa que eu tinha feito aqui, esqueci de falar, tá? Eu saí, dei um Q ali, e olha só o que eu coloquei aqui para a gente, ó, para você olhar isso aqui, tá? Tá vendo o histórico de conversa que eu coloquei aqui, ó? Histórico, e aí tem o system e fala aquela mensagem que eu passei, depois vem o prompt aqui, depois a IA, e aí vem o histórico todo de conversa
41:29Eu queria colocar isso aqui para você porque no LangGraph a gente tem mais ou menos isso aqui como estado lá, quando a gente..
41:34Configura o LangGraph, beleza? Então, esse seria basicamente o nosso histórico ali
41:38Esse histórico eu coloquei aqui no finalzinho, tá? Como que eu peguei ele? Eu fiz uma list comprehension aqui em messages, e aí nesse messages eu peguei o tipo da mensagem
41:46Esse tipo pode ser isso aqui, por exemplo, human, AI, system ou tool, o que você tiver colocado
41:56Eu peguei isso no começo, junto com o conteúdo
41:58E aí eu exibi lá, colocando no topo aquele histórico
42:00Maravilha
42:02É, mas vamos, igual eu te falei, vamos mudar
42:04Que que é isso, gente? Eita, que que eu tô fazendo aqui? Aí, agora sim
42:08Eu estava no modo de copiar e colar do buffer, mas voltando aqui, vamos mudar para você ver que qualquer LLM que você colocar, Ela vai se comportar
42:17Claro, cada LM é uma, mas qualquer LLM que a gente colocar aqui, ó, vou colocar agora o GPT OS
42:23GPT OS de 20 bilhões, aqui só para ser menorzinho, ele sobe um pouco mais rápido aqui
42:28Mas, ó, vou colocar o GPT OS e vou executar a mesma consulta
42:31E aí, vamos ver qual vai ser a primeira resposta dele, ó
42:33Oi, Elizabete, tudo bem? Qual assunto você quer aprender hoje? Pode ser qualquer coisa, matemática, história, música, o que te interessa
42:40Aí eu vou falar para ele aqui a mesma coisa
42:42Eu gostaria muito de aprender sobre buracos brancos, que são inversos de buracos negros
42:52Vamos ver o que ele vai falar
42:54Ele está digitando muita coisa, ó, porque está demorando
42:57Depois dá para a gente..
43:00Vou colocar um carregamento ali ou fazer um streaming de cada token que ele estiver digitando, mas isso é mais para frente
43:02No caso, ele digitou bastante coisa aqui
43:04Olha só, se a gente for olhar aqui, olha o tamanho da resposta
43:07Eu não vou ler tudo, tá? Mas, olha lá, eles ok, legal que você quer mergulhar no universo dos multiversos
43:10É um tema que está bastante em alta
43:13Isso aqui que eu acho estranho
43:15Não sei por que isso acontece
43:16Não sei se é meu terminal, se é ele que está respondendo, mas tem hora que ele digita umas coisas estranhas
43:19Parece que é o meu terminal mesmo
43:21Aparentemente, era um problema no meu terminal
43:23Você viu que estava estranho? Mas, olha só, ele deu uma resposta enorme
43:25Aí ele, como eu pedi lá no prompt, para fazer a pessoa pensar
43:29Percebe que ele não dá a resposta, ele fala: "Para montar um plano de estudo, preciso entender na prática
43:35Você já conhece, e tal, relatividade geral, matemática, tarefa rápida, responde às perguntas e assim por diante
43:44Pergunta dois e assim por diante
43:52Tá vendo que isso aqui também é Markdown? Dá pra gente exibir isso aqui bonitinho com Markdown ou até com texto ou com outra coisa que você quiser no próprio terminal também, tá? Isso a gente vai ver depois também, se você engajar nesses vídeos, ok? Mas eu vou fazer o seguinte: eu vou terminar essa aula aqui assim e vou deixar você com esse chat para você brincar com ele
44:01Sempre lembrando, eu vou comitar isso aqui já para te mostrar como é que vai ficar no repositório." Pronto, comitei essas aulas
44:05Então, no nosso repositório, como é que deve estar aqui, ó? A gente já deve ter a pasta src, ó
44:08A gente tem a pasta src
44:10Por enquanto, tem só exemplos, porque a gente não viu nada, a gente não fez nada, ainda é grande
44:16Mas aqui tem o exemplo 01
44:18Coloquei comentários já no arquivo exemplo 01 com tudo que a gente fez, tudo que a gente falou, OK? Coloquei também no exemplo 02 aqui para você
44:26Então, todas essas coisas que eu estou te mostrando, ó, vão estar aí disponíveis nesse repositório para você
44:30E não bastasse isso, eu também tenho a documentação
44:31E na documentação, eu coloquei um link para esses arquivos
44:35Então, se você tiver, por exemplo, neste documento aqui, o segundo, onde a gente está falando de fazer essa configuração e ó, tem..
44:40Tudo aquilo que você viu anteriormente
44:42E lá embaixo, eu vou terminar, mas não vou colocar o código; eu vou te linkar o arquivo para você baixar, para você acessar esse arquivo
44:47Se você quiser o outro arquivo, tem aqui embaixo, onde falamos dessas mensagens, para você entender melhor isso aqui, tá? Beleza? E aí, sempre lembrando para os membros do canal, isso é muito importante para mim, tá? Para você que é membro do canal, uma conversa rápida aqui comigo
45:02Já deixa aí o que você achou desse tipo de aula
45:04Você quer assim? Quer mais rápido, mais superficial, mais aprofundado? Enfim, já deixa para eu ir regulando o ritmo das aulas
45:14Beleza? Então, tô contando muito com a sua ajuda também, você que é membro, para..
45:18Gente, vamos fazer o melhor curso possível, porque vocês já conseguem assistir a essas aulas em tempo real e já me falar o que querem que eu adapte na próxima aula, ok? Então, dito isso, na próxima aula a gente continua
45:27Talvez já venhamos falando de LangGraph de uma vez, né?