eu vou te mostrar como eu criei um nutricionista personalizado onde ele gera para mim um plano alimentar com base nos alimentos que eu tenho na minha casa Além disso ele calcula uma tabela nutricional com base numa foto que eu passo para ele do meu prato de comida e isso é muito poderoso porque assim eu consigo ter o controle da minha dieta em qualquer lugar que eu tô apenas utilizando o telegram aqui no meu smartphone todos os dias eu perco bastante tempo pesando e anotando todas as refeições que eu faço diariamente e eu já usei diversos
aplicativos diferentes com a promessa de simplificar o controle da minha dieta muitas vezes eu como fora de casa então pesar a comida e anotar em algum aplicativo pode ser uma tarefa super burocrática Ao decorrer do meu dia a ideia aqui é te mostrar como a programação junto com a inteligência artificial não é mais uma uma ferramenta e sim um super poder que você precisa aprender e eu vou utilizar esse projeto super simples para te provar isso e eu comecei com uma simples ideia que é como que eu posso utilizar a programação para simplificar a minha
rotina a solução ideal é que eu tivesse um nutricionista personalizado e que ele conhecesse cada detalhe da minha rotina de alimentação e também calculasse para mim todas as calorias ingeridas por cada refeição pessoal mas antes disso deixa eu só dar um aviso aqui esse projeto não substitui um profissional da área da nutrição mas busca ajudar a organizar a tua rotina de uma forma mais prática e personalizada para cada caso Então pessoal já que o aviso foi dado agora vamos pro que interessa que é o nosso código então aqui eu já tô com a ideia aberta
tá já abrir a ideia dentro de uma pasta aqui ó nutricionista a nossa ia nutricionista primeira coisa que eu vou fazer aqui é criar o meu arquivo que vai gerenciar esse projeto para criar esse arquivo caso você não utilize o potre você pode fazer isso com PIP no caso do PIP ele não vai criar um arquivo ele vai só gerenciar o seu projeto Tá mas eu gosto de usar o potre se você quiser usar também Tudo bem fica o seu critério tá então para isso eu digito o comando poet trinit ele vai fazer algumas perguntas
aqui sobre o o projeto eu vou dando enter para todas Ok após isso ele vai criar aqui na base um p Project ptl esse arquivo aqui vai centralizar todas as bibliotecas que a gente vai fazer o download para dentro desse projeto tá então a primeira coisa que a gente vai fazer aqui é criar o script do nosso agente esse projeto consiste em três scripts diferentes tá o primeiro script vai ser o script do nosso agente o segundo script vai ser ã uma implementação de uma ferramenta que o agente vai utilizar tá e o terceiro script
vai ser a nossa implementação com o telegram que é onde a gente vai se comunicar com esse nutricionista tá então a gente pode criar aqui o script do nutricionista ponto pai aqui nesse script a gente vai criar uma classe tá a gente vai dar o nome para ela de nutricionist Agent Ok e vamos criar um inicializador que vai se encarregar de configurar a nossa classe tá perfeito aqui nesse init que vai ser o inicializador da nossa noa classe né isess aqui é um método Mágico do Python onde ele inicia a classe é uma pré-configuração da
classe Então a gente vai criar configuração pra gente se conectar com o chat GPT lá né com o Api da Open ai para isso eu preciso baixar uma biblioteca mas antes disso eu vou ativar aqui o meu ambiente de desenvolvimento tá com potre eu utilizo poetri Shell para isso ele vai dar aqui o meu interpretador eu vou só configurar o meu interpretador aqui na minha ide tá então entra com o pf do interpretador só pra ide reconhecer as bibliotecas que eu já tô colocando aqui dentro do projeto tá então perfeito agora a gente vai baixar
a primeira biblioteca que é a biblioteca que vai fazer essa conexão com chat GPT pra gente com ap lá do Open ai para isso eu vou utilizar o poad o nome dessa biblioteca se chama L chain Open ai então vocês dão enter a gente aguarda fazer o download perfeito então terminou o download aqui a gente pode importar ela aqui em cima então from Open from L chain Open ai já tá até ali deixa eu deletar aqui que que eu fiz Import chat Open ai então para fazer essa conexão a gente vai utilizar essa biblioteca aqui
dentro do leng chain tá a gente vai utilizar Então essa biblioteca aqui para fazer a conexão com o chat GPT tá pessoal então agora a gente vai criar uma pré-configuração aqui dentro do nosso init tá essa a gente vai chamar então self.msg uns parâmetros tá o primeiro parâmetro que a gente precisa passar é o modelo né então qual qual que é o modelo do do chat GPT que a gente quer se conectar Então a gente vai querer se conectar com o GPT 4 4 traço mini esse aqui pessoal até a atualidade tá até a data
desse vídeo é o modelo mais barato que tem no chat GPT pra gente fazer uso não só mais barato né mas na questão do custo benefício também velocidade de resposta e e assertividade também tá então aconselho que vocês usem esse também como segundo parâmetro a gente vai passar a temperatura na temperatura a gente pode deixar 0.0 tá ou 0.1 eu vou deixar 0.1 a temperatura significa a criatividade que esse modelo vai ter então a liberdade criativa que nós estamos dando para ele quanto mais alta a temperatura mais o modelo será criativo né então menos ele
vai se basear no PR e quanto menor a temperatura mais fiel a prompt ele vai ser tá E é isso então beleza A gente vai criar também um objetivo para esse agente então a gente precisa criar um prompt que a gente pode chamar de System prompt tá que é uma descrição do que é e do que se a gente vai fazer Tá eu já tenho essa descrição aqui pronta vou só copiar para não ficar tão extenso esse vídeo tá então eu vi aqui jogo aqui e a gente lê junto ó vamos lá ã tá escrito
assim então back history como objetivo né Deixa eu só abrir aqui grande esse agente é uma referência global no campo da nutrição apelido de Mestre dos alimentos ou nutrólogo Supremo consultado por celebridades atletas e profissionais da Saúde ele desenvolve planos alimentares personalizados equilibrando saúde desempenho e sustentabilidade com vasto con cento em bioquímica e dietas globais como mediterrânea cetogênica ayurvédica é defensor do consumo consciente e da preservação ambiental agora ele expande sua expertise para o mundo digital oferecendo orientações de alta qualidade pelo telegram para ajudar pessoas a montarem suas próprias dietas e responder dúvidas sobre alimentação
aqui é o resultado esperado então o que que eu espero dele agora então o agente deve ter um visual que una su sua autoridade com acessibilidade de um consultor digital imagine um homem de meia idade com expressão Serena e postura energética Ele deve estar vestido de maneira elegante moderna usando uma camisa branca com detalhes que remetem a plantas e nutrientes com jaleco médico casual seu entorno Deve mostrar ícones sutis de nutrição gráficos de nutrientes alimentos de diversas culturas e elementos químicos criando um ambiente que pareça um laboratório virtual de alimentação Então pessoal vocês podem notar
que aqui nesse System prompt a gente criou como uma historinha né desse desse agente isso é de suma importância Tá quanto mais detalhes a gente trazer aqui melhor esse a gente vai se comportar assim como a gente quer tá então Caso vocês queiram alguma coisa específica por exemplo você é vegano Então seria legal a gente colocar aqui sobre dietas veganas né então a ente específico para pro teu caso de uso então fica à vontade de modificar esse esse System prompt aí da forma que você achar necessário Tá eu vou só dar um Tab aqui para
corrigir a indentação perfeito tá Então pessoal a gente já tem o nosso prompt aqui feito tá ã e a gente já tem a nossa llm configurada agora a gente precisa baixar algumas bibliotecas responsáveis por configurar o nosso agente então o nosso agente vai ser o cara que vai usar uma llm que é o nosso modelo de linguagem tá ou esse agente também ele vai servir para centralizar outras coisas que a gente vai falar um pouquinho mais pra frente tá para isso a gente precisa aqui de novo baixar outras bibliotecas do leng chain tá o lchin
Ele separa suas bibliotecas Então a gente tem que fazer download de várias delas Então vamos lá então poetri add a gente pode escrever assim leng chain traço community aí a gente vai fazer o download de uma outra também que é o leng chain Hub vamos fazer de uma outra também que é o leng graph a gente vai fazer o download também do L chain Core e do pacote padrão só leng chain Então vamos aguardar fazer o download de todas as bibliotecas então perfeito fez o download aqui agora a gente vai precisar chamar uma biblioteca aqui
em cima importar no caso né Import então initialize Agent fica from L chain Agents na verdade aí agora sim V ver se eu acho ela aqui e gente tá perfeito achou aqui então a gente vai criar o nosso agente tá então Lembrando que o nosso agente ele vai usar o nosso modelo de linguagem que a gente já configurou aqui em cima tá então a gente faz um atributo de classe aqui self Agent onde recebe initialize Agent então aqui dentro dessa função aqui do leng chain ele vai me retornar aqui a gente consegue ver ó deixa
eu um agente Executor que é o que a gente quer tá mas para isso a gente precisa passar alguma configuração aqui a primeira delas é a nossa llm Então qual que é llm que a gente vai usar a que a gente configurou aqui em cima então a gente passa self P llm Ok a próxima configuração aqui são as Tools que esse ag gente vai usar tá como a gente não criou nenhuma tu ainda a gente vai passar uma lista vazia então não tem nenhuma tu nessa lista de TS nessa lista de ferramentas do nosso agente
Então pode passar uma lista vazia por enquanto depois a gente passa aqui a Tools quando a gente criar tá uma outra coisa que que a gente precisa passar para esse agente também é o tipo desse agente tá E para isso a gente pode também importar aqui ó então ag gente Type e aqui a gente passa o seguinte no parâmetro Agent a gente faz Agent Type ponto chat conversation react description Então pessoal essa aqui é uma configuração que a gente tá passando pro gente que ele vai saber que a comunicação dele com o usuário vai est
partindo de um chat então é importante que a gente ponha isso também tá então uma um outro parâmetro importante aqui que é um parâmetro de debug tá é o parâmetro verbose então a gente quer que que o verbose do nosso agente seja true tá é importante também pra gente conseguir depurar caso alguma coisa aconteça de errado tá uma outra coisa que a gente precisa passar também é um agente k args aqui nesse agente Car args a gente vai abrir um dicionário aqui dentro desse dicionário a gente vai passar uma chave com um valor tá que
que a chave vai ser System prompt e como valor então dois pontos a gente vai passar o quê esse cara aqui que é o nosso prompt então passando ele aqui então perfeito pessoal então é isso a configuração do nosso agente tá então só recapitulando aqui criamos a classe inicializa classe dentro dessa inicialização tem toda essa configuração que é configuração da nossa llm tem a criação do nosso prompt inicializando o nosso agente tá com todas as configurações certinhas aqui tá Agora eu vou criar um método aqui embaixo que é um método da nossa classe que é
o método responsável por executar esse agente tá com todas essas configurações então a gente pode chamar esse método de Run tá não tem problema a gente passa o selfie aqui dentro aqui da desse método a gente vai fazer todo esse escopo dentro de um try caso de erro a gente consiga capturar esse erro então aqui dentro do try a gente vai passar e uma variável response que vai ser a resposta do nosso agente Então vamos armazenar a resposta do nosso agente aqui nessa variável response e a gente chama o nosso agente aqui então selfie p
agente pon Run tá esse Run é um método já de dentro dessa classe que ess esse essa função nos retorna tá que é o agente Executor então ele tem esse método Run dentro desse método Run a gente vai passar um input text tá mas que input text é esse né input text esse input text é as perguntas do usuário Então a nossa conversa através do telegram e ele recebe isso através desse método aqui que é o Run tá então abaixo disso a gente pode até botar um um uma depuração aqui com print que é o
seguinte que é ã Agent response aí faz assim aí interpola o response aqui dentro response para caso alguma coisa de errado aconteça a gente conseguir depurar de uma forma mais fácil tá a gente pode retornar já aqui o response ok E aí caso dê erro nessa chamada a gente vai tratar aqui dentro desse except tá então aqui a gente faz também uma depuração só pra gente ver caso alguma coisa aconteça né Vamos fazer assim ó para deixar bem claro para vocês error e aqui a gente pode passar ã a gente pode capturar aqui nesse Exception
que é Exception as erro e a gente passa o erro aqui para dentro Então pessoal abaixo dessa depuração aqui a gente tem que retornar uma string Por que que é importante retornar uma string aqui nesse Exception né dentro dessa capturação desse erro Porque caso deu algum problema nesse escopo vai cair dentro desse escopo E aí ele retornando uma string a gente consegue retornar isso como se fosse o agente falando lá pro usuário então aqui a gente pode sei lá ã pedir desculpas Então desculpe não conseguir processar a sua solicitação então caso dê erro nesse escopo
aqui vai cair nesse scopo E aí ã devolve esse erro pro usuário que tá esperando lá no no telegram tá Então pessoal a primeira configuração do nosso agente é essa tá a gente pode até abrir aqui um outro arquivo chamado de app.py pra gente importar o nosso agente Então vamos lá from nutricionista Import nutricionista Agent aí então a gente faz aqui Agent igual a nutricionista Agent e Agent Run e aqui dentro a gente precisa passar a nossa conversa Então o que a gente quer perguntar para nossa agente Mas antes a gente precisa criar aqui na
rede do nosso projeto um arquivo chamado ponto env tá esse arquivo vai ser importante porque a gente precisa configurar a nossa chave de acesso pro chat GPT então então vocês precisam entrar lá no no site da api do chat jpt e gerar sua chave de acesso né então a sua apiq então só botar isso aí no Google apq chat GPT gera de vocês e aí tem que colocar aqui dentro tá para isso funcionar certinho ela precisa est com o nome correto Aqui tá o nome disso é open ai apiq tá então aqui vocês vão passar
a API de vocês tá então eu vou copiar a minha Essa apiq ela é privada então vocês não podem mostrar para ninguém tá por isso que eu tô borrando aqui a minha que é para vocês não verem e roubar a minha pq Tá mas isso aqui precisa tá configurado aqui então uma vez feito esse arquivo a gente volta aqui pro nutricionista e baixa mais uma biblioteca que é pra gente carregar as variáveis de ambiente desse arquivo então potre add Python traço d env e a gente dá enter e Aguarda a biblioteca fazer o download Ok
fez o download a gente importa a biblioteca aqui então from env Import load env então o que que a gente tá fazendo aqui a gente tá fazendo o carregamento do nosso arquivo do env Tá e isso aqui é uma função então a gente precisa executar ela Então pronto então fazendo isso daqui a nossa llm Então essa classe do chat GPT já vai conseguir capturar essa nossa chave que tá aqui dentro do nosso arquivo DM então é de suma importância que vocês façam isso aí também tá então beleza então agora a gente pode testar o nosso
agente aqui a gente pode passar assim olá você pode me ajudar com uma dieta Então vamos executar esse cara aqui e ver o que que ele nos responde tá então executando ele aqui Então pessoal feito o download das bibliotecas que a gente precisa do L chain agora a gente vai precisar importar algumas delas aqui tá Então a gente vai precisar primeiro importar a biblioteca que vai inicializar o nosso agente Então vamos lá from leng chain Agents Import initialize Agent tá outra que a gente vai precisar também dentro da da Lib do leng chain from leng
chain P memory tá Import conversation Buffy Memory Por que que é necessário ess essa memória tá quando a gente fala com o GPT através da api o GPT ele não salva na memória as conversas anteriores então se eu me apresentar pro GPT prazer GPT Meu nome é Samuel e perguntar de novo numa próxima requisição para api GPT Qual o meu nome ele não vai saber então ele precisa armazenar essa memória em algum lugar então é com essa essas bibliotecas que a gente vai fazer o uso dessa memória vai fazer o armazenamento dessa memória tá então
a gente precisa de outras bibliotecas para isso também então do L Memory conversation Buff Memory é uma biblioteca a outra é no lang community então from Lang community ponto chat histories SQL chat message History por que que essa biblioteca Por que que a gente vai precisar dessa biblioteca a gente vai usar essa biblioteca para para fazer o salvamento dessa memória mas a gente vai salvar isso num banco de dados SQL e a gente vai utilizar o SQL Lite para fazer essa configuração tá que é um banco de dados bastante enxuto e bem conhecido aí tá
então se vocês colocar SQ Light no Google vocês vão poder ver a documentação dele lá tudo certinho tá não precisa disso para agora até porque a implementação aqui é bem simples tá então tendo essas bibliotecas importadas do nosso código a gente pode começar a configurar o chat History do nosso agente tá então vamos lá vamos fazer aqui uma propriedade de classe chamada chat History aonde recebe SQL chat History message tá Para Isso pensa assim que várias pessoas diferentes vão poder conversar com o nosso agente através do telegram tá então esse esse chat aqui até eu
escrevi errado vamos corrigir aqui esse chat ele precisa ser armazenado diferente para cada usuário porque eu sou Samuel mas você não então além da gente ter o salvamento do do histórico dessa conversa a gente precisa atrelar esse histórico ao usuário do qual essa conversa é dona né então aqui nesse inicializador a gente vai precisar passar um session ID que esse session ID a gente vai pegar lá do telegram quando a gente implementar isso tá e além do mais a gente também precisa H passar o nome do do banco de dados tá que a gente vai
armazenar Então qual que vai ser o nome do arquivo tá esse banco de dados ele salva tudo em um arquivo apenas que é a característica do SQL Light que é o que a gente vai utilizar então a gente pode passar um outro parâmetro aqui que é o DB pef Então a gente vai querer que e o manco de dados SQL L Ok então a gente passa dois pontos barra barra e a gente fala agora qual que vai ser o nome desse arquivo então a gente pode chamar de memory PDB tá então passando essa essa configuração
aqui então aqui a gente define que a gente quer o sk Lite tá e passando Memory PDB ele vai criar esse banco de dados aqui na raiz do nosso projeto perfeito Então vamos lá então passando essa configuração aqui a gente volta pro nosso SQL chat message History aqui então aqui a gente vai passar o parâmetro session ID igual a gente passa o nosso sess ID vírgula e aqui a gente vai passar uma Connect Connection e essa conexão vai ser a partir do nosso DB pef então perfeito então aqui a gente já configurou o SQL chat
message History agora a gente vai configurar o nosso buffer tá que é o nosso conversation buffer que é através dessa classe que o nosso agente vai salvar e buscar essas informações do banco de dados automaticamente se a gente precisar configurar nada mais tá então vamos lá então aqui seria a nossa Memory de Fato né então a gente define um atributo de classe aqui que é selfie Memory aonde a gente passa o nosso conversation Buff Memory e aqui também a gente vai precisar passar alguns atributos para dentro dessa classe aqui tá Então a primeira vai ser
a nossa Memory Key Memory ke a gente pode passar uma string que é chat History como segundo parâmetro a gente vai passar o nosso M noss self chat History que é o nosso histórico do chat e aqui a gente vai passar uma outra configuração que é oag no plural e aqui Pass umle duração da nossa memória persistência de memória do nosso agente tá agora a gente pode configurar o nosso agente utilizando essa função aqui então a gente cria a propriedade do nosso agente aqui self Agent iG initialise Agent aqui a gente executa e também passa
uma configuração aqui para dentro tá essa configuração é a primeira dela é qual é a nossa llm né então a gente já configurou ela aqui em cima então a gente passa ela aqui self P llm Então a próxima configuração aqui são as nossas Tools por enquanto Nossa gente não tem nenhuma tup que a gente não criou ainda tá então a gente pode passar como uma lista vazia a próxima é um parâmetro que a gente passa Agent E aí aqui em cima ao lado do nosso initialize Agent a gente pode importar mais uma Lib tá que
é o Agent Type tá essa Lib é um enum tá que é uma pré-configuração já pronta que o leng nos traz que eu consigo dizer pro meu agente que esse agente ele vai acontecer esse agente ele vai funcionar a partir de um chat então é em letras maiúsculas eu escrevo chat conversational react scription perfeito Então essa aqui é a configuração que eu digo pro meu agente que que esse agente vai funcionar através de um chat tá que no caso vai ser o chat do telegram tá então mais uma configuração aqui eu posso passar o verbose
só não e maiúsculas e minúsculas verbose igual a true que é a nossa verbosidade do agente então o quanto esse agente vai printar aqui no terminal o que ele tá fazendo Tá isso daqui é para fins de depuração é importante colocar isso senão a gente não vai conseguir visualizar aqui no terminal Quais são as ações desse Agente tá se ele tá chamando alguma Tool se ele fez a requisição pro chat da da da da Open ai enfim essas coisas tá então como último aqui a gente vai passar o nosso Memory que no caso é o
nosso selfie P Memory e na verdade tem mais uma configuração aqui que a gente vai vai falar pro nosso agente Qual que é o objetivo dele né que é o nosso System prompt então aqui a gente passa Agent k args aonde é um dicionário que tem uma chave chamada System message e esse System message recebe o nosso System prompt então perfeito então a gente já tem a nossa llm configurada aqui a gente já configurou também o nosso prompt criou o prompt temos também o nosso histórico do nosso chat né o histórico das mensagens com esse
agente e inicializam o agente aqui agora a gente vai criar uma função aqui que vai ser responsável por executar esse agente quando a gente quiser né então self Run a gente pode chamar tá é uma função de classe Então tem que passar o selfie e como um atributo vai ser o input text que seria o input do usuário né então o que que o usuário e vai perguntar para esse agente então a gente passa através dessa desse atributo aqui que essa função a gente vai usar lá na nossa implementação com o telegram tá então dois
pontos aqui no escopo a gente cria o try porque a gente vai chamar a gente vai fazer essa chamada dentro de um bloco try tá para caso aconteça algum problema a gente capture esse erro e consiga tratar e fazer alguma coisa para não quebrar o nosso projeto tá então aqui a gente define o seguinte uma variável chamada response que é onde vai armazenar a resposta do nosso agente então a gente chama o agente aqui então self Agent P Run passando pon Run passando o nosso input text então perfeito essa aqui já é a chamada então
aqui ele já deve conseguir enviar o que a gente quer lá pro chat GPT E aí devolver a resposta e botar dentro dessa variável response a gente pode botar até uma depuração simples aqui com print aonde a gente fale o seguinte ã Agent response E aí a gente passa o response aqui para dentro pra gente conseguir depurar isso daí de forma mais fácil e aqui retorna response que é a função cas dê tudo certo retorna a resposta do nosso agente tá então caso deu algum erro nesse escopo aqui e a gente tá dentro de um
bloco try a gente cria aqui a exceção né Exception as erro o que que eu faço vou botar uma depuração aqui que é error e printo esse erro aqui e aqui eu preciso retornar uma string por quê Porque caso deu algum erro aqui eu preciso dar algum retorno pro usuário que tá esperando lá no telegram então a gente pode escrever o seguinte desculpe não não foi possível processar sua solicitação então a gente não deixa o usuário sem resposta lá do lado do telegram então perfeito mais uma coisa que a gente precisa fazer aqui é fazer
o download de uma biblioteca tá ã para carregar as nossas variáveis de ambiente tá então a gente precisa fazer o download da biblioteca Python traço do env então eu dou potre add python.env vamos esperar ela fazer download aqui então perfeito ela fez download aqui e a gente cria aqui na base do nosso projeto o nosso arquivo dnv por que que isso é importante a gente sabe que pra gente se conectar com o chat GPT aqui a gente precisa de uma apiq que é uma liberação de acesso né então você pode entrar lá no no no
site da Open ai tá Open ai api gerar a sua chave de acesso tá então essa chave de acesso você precisa botar dentro desse arquivo.env eu já tenho a minha aqui e a sua chave de acesso ela precisa estar com esse mesmo nome tá então então Open ai apq igual eu vou colocar a minha tá ã essa chave de acesso é de uso pessoal então por isso que eu tô borrando a minha chave aqui então para que vocês não usem e não e não utilizem dos meus créditos lá na api do chat GPT também aconselho
vocês não compartilharem a sua chave api com ninguém tá então isso daqui é um dado privado seu da sua conta lá no chat GPT não mostra isso para ninguém então perfeito pessoal ã a gente já criou aqui o nosso arquivo D env tá com a nossa chave de acesso e já baixou também a Lib que que vai carregar essas variáveis de ambiente pra gente então a gente tem que chamar essa biblioteca aqui para dentro então vamos lá from D env Import load Envy esse load env é uma função tá então essa função ela precisa ser
carregada que ela vai ser responsável por carregar a nossa variável de ambiente que tá aqui dentro do nosso dot env tá pessoal então beleza então aqui nós já temos a classe do nosso agente tá então agora a gente vai partir para configurar a nossa tool do nosso agente então ã vai ser essa próxima parte então fazer o script que cria a ferramenta uma das Ferramentas né que o nosso agente vai utilizar Então pessoal agora que a gente já tem o nosso agente configurado aqui a gente vai setar para ele ele então a gente vai criar
uma ferramenta tá para que que vai servir essa ferramenta essa ferramenta é uma implementação uma funcionalidade que o nosso agente vai ter então além do a gente conseguir responder as nossas perguntas né então aqui através dessa função a gente vai passar uma pergunta ele vai conseguir nos devolver a resposta ele também vai ter funcionalidades que ele vai poder fazer então uma funcionalidade que o nosso agente pode ter é a gente enviar para ele uma foto do nosso prato de comida e ele devolver uma descrição de uma tabela nutricional aproximada então ele vai identificar os elementos
Então os alimentos que tem nesse prato de comida Então vai definir as porções Com base no que ele tá enxergando da da foto né E aí vai gerar pra gente uma tabela nutricional detalhada mais aproximada né daquele alimento tá então para começar a fazer isso a gente ã pode criar aqui um novo script que vai ser eh food image analyzer ponp e aqui a gente vai precisar importar algumas coisas tá eu vou copiar aqui da minha cola para ficar mais dinâmico ficar mais rápido não demorar tanto o vídeo tá a gente vai importar algumas bibliotecas
aqui a primeira delas é o base 64 tá essa essa biblioteca ela vai ser importante pra gente fazer o encode dessa imagem então a gente não consegue jogar a imagem como um arquivo lá paraa api do chat GPT para isso a gente precisa fazer um encode que é transformar essa imagem em texto o nome disso se chama base 64 tá então é com essa biblioteca que a gente vai fazer isso com a io a gente vai fazer o buffer dessa imagem tá aeng chain P Tools Import base Tools vai ser a nossa classe base da
nossa ferramenta que a gente vai colocar como herança da nossa classe tá real mail message vai ser a classe que a gente vai preparar o prompt Então a gente vai preparar toda essa imagem para ser enviada pro chat GPT tá chatting Open ai é a mesma biblioteca que a gente importou aqui em cima tá então ela vai fazer a comunicação com o servidor do do do chat GPT com servidor da da Open ai tá E essa daqui a que é a nossa biblioteca pillow que é onde a gente vai carregar a nossa imagem né então
a gente precisa fazer o download dessa biblioteca que ela ainda não tem no nosso projeto então a gente faz assim poetri add pillow com dois Ls tá então a gente espera fazer o download Então feito o download aqui pessoal tu vai ver que ela já já não marcou aqui dizendo que essa biblioteca não foi encontrada Tá agora ela já tá sendo encontrada então foi feito o download a gente vai criar uma classe tá com o nome de de food Mage analyzer Tool tá aonde a gente vai passar como herança a nossa base Tool tá então
passando como herança aqui essa nossa classe ela vai receber todas as funcionalidades que essa base Tool tem tá então dois pontos aqui no final e aqui a gente vai passar um nome esse nome ele tem que ser tipado como uma string é o nome da nossa ferramenta então isso daqui são informações importantes pro nosso agente tá então aqui a gente passa o nome da nossa tu da nossa ferramenta então food image analizer e aqui também a gente vai passar uma descrição tá então description para que que serve essa descrição ela também é uma string tá
essa descrição ela vai servir pro ag gente saber quando que ele deve utilizar essa ferramenta então aqui nessa propriedade aqui de Classe A gente vai passar essa descrição então o ag gente ele vai receber o input aqui na nossa classe nutricionista né então ele vai verificar se esse input tem alguma coisa a ver com alguma ferramenta que ele tem disponível caso tenha ele vai utilizar esse input nessa nossa ferramenta aqui que que a gente criou tá então é através dessa descrição então eu já tenho uma descrição pronta aqui eu vou só copiar para ficar mais
dinâmico aqui a explicação então eu coloquei assim utilize esta ferramenta para analisar imagens de prato de comida que o usuário enviar Descreva os alimentos presentes e crie uma tabela nutricional da refeição o agente deve usar esta ferramenta sempre que o caminho da imagem for fornecido mas somente quando o input for um caminho de imagem então é importante isso porque a gente quer que essa ferramenta seja usada apenas se o input for uma imagem né então beleza para isso a gente também vai precisar criar um inicializador da nossa classe tá então aquela função definit e também
a gente precisa passar esse super init para que que serve esse super init para inicializar a nossa classe mãe que tá sendo Dada como herança aqui da nossa classe que é a nossa Tool né então beleza aqui também a gente vai criar uma função que se chama Run mas Run com underline na frente tá então Run e aqui a gente vai passar o self que ela é uma função de classe mas também vai passar o qu a nossa o nosso pef da nossa imagem tá então o pef da nossa imagem vai vir através dessa função
Run e esse pef ele vai ser uma string então dois pontos aqui a primeira coisa que a gente vai fazer é pegar essa imagem e formatar essa imagem então fazer o encode dela para texto foi aquilo que eu expliquei aqui com essa biblioteca base 64 Então a gente vai fazer o encode dessa imagem paraa base 64 que é assim que a gente vai conseguir enviar isso ã lá pro chat GPT né para isso a gente vai utilizar esse trecho de código aqui ó Então a gente vai abrir a nossa imagem aqui com o pilow né
então vamos também instanciar a nossa a nossa classe de buffer a gente salva essa imagem e ã num formato JPEG no nosso buffer tá E aí sim a gente faz o encode em base 64 buscando essa imagem do nosso buffer tá e fazendo o Decode para o tf8 para ser um base 64 em o tf8 tá então aqui eu já tenho a nossa imagem em base 64 tá então agora eu preciso fazer as instruções ã as instruções dessa conexão com o chat GPT então para isso é isso é um prompt também né são as instruções
do que o modelo deve fazer com essa imagem tá então para isso eu tenho as instruções já prontas aqui eu vou só copiar e colar e aí eu explico para vocês então tá então aqui eu coloquei você deve analisar a imagem enviada e verificar se ela contém um prato de comida importante tá ã caso seja um prato de comida Descreva os itens visíveis no prato e crie uma descrição nutricional detalhada e estimada incluindo calorias carboidratos proteínas e gorduras forneça uma descrição nutricional completa da refeição tá então aqui seria como se fosse nosso prompt como se
fosse o nosso System prompt que a gente criou lá no nosso nutricionista a gente também precisa criar aqui porque ã um outra uma outra llm vai ser configurada pra gente conseguir ã ã fazer essa tabela nutricional né pra gente conseguir ã fazer com que essa essa Tool também se conecte lá com o chat GPT tá então para isso eu crio aqui também uma llm que eu uso chat Open ai passando também o modelo tá que é o o chat GPT traço 4 o mini que é o modelo mais em conta que que que é o
a tem hoje na atualidade tá o custo-benefício é ótimo questão de desempenho e custo também valores né de créditos Agora eu preciso criar o corpo da mensagem então a mensagem que vai ser enviada lá para isso eu vou utilizar essa classe aqui Human message tá a implementação ela fica assim aonde eu crio uma mensagem aqui então eu crio uma variável mensage aonde eu abro uma lista e Boto Human message aqui dentro executo a classe passando o os conteúdos né que é o tipo tipo como Text e o texto que são as instruções que é essa
instrução que a gente fez aqui tá aqui como o segundo item dessa lista contente a gente vai passar a nossa imagem de fato então o tipo é uma imagem URL então a imagem URL URL Então tem que passar esse esse parâmetro aqui né então data image JPEG e vírgula base 64 então eu tô dizendo que nessa requisição que a gente tá fazendo lá paraa api do da Open Ai eu tô enviando uma imagem e essa imagem ela é em base 64 num formato original de JPEG e aqui eu passo uma vírgula e como um segundo
parâmetro eu passo a minha imagem base 64 que a gente definiu aqui em cima então a gente já tem a nossa llm configurada dentro da nossa Tool e a nossa mensagem também que a gente vai disparar que a gente vai enviar né então aqui a mesma mesma coisa a gente define uma variável response que vai ser a resposta desse modelo né e aqui a gente usa diretamente a nossa llm E aí em vez do Run igual a gente fez no nutricionista aqui a gente usa o método invoke que é o método que a gente vai
enviar a nossa pergunta e vai receber a resposta né que seria a nossa tabela aqui nessa variável response então aqui embaixo eu vou passar o message que dentro da do invoke que eu passo o nosso mensage e aqui embaixo eu retorno o nosso response perfeito pessoal aqui como a gente tá herdando a nossa base Tool a gente precisa seguir alguns padrões e é exatamente por isso que a gente teve que criar essa função com esse underline na frente porque essa classe já diz pra minha classe que é esse padrão que eu tenho que seguir Então
essa daqui seria a nossa função room síncrona Então ela funcionaria de forma síncrona mas essa classe aqui também me obriga a criar uma uma função por mais que eu não vou implementá-la eu sou obrigado a criá-la né Então porque essa classe me obriga a fazer isso quando eu crio essa implementação aqui de herança Eu tenho algumas obrigações a fazer então uma dessas obrigações é criar esse método Run que a gente já criou que é o que a gente vai usar e uma outra obrigação é criar um método Run só que assíncrono tá para isso eu
já tenho ele pronto aqui eu vou só copiar e colar e explico para vocês tá esse método assíncrono ã a gente vai ter que criar ele com exatamente com esse nome então underline R Run que seria a Run tá então passando image PF aqui para dentro só que aqui eu não preciso criar nenhuma implementação porque eu não vou usá-la eu só tô criando uma assinatura de um método Ok então dentro dessa função para ela não ficar vazia eu lanço uma exceção dizendo que essa função não foi implementada então eu lanço um erro dizendo que essa
essa Tool não suporta a função assíncrona mas mesmo assim eu preciso assinar essa função dentro da minha classe Então é isso que a gente tá fazendo aqui tá então vocês podem copiar esse trecho Então pessoal a nossa classe de ferramentas que o nosso agente vai usar é isso então Passando todas essas informações importantes tá que o nosso ag gente vai se basear para conseguir usar essa função e a nosso método Run aqui com underline na frente aonde ele vai receber essa mensagem ele vai fazer o encode disso paraa base 64 Então aqui estão as nossas
instruções do que que esse ag gente precisa fazer com essa imagem que tá em base 64 a configuração do nosso agente a configuração da nossa mensagem né montando o payload aqui com a nossa imagem e aqui enviando pra pi e pegando o retorno agora a gente precisa importar isso lá na classe do nosso agente voltando aqui no nosso nutricionista que é o nosso agente a gente pode importar essa To então from food image anal er Import food image analyzer e aqui a gente coloca dentro da Tool só que a gente precisa Executar a classe tá
então precisa colocar os parênteses abrindo e fechando parênteses dentro de uma lista que tá dentro do atributo to beleza pessoal agora a gente vai passar a implementar a parte do telegram tá vamos lá então pessoal a gente vai partir agora pra implementação com o telegram para isso vocês podem começar abrindo aí o navegador de vocês tá eu vou abrir aqui o meu Chromium Então pessoal abrindo aí o navegador de vocês vocês podem digitar na URL esse endereço aqui ó então my.telegram.org bar apps então dando enter a gente vai entrar aqui num login onde ele vai
pedir para vocês digitar o número que tá configurado no telegram de vocês tá então eu vou digitar o meu número aqui lembrando que é importante colocar 55 que é o código do Brasil código nacional e o seu código de área Estadual no meu caso é o 51 tá então digita o telefone de vocês que estão vinculados à conta do telegram tá então digitar o meu telefone aqui e aí a gente dá next fazendo isso o telegram ele vai enviar uma mensagem para vocês não no telefone mas lá no telegram então vocês entram no aplicativo do
telegram e que a mensagem vai tá lá então eu vou acessar o meu aplicativo aqui através do computador para mostrar para vocês mas vocês podem fazer isso através do telefone não tem problema tá então aqui você vai ver que ele já entregou um código aqui então eu vou copiar esse código e vou confirmar o código então vou logar na conta ok pessoal muito importante tá prestem bem atenção nessa parte essas informações que estão borradas aqui são informações privadas de vocês da conta de vocês tá então é de suma importância que isso não seja compartilhado com
ninguém então é exatamente por isso que eu tô borrando eh eh essas coisas aqui então H aqui são credenciais da conta de vocês se esses dados forem vazados eh não tem como gerar outro vocês vão ter que deletar a conta de vocês e criar uma outra conta para aí sim ter outros números de credenciais então cuidado com esses dados tá Então pessoal aqui dessas configurações que são confidenciais a gente vai precisar de dois dados tá que é o nosso api id e o nosso api hash então a gente pode copiar e jogar essas informações lá
para dentro daquele arquivo que a gente criou o ponto env então voltando aqui ã na nossa ide a gente vai abrir o nosso arquivo.env e vai colocar aquelas informações aqui dentro então a gente pode ã definir isso como o nosso telegram api id e o nosso telegram api has então aqui vocês vão colocar essa informação aqui que é o Api ID ão voltando na nossa ide aqui api id e no nosso telegram hash copia essa informação aqui que é Nossa api hash e colocamos aqui perfeito então aqui já estamos configurando já já temos as permissões
da api do telegram para conseguir fazer esse acesso tá agora a gente vai partir para uma outra etapa que é criar e configurar o nosso bot lá no telegram tá então voltando aqui ã no telegram a gente pode procurar aqui em cima por esse cara bot Father esse cara que vai ser responsável por a gente configurar o nosso bot tá Então pessoal aqui no bot Father eu vou criar um bot com vocês para vocês verem como que procede essa criação e também como resultado dessa criação o botfa nos devolve um token de acesso né pra
gente conseguir manipular esse bote então além das nossas autorizações que a gente já botou lá no dot env que a gente pegou lá no site do telegram agora a gente vai pegar o token de acesso a esse bot específico então alguns comandos a gente consegue e verificar algumas coisas então por exemplo barra my Bots a gente vê todos os Bots cadastrados nessa conta eu já tenho um que é um bote nutricionista que é esse que a gente tá criando juntos tá mas vamos criar um novo aqui só para vocês verem como que é essa operação
tá então a gente faz barra New bot e aqui ele vai pedir o nome do nosso bot né então ã ã uma uma identificação então aqui eu precisa ser um nome único eu vou colocar ã my bot underline asimov 1 2 3 4 5 só para não ter nenhum repetido underline bot tá é de suma importância que ele termine com bot aqui no final e agora ele pediu um nome que seria o nome fantasia desse bote né então aqui a gente criou um username e a gente criou um nome e agora a gente precisa do
username né então a gente pode botar nutritionist bot asimov então o que que ele tá dizendo aqui que precisa terminar com bot né então a gente não colocou aqui terminando com bot então a gente tira o azimov aqui bota nutricionista asimov bot e dá enter OK agora sim ele liberou aqui a autorização então aqui ele nos deu um token de acesso também esse token é privado tá pessoal então não compartilhe com ninguém porque Esso aí vai dar dor de cabeça depois então ã a gente copia esse token aqui tá E vai jogar dentro do nosso
env tá aqui precisa tá com nome específico vocês podem colocar como telegram token vem aqui copia ã essa informação que é o nosso token Então pessoal aqui no nosso arquivo a gente vai criar aqui uma outra variável que é telegram token E aí a gente copia o nosso token enviado lá pelo bot fader que é esse cara aqui então texto copiado a gente cola ele aqui então beleza a gente tem todas as credenciais de acesso agora tá então o telegram payid o telegram pay hash e o nosso token do bot né telegram token que é
o que a gente gerou lá no telegram com o o bot bot Father né que é o o o bot do telegram que cria Bots pra gente beleza agora a gente vai pro código configurar tudo isso então pessoal aqui de volta pro nosso código então a gente vai iniciar aqui um novo script que é onde a gente vai criar implementação com api do telegram tá então a gente pode criar o script aqui chamado de telegram mesmo PP nesse script a gente vai precisar importar uma bibloteca da qual a gente ainda não tem no nosso projeto
tá nome dessa biblioteca se chama pirog é com ela que a gente vai conseguir fazer essa integração com api do telegram então abrindo aqui o terminal a gente pode instalar com poet assim poet add pir rogram e a gente espera fazer o download então perfeito ã primeiramente aqui nesse script a gente precisa carregar as variáveis de ambiente que estão aqui dentro do meu arquivo D env Então a gente vai importar a biblioteca D env Import load env E aí a gente carrega ã as nossas variáveis de ambiente do nosso arquivo.env assim a gente traz pro
nosso ambiente todas essas variáveis que estão aqui no nosso arquivo tá então a gente fazendo isso a gente já pode começar aqui criando uma classe A gente pode chamar de telegram bot tá aonde essa Classe A gente vai criar um método inicializador que é o nosso init tá aqui também pode ser pertinente a gente fazer o Import de uma classe que vai criar logs pra gente que que significa isso é uma classe que vai gerenciar registros de depuração então com isso a gente vai conseguir ver o que que está acontecendo com essa integração com a
nossa api do telegram tá então a gente pode ã importar aqui a biblioteca loging tá essa biblioteca já é buildin do Python Então não precisa instalar ela e a gente vai passar essa configuração aqui tá que eu vou copiar e eu explico para vocês aqui no init então usando a biblioteca login ã e utilizando essa função que é a função para criar uma configuração básica a gente vai passar os seguintes parâmetros tá que é o formato significa Qual é o formato desse log Então como que esse log vai ser registrado aqui no no terminal para
mim né E outra coisa é qual o nível do log Então a gente tem diversos níveis aqui né então são níveis críticos debug error warning nesse caso eu quero que ele logue todos os logs de nível info para cima então a ordem seria info info debug Warner error e crítico Então essa é a ordem então se eu peço PR se o level aqui ele fica como info então ele vai logar tudo de info pra cima se vai ficar como warning tudo de warning para cima no caso não iria logar se fosse warning aqui ele não
iria logar nada de info e nada de Deb de debug e nada de error nesse caso do level se for info ele vai logar todos os logs então do nível info para cima São todos né então eu quero que ele logue todos os níveis de log Então é isso que que eu defino nessa variável aqui e aqui eu eu pego o meu log e jogo ele dentro de uma propriedade de classe então que eu defino ela como self logger e a partir desse selfie logger é onde eu vou começar a criar os meus registros tá
então o sistema de log já tá configurado Agora eu preciso aqui em cima ã importar a classe do pirog gram tá para isso eu vou precisar de algumas bibliotecas que estão dentro do pyrogram então primeiro ã pirog Import client eu vou precisar também dos filters eu vou precisar também aqui já em outra linha from pirog P handlers Import message handler que é uma classe que vai administrar todas as mensagens enviadas pelo usuário pro bot através do telegram tá eu preciso ã de uma outra classe também aqui dentro do pyrogram que é dentro dos types então
pirog types Import message então que é a classe que vai definir o tipo de mensagem tá então agora aqui como eu já tenho a cliente eu posso começar a configuração do meu da minha aplicação do telegram então eu faço selfie ppp e eu jogo aqui a minha biblioteca client do pyrogram dentro do client eu vou precisar passar algumas informações que informações são essa a primeira informação que eu preciso passar é o nome tá não o username mas sim o nome o primeiro nome que a gente definiu aqui ã quando a gente criou o nosso bot
pelo botfather tá então o primeiro nome que a gente criou foi my bot underline as imov claro que só para deixar explicado para vocês eu criei como exemplo esse bot mas para vocês conseguirem ver como essa informação é passada tá então ã como extrair a informação do Token do bot Mas se vocês analisarem eu vim aqui em my Bots Eu tenho um outro bot Já pré-pronto que é o meu à nutricionistas imov bot tá então eu tenho esse primeiro que eu criei com vocês e esse aqui que eu já tinha criado antes tá então é
esse nome que a gente vai precisar colocar no como primeiro parâmetro aqui então o nome que vocês escolheram vocês coloquem aí eu vou colocar o nome do bote do qual eu já tinha configurado aqui que é nutricionista azimov bot agora como próximos parâmetros eu vou precisar do API ID um outro parâmetro também é o Api hash e um outro parâmetro que eu vou precisar também é o bot token essas informações são as informações que estão dentro do nosso arquivo Envy então agora a gente vai carregar essas essas variáveis Então vai carregar essas kys de autorização
para dentro do nosso script como que a gente faz isso a gente importa aqui em cima uma biblioteca chamada os também não precisa instalar tá pessoal uma biblioteca builtin do pai e aqui através essa biblioteca os é onde eu vou buscar essas environments para definir aqui nessa configuração do meu client do telegram tá então eu faço assim os.get env e aqui dentro eu vou passar o nome do que eu quero Então seria o telegram Api ID então eu venho aqui telegram api id e eu faço a mesma coisa com os outros Claro trocando o nome
da virtual Envy aqui né no no caso agora telegram api hash telegram api hash e a outra seria telegram token então telegram token então beleza então aqui eu já tenho o meu client que é o a a conexão configurada com o telegram tá uma uma outra parte bastante importante é a gente definir os handlers os handlers são as opções de comunicação com esse bot então a gente consegue definir primeiro um handler de mensagem a gente vai precisar porque a gente vai se comunicar via mensagem também um outro handler que a gente vai precisar é um
handler que consegue identificar imagens Lembrando que a nossa Tool ela serve como ela recebe uma imagem e através dessa imagem ela retorna uma tabela nutricional então o telegram ele vai ter que tá configurado para saber o que fazer quando receber uma foto foto uma imagem de um prato de comida né primeiramente a gente pode antes dos handlers a gente pode criar uma função aqui que seria a função de início quando eu der start no meu Agente né então a gente define essa função de forma assíncrona tá pessoal aqui é preciso que Essas funções sejam assíncronas
porque múltiplos usuários podem falar com o mesmo bote ao mesmo tempo tá então Essas funções elas precisam ser assim então eu defino assim aqui Def start que é o nome da função de início eu defino self e aqui eu passo um cliente que é o nosso client e eu passo também uma mensagem que vai ser a mensagem divio que ela é do tipo message dois pontos dentro do escopo da função eu vou fazer o seguinte então toda vez que alguém iniciar uma conversa com o meu bot Eu quero que o meu bot já responda uma
frase de forma automática então eu não preciso que o modelo de linguagem que é a inteligência artificial lá o chat GPT me responda já de prontidão quando eu dou esse início posso usar uma frase padrão tá pessoal então a frase padrão que eu vou utilizar é dentro do menage eu uso uma função que é reply text então reply text significa responder pro usu tá aonde aqui dentro eu posso passar o seguinte vou só copiar aqui e colar aqui para ficar mais fácil então toda vez que alguém iniciar uma conversa com o nosso Bote ele vai
responder olá eu sou sua e a nutricionista envie uma mensagem ou uma foto de um prato de comida para começar então perfeito então iniciou a conversa com o nosso Bote ele já vai responder isso a gente pode criar um contexto de log aqui também Lembrando que a gente com configurou aqui um log aqui em cima então aqui embaixo depois que a gente responder o usuário que iniciou a nossa conversa a gente pode logar algumas informações pra gente conseguir acompanhar isso via terminal então eu faço self log pinfo e colo a seguinte informação aqui vou copiar
aqui da minha cola e eu já explico para vocês então aqui eu coloco uma string onde eu digo usuário e eu pego de mensage o ID do meu usuário tá então usuário tal iniciou a conversa então isso daqui eu vou conseguir acompanhar aqui pelo meu terminal então isso daqui é um modo de debug um modo de depuração pra gente saber o que tá acontecendo por debaixo dos panos tá pessoal então beleza então esse aqui é o nosso método de start um outro método que a gente pode fazer também é é o nosso método que vai
controlar as mensagens então toda vez que o usuário já tiver uma conversa iniciada e ele continuar trocando mensagens agora agora é esse outro método que a gente vai criar aqui que ele também é assíncrono tá então ass Def handle message perfeito aqui também eu passo o self aqui também ele recebe um client do tipo client e também um message do tipo message perfeito aqui eu preciso extrair algumas informações Lembrando que aqui o nosso nutricionista ele recebe um sess ID então isso daqui a gente sabe que é importante porque assim a gente consegue dividir os históricos
de conversa para cada usuário diferente que se comunicar com o nosso bote né com o nosso agente então beleza então a gente precisa extrair algumas informações aqui para passar pro nosso agente para ele saber quem é esse usuário tá a primeira dela seria o nosso user ID que a gente pega de Mage pon user pid outra coisa que a gente precisa também é o nosso user input que seria a mensagem que a gente enviou pro usuário no caso né então user input é igual a message P text Então o texto da mensagem que o usuário
enviou via telegram tá uma outra coisa também que a gente pode fazer aqui que que é legal toda vez que que a gente envia uma mensagem e o robô Ele tá esperando o bot tá esperando alguma ação ou o chat GPT retornar a resposta para ir sim enviar para usuário a gente pode botar uma ação aqui uma Action do nosso cliente né que pode ser uma uma Action de digitando sabe quando uma pessoa tá digitando no chat que aparece lá em cima digitando o Fulano está digitando então é isso que a gente vai fazer vai
mimetizar aqui então vai fazer que apareça a palavra digitando quando o robô estiver pensando ou estiver com alguma ação pendente por retornar pro usuário tá então a gente faz o seguinte aqui como é uma função assíncrona a gente precisa usar o método await tá então await client send chat Action e aqui a gente vai passar o chat ID que é o nosso message pon chat P id e como do parâmetro a gente vai passar uma ação que ação é essa a gente vai pegar essa ação dentro do chat Action essa essa biblioteca a gente precisa
importar lá em cima tá pessoal então aqui vamos importar essa biblioteca agora então from pyrogram P enum Import chat e dentro do sh Action A gente vai procurar pelo typing que é essa ação de escrita que fica aparecendo lá o bot está digitando né é um feedback pro usuário de que algo vai acontecer então ok então feito isso a gente D segmento aqui que agora a gente vai instanciar o nosso agente então a gente precisa trazer o agente para dentro do nosso código aqui então vamos lá nutricionista Import nutricionista Agent perfeito e aí a gente
Estancia o nosso nutricionista aqui dentro como self P Agent igual nutricionista Agent e aqui dentro do nosso nutricionista a gente vai passar o nosso user ID que tá aqui em cima então eu pego session ID é igual eu faço uma formatação para esse de virar uma string tá então ST R abro e fecho parênteses dentro dos parênteses eu boto user ID então perfeito aqui eu já configurei o meu agente que a gente criou juntos né E aí agora a gente vai executar esse agente de maneira síncrona tá pessoal então ã como que a gente faz
isso para executar esse agente pra gente ter o controle dessa execução vamos adicionar um bloco aqui try aonde a gente Define um response que vai ser a resposta desse agente tá E aí aqui a gente vai vai usar uma função do da biblioteca assim K então aqui a gente ainda não importou ela a gente vai fazer o Import agora então Import assim cai e aí aqui eu uso assim ponto get event loop então eu tô buscando o meu o meu meu event loop né e t inferindo uma execução para dentro do meu meu event loop
então Run in Executor e agora eu configuro o meu Executor aqui então a primeira o o primeiro parâmetro é n o segundo é a função que roda o meu agente então agente. Run Lembrando que aqui a gente não executa essa função tá a gente passa ela assim sem abrir e fechar os parênteses tá então importante que que vocês se atentem a isso e por último ã a gente passa o que essa função Run precisa o que que ela precisa ela precisa de um input text que seria o nosso user input então a gente passa aqui
e agora a gente define ã o nosso Exception aqui então accept Exception as error E aí a gente joga esse cara aqui para dentro caso de algum erro eu quero que ele faça um log para mim então Lembrando que a gente definiu os logs lá em cima configurou os logs para isso mesmo então se der algum erro eu quero que ele logue para mim no terminal esse erro aqui me informando qual é o user ID desse erro e qual o erro que tá dando isso tá E claro como a gente fez lá na nossa to
também caso aconteça algum erro eu quero que ele defina isso como uma resposta né então eu defino aqui a variável response é igual uma mensagem eh de erro que eu possa retornar pro usuário então caso aconteça alguma coisa aqui dentro que eu não consiga fazer a comunicação com esse agente ele vai devolver pro usuário pelo telegram é essa informação tá então desculpe ocorreu um erro ao processar sua solicitação por favor tente novamente Tá então a gente não deixa o usuário esperando lá que algo aconteça né então é bastante importante a gente fazer isso e por
fim pra gente terminar essa função aqui de que controla as mensagens né a gente usa o a tratativa await e e devolve essa resposta pro usuário tá então a gente faz mensage pon reply text então perfeito aqui dentro eu passo o nosso response a gente pode também até criar um log aqui pra gente ver no terminal quando essa resposta foi enviada tá então aqui resposta enviada para usuário tal então perfeito Essa é a função que controla as mensagens tá Então pessoal agora a gente vai criar aqui a nossa função rendle que ela gerencia as fotos
enviadas pelo nosso usuário então aqui a gente já criou a função que gerencia as mensagens enviadas pelo usuário agora vamos partir para o handle que gerencia as fotos então aqui é a mesma coisa tá pessoal então é uma função assim também aonde eu defino Def e podemos chamar ela de handle foto ok aqui eu vou passar selfie e também eu passo o meu client que ela é do tipo client e eu passo também uma message que ela também é do tipo Mage aqui dois pontos no final dentro do escopo da função Agora a gente vai
capturar a mesma coisa que a gente fez aqui nessa parte de cima tá a gente vai capturar o ID do nosso usuário e também a gente vai criar essa mesma Action Então vou só copiar aqui para facilitar o meu trabalho Ok então aqui nessa Action eu já tô passando o o o o chat ID aqui para dentro né que é a informação do chat e tô passando a Action que é action typing que é Action do digitando tá a mesma coisa que a gente vez aqui em cima só que em vez de gerenciar uma mensagem
esse handle aqui vai gerenciar a foto tá então tá para isso a primeira coisa que a gente vai fazer com essa foto é fazer o download Então vamos criar uma pasta aqui só para deixar mais organizado então eu vou chamar de Storage Opa escrev errado Storage Ok então perfeito a gente vai salvar aqui dentro dessa pasta tá então todas as imagens gerenciadas pelo telegram então todos os usuários que enviarem mensagens eu vou ter que fazer esse processo tá então o o essa essa função ela vai baixar essa imagem aqui para dentro para a gente conseguir
posteriormente enviar isso lá pro chat GPT que é o que tá acontecendo aqui na nossa tu tá pessoal então a gente pega um pef da imagem Então esse pef vai ser a imagem já dentro dessa pasta Storage tá que a gente vai configurar agora tá para isso eu vou ã copiar aqui eu vou criar ã essa pasta caso a pasta não exista que a gente já criou mas é importante que a gente faça esse processo tá ã aonde eu eu defino que na raiz do meu projeto tem que ter uma pasta Storage Então se essa
pasta não existe cria ela para mim no caso aqui a gente já criou mas não precisaria criar o código já criaria tá automaticamente e aí um próximo passo é a gente fazer o download ã dessa o download dessa dessa imagem né então o usuário mandou essa imagem lá pra gente pelo telegram e a gente vai fazer o download dessa imagem então para isso eu defino o nome desse arquivo então aqui tá acontecendo uma interpolação aonde eu Uno no nome da imagem enviada pelo usuário o user ID do usuário e o ID do arquivo que veio
na mensagem do telegram então pon jpg e aqui eu defino que esse arquivo vai ser jogado para dentro dessa pasta aqui que a gente definiu aqui em cima Storage E aí eu faço download utilizando a tratativa ait então é importante que as funções assíncronas utilizem essa tratativa então aqui nós estamos esperando que algo aconteça então esperando a promessa dessa função tá então beleza então feito isso aqui a gente já tem o download acontecendo para dentro da nossa pasta Storage Qual que é o próximo ponto né já que a gente já tem o download e também
tem o pef da foto ou pef da imagem né o lugar da onde essa imagem tá salva agora a gente precisa definir o nosso agente então definir e ã o nutricionista né então aqui o processo é o mesmo tá pessoal então eu pego esse agente aqui e instanci ele aqui dentro do meu handle foto também e faço esse mesmo processo também com o a io tá então a gente só copia aqui e muda alguns pontos tá então a gente joga aqui embaixo em vez de user input nesse caso ã vai ser o pef da imagem
então foto pef que a gente vai passar aqui ã no caso aqui erro ao processar a mensagem não é mensagem é imagem nesse caso a gente altera e aqui pode continuar o mesmo e eu devolvo a resposta que no no nosso caso caso ã esse bloco aqui do try aconteça de forma correta ele não vai cair no Exception tá então esse response já vai ser a resposta da nossa tabela nutricional do prato de comida que a gente enviou que bateu lá nas nossas Tools e através desse método Run que a gente criou retornou a resposta
então a gente tá capturando essa resposta aqui então a gente tá executando fazendo essa função ser executada dentro do event loop do do do assy do Python tá porque Essas funções Elas têm que acontecer de forma assíncrona e aí retornando à resposta a gente devolve essa resposta pro usuário e faz um log no nosso terminal tá a gente precisa também de um método agora que reproduza tudo isso então a gente criou o handle pra nossa foto a gente criou um handle pra nossa mensagem e agora a gente precisa de um método que Rode esse robô
que deixa esse robô ativo né para que a gente possa usar ele lá no no no telegram a gente pode chamar esse método H Run tá ele é um método de classe mas não vai receber nenhum parâmetro especial a gente pode definir um log para saber quando o robô foi iniciado então bot foi iniciado E aí a gente usa o nosso app que é que a gente definiu aqui em cima do nosso CL a nossa configuração do nosso nutricionista tá então a gente usa ele aqui embaixo e faz o seguinte self R perfeito então a
gente já criou os nossos métodos que vão administrar as fotos enviadas e as mensagens enviadas o método que vai administrar a reprodução Geral do bot agora a gente precisa só configurar esses Hand tá esses Hand a gente pode criar uma função aqui em cima que a gente pode chamar ela de essa função ela não precisa ser assíncrona então def setup handle esse setup handle ele é um método de classe ele só recebe selfie e não tem nenhum atributo especial e aí a gente define o seguinte eu vou só copiar aqui e aí eu explico para
vocês linha a linha tá para ser mais dinâmico Ok então aqui a gente tá definindo o mensage rendle que é a classe a biblioteca que a gente chamou de dentro do pirog Então essa classe imensa de renda é onde eu vou configurar o os meus handles então aqui eu tô configurando o nosso start foi o que a gente criou Aqui tá o nosso método que inicializa o a gente retorna já um texto padrão lá pro usuário também ã eu tô definindo aqui o nosso os nossos filtros pras mensagens que é o nosso método Random message
tá que é esse método que vai gerenciar as nossas mensagens e aqui abaixo é o rle para as fotos para as imagens tá então eu defino os f filtros também defino ele como mensage handle Porque além disso ele é um mensage handle tudo que é enviado no chat do telegram ele lida como mensagem mas tem diferenças porque foto e mensagem ele ele tem uma diretriz um pouco diferente para lidar com isso então aqui se vocês verem os filtros né pras mensagens eu uso o filtro text então ele tá filtrando todas as mensagens aqui e aqui
eu uso o filtro foto tá pessoal e a aí eu jogo para dentro do nosso app que é o nosso bot adiciono os handles que a gente acabou de fazer e configurar então para iniciar aqui no init eu reproduzo essa função que é o setup handle então eu faço self P setup handle e executo ele então pessoal aqui já temos o script do do do nosso bot completo tá agora ã a gente pode já reproduzir ele tá para isso a gente vai centralizar a reprodução dele dentro de um outro script aqui que a gente pode
chamar de app.py então aqui a gente vai chamar o nosso telegram que é o arquivo que a gente criou Import telegram bot e a gente faz o seguinte ã bot é igual telegram bot e a gente faz um bot pon Run perfeito pessoal então agora a gente vai testar para ver se isso tudo tá funcionando aqui então pessoal agora que a gente já tem todo o nosso projeto feito aqui vamos partir pro teste tá então abrindo o telegram de vocês aí a gente pode vir aqui no bot fader e pesquisar por meus Bots tá my
bots aqui ele vai informar ã os nossos robôs que a gente tem disponível tá então aqui esse primeiro robô que eu criei com vocês para mostrar para vocês Como faz esse processo da criação aqui pelo bot fader e esse aqui é o robô que eu já tinha pré-configurado que do qual foi o que eu configurei o token lá no nosso ã na nossa classe do telegram tá então clicando no Bot de vocês ele vai dar um link que é um @ aqui em cima né que é onde tá o nosso bot então clicando ele já
vai abrir a tela ã do bot tá vocês podem configurar uma fotinho para ele tá ã só que antes de dar start do do nosso robô a gente precisa iniciar o servidor então iniciar começar a rodar o nosso projeto Tá então vamos abrir aqui o nosso terminal tá então vou deixar o terminal bem grande aqui e a gente ã vai executar o nosso arquivo app.pay tá então executando aqui Python app.py vai começar a rodar o nosso servidor tá vamos esperar aqui então perfeito já iniciou o nosso servidor aqui tá então ele já tá esperando por
uma ação Vamos abrir de novo aqui o nosso telegram a gente pode dar start então dando start vocês vão perceber que ele já devolveu pra gente Aquela mensagem automática lá daquele handle start que a gente definiu lá na nossa classe telegram e aqui a gente já pode conversar com ele vamos ver se funciona então Olá nutricionista me chamo Samuel você pode me ajudar com a a minha dieta vamos ver o que que ele traz de resposta pra gente então elá ele tá escrevendo lá em cima e ele já nos retornou Então esse retorno aqui já
é o retorno do chat GPT tá pessoal então vamos lá que que ele escreveu aqui ó Olá Samuel Claro estou aqui para ajudar com a sua dieta para começar poderia me informar seus objetivos perda de peso ganha de massa muscular manutenção etc suas preferências alimentares ou quaisquer restrições que você tenha Então vou escrever aqui minha dieta é para ganho de peso pretendo ingerir 2750 calorias por dia vamos ver o que que ele me retorna Então tá escrevendo lá em cima ó que legal essa implementação então ele já retornou aqui tá bem rápido então ele escreveu
ótimo Samuel para ajudá-lo a atingir sua meta de 2750 calorias por dia para ganho de peso podemos montar um plano alimentar vamos incluir refeições ricas em proteínas carboidratos complexos e gordura saudáveis Você tem alguma preferência alimentar ou restrições que eu deva considerar ao montar o plano então escrevo não tenho nenhuma restrição mas pretendo utilizar apenas alimentos não muito caro vamos ver o que que ele traz pra gente como opção veja que legal pessoal essa implementação então ã você já tem um nutricionista aí respondendo pelo telegram Tá e isso vocês podem utilizar também ã pelo celular
tá então vamos ver o que que ele trouxe aqui ó perfeito Aqui está um plano alimentar diário para você focado em alimentos acessíveis que tornam aproximadamente 2750 calorias Então vamos lá como o café da manhã ele me deu até horário ali que legal ó às 7 horas da manhã 3 cozidos duas fatias de bão integral uma banana uma colher de sopa de manteiga de amendoim Lanche da manhã às 10 aí uma maçã uma perira 30 g de amêndoas ou castanhas almoço deu meio e30 lanche da tarde 15:30 café da tarde às 18 então aqui ele
me deu todo o meu plano alimentar aqui então vamos testar aquela parte agora que a gente envia ã uma imagem para ele e aqui no meu telefone eu tenho uma imagem de um prato de comida então eu vou usar pelo telefone para vocês verem que funciona também tá então vou abrir aqui o meu telegram e eu vou enviar aqui um anexo de um prato de comida deixa eu achar Ok eu peguei um prato de comida no Google Imagens tá pessoal então enviei aqui para ele então tá aqui o prato de comida ele tá digitando vamos
aguardar aqui ele vai é para ele gerar Nossa tabela nutricional vamos vamos torcer para que que funcione Então vamos aguardar pronto então ele me retornou aqui uma mensagem bem grande vamos lá a imagem apresenta um prato de comida que contém os seguintes itens arroz branco feijão provavelmente feijão preto ou feijão carioca ovos cozidos tomates cortados legumes variados pimentões cebolas um acompanhamento que parece ser carne moída Então acho que ele achou que isso aqui é carne moída não tenho certeza nessa imagem tá mas ok vamos dar essa chance para ele ele tá tentando né analisar o
prato de comida e assim ele criou essa essa tabela nutricional pra gente né descrição nutricional estimada então aqui ó ele deu essa tabela nutricional ã com base ã individual nos alimentos então arroz branco deu em torno de 200 g feijão ovos cozidos Nossa bem legal a resposta dele então assim tô bem satisfeito ã tomates então aqui deu quatro unidades pequenas de tomates legumes variados carne moída e aqui ele deu um total da refeição então ele disse calorias totais desse prato tem tem ã 893 calorias carboidratos totais 101 G proteínas totais 48 G gorduras totais 32.4
G Então ele deu uma consideração aqui ó esta refeição é balanceada fornecendo uma boa quantidade de proteínas e carboidratos além de incluir vegetais que contribuem com fibras e micronutrientes é importante considerar as porções e Preparações dos alimentos pois isso pode influenciar as quantidades nutricionais Ok vamos vamos fazer uma pergunta aqui diferente para ele ó e se eu tivesse em uma dieta de peso de de perda de peso essa comida Seria uma boa opção vamos ver como é que ele lida com isso então ele me retornou aqui ó se vocês tivessem uma dieta de perda de
peso essa refeição poderia ser uma boa opção dependendo das porções e do seu Total calórico diário a combinação de arroz feijão ovos legumes fornec uma boa quantidade de proteínas e fibras que ajudam na saciedade noentanto é importante controlar as porções especialmente carne e a do arroz para garantir que você esteja com déficit calórico além dis Além disso Considere a inclusão de mais vegetais e a redução de alimentos menos calórico Se necessário então ele analisou então ele não disse que não tá 100% ruim para uma dieta de perda de peso mas ele disse talvez se a
gente reduzir as porções fosse fosse melhor então mais ou menos isso que ele disse então deixa eu fazer mais uma pergunta aqui para ele então vamos pedir para ele gerar aqui uma uma dieta para perda de peso então Gere uma dieta para mim para perda de peso vamos ver o que que ele me retorna então aqui ele trouxe também uma dieta separada pelos horários então café da manhã Lanches almoço lanche da tarde jantar ceia Então é isso pessoal o bote tá pronto vocês podem pegar essa base tá isso aqui é uma base de um projeto
claro que isso ainda é bem simples mas com isso vocês já devem conseguir fazer as variações de vocês Lembrando que o o que manda mais aqui seriam os prompts né então quanto mais eu elaborar o prompt e mais deixar ele personalizado pro meu caso de uso melhor ã vai ser as respostas desse nutricionista para você então se você é vegetariano ou se você tem alguma restrição alimentar eh intolerante à lactose ou se você é diabético coisas desse gênero eu acho importante colocar isso no prompte descrever certinho como se fosse um nutricionista criado especificamente para você
tá Então esse é é o projeto tá lembrando que eu vou deixar o github desse projeto então o repositório desse projeto aqui embaixo Então se vocês não quiserem ã escrever isso tudo na mão aí linha a linha igual a gente fez aqui vocês podem acessar aí o github do projeto e copiar de lá tá não tem problema tá pessoal se tu ainda não sabe como fazer projetos como esse utilizando Inteligência Artificial eu venho aqui te dizer que a zimov preparou um curso totalmente gratuito tu não vai pagar nada por isso mas você precisa firmar um
compromisso com você mesmo e essa decisão com certeza vai ser um salto de conhecimento em qualquer área que você atua mas isso só depende de você então pessoal aqui no vídeo vai ter um link que vai te encaminhar lá pro curso gratuito de Inteligência Artificial Então você só vai precisar fazer um cadastro na plataforma e aproveitar esse presentão da equipe das imóv então p pessoal eu vou finalizando aqui tá espero que vocês tenham gostado um forte abraço tchau tchau