📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

The Ultimate PDF Chat Bot using Expandable Storage on Replit

Replit10:38

Transcription

Armazenamento expansível chegou ao Repl, significando que seus Repls não são mais limitados a um gigabyte, mas sim apenas pelo tamanho do seu plano. Vamos dar uma olhada em como usar embed chain e armazenamento expansível para criar um arquivo de conhecimento em PDF que pode ser consultado com uma IA, e vamos tentar fazer isso o mais barato possível.

Ok, para começar, tudo o que você precisa fazer é criar um novo Repl. A nova funcionalidade está integrada ao seu plano, que você pode encontrar na página Meus Ciclos. Se você for para sua página de conta, poderá rolar para baixo e ver o armazenamento que você tem. O armazenamento é atualmente de 10 gigabytes para nosso plano gratuito, 20 gigabytes para nosso plano Hacker e enormes 50 gigabytes para nosso plano Pro. Claro, também oferecemos opções de armazenamento à la carte, onde você pode comprar até 256 gigabytes para seu Repl, o que deve ser suficiente para quase qualquer projeto profissional.

Vou apenas criar um Repl. Vou escolher um Python, torná-lo privado e dar-lhe um nome sensato. Agora, a etapa um é que vamos instalar o embed chain. Normalmente, usamos o gerenciador de pacotes para isso. Esta é uma maneira eficiente e agradável de fazer as coisas, pois organiza as coisas depois de si mesmo. Mas, como o tamanho do Repl não é mais um problema para nós, vamos usar o método antigo e usar o pip para obter uma versão específica. Vou trazer os recursos do Repl para que possamos ver com mais detalhes sobre quanto tamanho e quantos recursos estou realmente usando. E você pode ver que, de cara, este Repl está ocupando 134 megabytes. Então vou entrar no meu shell e vou usar o pip para instalar uma versão específica do embed chain. O pip permite que peguemos a versão exata, e isso vai demorar um pouco. E lembre-se, você sempre pode acelerar isso aumentando a CPU no seu Repl, mas ele vai pegar todos os pacotes e todas as dependências e instalá-los. E você verá que o tamanho deste Repl já está crescendo à medida que ele instala a enorme quantidade de dependências de que precisa para executar tudo o que o embed chain precisa. A instalação antiga do pip significa que podemos ter mais controle sobre o que foi instalado em nosso ambiente Repl.

Embed chain é um projeto fantástico que nos permite incorporar PDFs, vídeos do YouTube e conteúdos de bate-papo, tudo em Bots. Ele também nos permite usar os Bots da OpenAI, bem como os de código aberto. Então, é uma biblioteca realmente poderosa e algo realmente útil para aqueles de nós interessados em IA. Agora, observe o tamanho do nosso Repl. Usar o pip install é ineficiente em comparação com nosso gerenciador de pacotes. Nosso Repl agora tem dois gigabytes de tamanho, mas simplesmente se expandiu para usar o armazenamento disponível para nós em nossa conta. Isso é mágico! Se alguém já se deparou com esse limite rígido no passado, concordará comigo. Mas agora que temos esta versão do embed chain funcionando, podemos começar a usá-la em nosso arquivo Python.

Então, a primeira coisa a fazer é verificar se tudo está funcionando bem. E vamos dizer: from embed chain import app. Agora, o app é a parte do embed chain que simplesmente cria o chatbot e permite que as incorporações sejam armazenadas. Vou chamá-lo de chat_app = app. Em nosso gerenciador de segredos aqui, adicionamos um segredo. Vamos chamá-lo de openAI API key, e na caixa de valor, você vai colar sua chave de API openai. Então, com isso salvo, podemos clicar em executar novamente, e tudo deve estar bom com o mundo. Lá vamos nós. Então, executamos, não fez nada, porque ainda não chegamos lá. Reserve um tempo para instalar essa versão do embed chain e verificar se tudo está funcionando corretamente. O que vamos fazer é algo muito bom neste app. Vamos criar uma pasta cheia e vamos preenchê-la com PDFs que queremos consultar. No meu caso, vou construir um bot que é o tutor de programação definitivo. Baixei um monte de PDFs gratuitos que nos ensinam a programar em dezenas e centenas de linguagens diferentes. E o que vou fazer é simplesmente colocá-los todos na pasta. Então vou criar uma pasta aqui em cima e chamá-la de docs. Vou pegar um monte deles e vou colocá-los nesta pasta. Na verdade, se trouxermos nossos recursos de volta, você verá que os tamanhos aumentaram novamente. E, na verdade, posso preencher essa pasta com quantos livros quiser. Eu tenho cerca de 120 PDFs de ebooks de programação aqui que quero alimentar eventualmente, mas vamos limitar o tamanho apenas para esta versão de teste. Encontre alguns PDFs que você gostaria de incorporar e coloque-os na pasta.

Então, como lidamos com isso? Vamos usar uma lista de arquivos. A lista de arquivos será trazida da biblioteca OS. Então, vamos garantir que a trazemos, e será OS.list_directory. E nos colchetes, vou apenas colocar lá o nome da pasta. Isso vai, na verdade, listar os arquivos naquela pasta para nós, o que será realmente útil. Isso significa que a pasta é dinâmica. Agora podemos simplesmente continuar adicionando a ela, deixando-a passar por ela. Então vamos usar um loop, e o que vamos fazer primeiro é imprimir que estamos carregando o arquivo. E então vamos adicioná-lo ao nosso app. E a maneira como fazemos isso é fazermos o nome da variável chat_app.add. E nos colchetes, precisamos de dois argumentos. O primeiro é o tipo de arquivo, então será PDF_file. E o segundo será o nome do arquivo, que será um pouco diferente. Você precisa fornecer o caminho completo. Então vou usar uma string f aqui. Vou entrar em docs/filename. Então o que isso vai fazer é ler o PDF, dividi-lo em partes e incorporá-lo usando incorporações OpenAI. E nosso chat_app vai entender nosso PDF, e ele vai fazer isso para cada PDF na pasta. Então precisamos iniciar um bate-papo. Vou usar um loop while True. E vou fazer uma pergunta. Vou permitir que um usuário faça uma pergunta e depois vou retornar a resposta como chat_app.query(question). E com isso feito, podemos imprimir a resposta. Então, com isso, podemos simplesmente executar o programa. E você pode ver que a CPU está aumentando à medida que ele adiciona cada um dos PDFs à sua base de conhecimento. Então, não se esqueça de que cada uma dessas incorporações está nos custando dinheiro, porque está indo e usando aquela chave de API OpenAI, e está nos custando tokens. Então isso é algo que talvez precisemos pensar, porque se você olhar quantos pedaços cada um dos livros está nos custando, isso é uma quantidade significativa de tokens. Mas assim que ele ler todos, ele nos pedirá em um loop para inserir a pergunta, o que podemos fazer e obter a resposta.

Ok, então vamos fazer uma pergunta: Como eu exibo texto em React? Ok, isso faz sentido, não é? Vamos escolher um diferente: Como eu exibo texto em C#? Brilhante! Então ele assimilou esse conhecimento. Então agora construímos um chatbot realmente notável. Construímos um que vai assimilar qualquer quantidade de documentos que colocarmos em uma pasta e ser capaz de fazer perguntas específicas a ele, que ele será capaz de responder com a documentação de treinamento. Agora há um problema aqui. Cada vez que clicamos em executar, ele vai passar por todos esses ebooks e vai demorar para dividi-los em partes e criar incorporações vetoriais para nós. Isso é ótimo, mas não é muito econômico. Então, quando clico em parar aqui, agora tenho que reprocessar tudo para que funcione. Por que você não vai pegar seu programa, escanear a pasta, incorporar os arquivos e iniciar seu chatbot? Uma coisa que podemos querer fazer é usar um cache. Muito simplesmente, quando instanciamos esse app, se voltarmos a ele novamente sem ler um monte de incorporações nele, ele ainda terá o conhecimento de antes. Na verdade, é disso que esta pasta DB está cheia. Esses índices são todas as incorporações que ele descobriu até agora. Então ele deve ser capaz de recarregá-los. Mas por causa do código que construímos, pelo fato de ele fazer loops e carregar esses arquivos imediatamente, ele simplesmente vai continuar fazendo isso. Vamos ser um pouco espertos com o ReplDB. ReplDB é um armazenamento de chave-valor simples e gratuito que oferecemos para nossos Repls. Posso obter as chaves da lista e posso simplesmente dizer: se filename não estiver em Keys, bem, se não estiver lá, vou imprimir carregando, vou carregá-lo e vou adicionar esse filename ao meu banco de dados. Vou apenas torná-lo um site não datado, não precisa ter nada nele. Se não, o que vou fazer? Bem, vou apenas imprimir que já carreguei, então sei que ele está lá e não preciso lê-lo novamente. Essa adição simples deve permitir que façamos o cache. Vamos executá-lo novamente. Há também uma extensão realmente ótima que vale a pena dar uma olhada: o editor Repl DB. E instalá-lo, porque o que você obtém disso é isso, e poderemos ver o que realmente acontece quando clicamos em executar. Então, como você pode ver agora, o que está acontecendo é que, à medida que ele processa e divide cada um desses PDFs, ele está criando um valor no Repl DB para dizer que já fez isso. Ok, então ele carregou todos esses arquivos. Vamos verificar se funciona. Então funciona. Vamos matar e executar novamente e ver o que acontece. Então, agora, ao executar, o que ele vai fazer é ver essas entradas no banco de dados e vai pular toda aquela adição cara. Ele ainda funciona? Perfeito, está armazenando nossos resultados em cache. Agora, não apenas está armazenando nossos resultados em cache, mas também está de olho no que já acessamos no banco de dados fora da pasta e não se repetindo. Seu desafio é construir seu analisador de documentos definitivo. Você poderia ser um advogado e preenchê-lo com todas as leis que você puder encontrar. Você poderia estar trabalhando na área médica e preenchê-lo com PDFs para cada manual, para cada máquina no hospital. E você pode criar seu especialista em IA instantâneo em tudo em um único domínio usando esta configuração de codificação. O armazenamento expansível é realmente empolgante no Repl porque remove outra barreira para a construção de projetos em larga escala. Ficaremos muito animados para ver o que você pode fazer com ele.