Skip to content
Tutoriais
Streamlit
Construa um Chatbot Streamlit com Modelos LLM: Início Rápido

Construa um Chatbot Streamlit com Modelos LLM: Início Rápido

Já se perguntou como funciona a Siri, a Alexa ou um chatbot de atendimento ao cliente? Bem, você está prestes a dar uma olhada nos bastidores. Neste artigo, vamos dar uma rápida olhada no mundo dos chatbots, essas ferramentas úteis e poderosas impulsionadas por IA que estão revolucionando a comunicação digital. Eles estão em toda parte, desde o atendimento ao cliente até as experiências interativas, e estão mudando a maneira como nos comunicamos e acessamos informações.

Mas tem mais - não estamos falando de qualquer chatbot. Estamos nos concentrando em construir um chatbot usando o Streamlit, uma estrutura de aplicativo de código aberto que é um grande sucesso entre os entusiastas de Aprendizado de Máquina e Ciência de Dados. E não é só isso - também vamos explorar como integrá-lo com o LangChain e vários modelos linguísticos, incluindo modelos LLM. Então, prepare-se, porque estamos prestes a criar um chatbot que respeita a privacidade do usuário e não apenas é eficiente.

O que é o Streamlit?

O Streamlit é uma ferramenta de código aberto rápida, fácil e divertida para construir aplicativos da web. Foi projetado para ajudar engenheiros de aprendizado de máquina e cientistas de dados a construir aplicativos da web interativos em torno de seus projetos, sem a necessidade de conhecimento em desenvolvimento web. A simplicidade e a velocidade do Streamlit fazem dele uma excelente escolha para construir uma interface de chatbot.

O que é um Chatbot?

Um chatbot é um aplicativo de software projetado para conduzir conversas de chat online por meio de texto ou texto para fala, em vez de fornecer contato direto com um atendente humano em tempo real. Projetados para simular de forma convincente o comportamento humano como um parceiro de conversação, os sistemas de chatbot geralmente exigem ajustes e testes contínuos, e muitos em produção ainda não são capazes de conduzir conversas adequadamente ou passar no padrão do setor, o teste de Turing.

Construindo um Chatbot com Streamlit

Configurando o Ambiente

Antes de mergulharmos no processo real de construção de nosso chatbot, primeiro precisamos configurar nosso ambiente de desenvolvimento com as bibliotecas e ferramentas necessárias. Isso garante que nosso código possa ser executado com êxito e que nosso chatbot funcione como pretendido. O arquivo requirements.txt contém uma lista de bibliotecas e ferramentas necessárias para este projeto. Aqui está o que ele inclui:

  • streamlit: Essa biblioteca nos ajuda a criar aplicativos da web interativos para projetos de aprendizado de máquina e ciência de dados.
  • streamlit_chat: Esse componente do Streamlit é usado para criar a interface do usuário do chatbot.
  • langchain: Essa é uma estrutura para desenvolver aplicativos alimentados por modelos de linguagem. Ela fornece uma interface padrão para cadeias, várias integrações com outras ferramentas e cadeias de ponta a ponta para aplicações comuns.
  • sentence_transformers: Essa biblioteca nos permite usar modelos transformadores como BERT, RoBERTa, etc., para gerar representações semânticas de texto (ou seja, embeddings), que usaremos para a indexação de documentos.
  • openai: Essa é a biblioteca oficial da OpenAI que nos permite usar seus modelos de linguagem, como o GPT-3.5-turbo, para gerar texto semelhante ao humano.
  • unstructured e unstructured[local-inference]: Essas bibliotecas são usadas para processamento de documentos e gerenciamento de dados não estruturados.
  • pinecone-client: Esse é o cliente do Pinecone, um serviço de banco de dados de vetores que nos permite realizar buscas de similaridade em dados vetoriais.

Para instalar todas essas bibliotecas, você pode executar o seguinte comando no terminal:

pip install -r requirements.txt

Esse comando instrui o "pip" (instalador de pacotes do Python) a instalar as bibliotecas mencionadas no arquivo requirements.txt.

Indexação de Documentos

O próximo passo em nossa jornada para construir o chatbot envolve preparar e indexar os documentos que nosso chatbot utilizará para responder a consultas. Para isso, usamos o script indexing.py.

Carregando documentos de um diretório com o LangChain

O primeiro passo no script indexing.py envolve carregar os documentos de um diretório. Usamos a classe DirectoryLoader fornecida pelo LangChain para isso. Essa classe aceita um diretório como entrada e carrega todos os documentos presentes nele.

from langchain.document_loaders import DirectoryLoader
 
diretorio = '/conteudo/data'
 
def carregar_docs(diretorio):
 carregador = DirectoryLoader(diretorio)
 documentos = carregador.carregar()
 return documentos
 
documentos = carregar_docs(diretorio)
len(documentos)

Dividindo os documentos

Após carregar os documentos, o script prossegue dividindo esses documentos em pedaços menores. O tamanho dos pedaços e a sobreposição entre eles podem ser definidos pelo usuário. Isso é feito para garantir que o tamanho dos documentos seja gerenciável e que nenhuma informação relevante seja perdida devido à divisão. Para isso, é usada a classe RecursiveCharacterTextSplitter do LangChain.

from langchain.text_splitter import RecursiveCharacterTextSplitter
 
def dividir_docs(documentos, tamanho_pedaço=500, sobreposição_pedaço=20):
 divisor_texto = RecursiveCharacterTextSplitter(tamanho_pedaço=tamanho_pedaço, sobreposição_pedaço=sobreposição_pedaço)
 docs = divisor_texto.dividir_documentos(documentos)
 return docs
 
docs = dividir_docs(documentos)
print(len(docs))

Criando embeddings

Uma vez que os documentos são divididos, precisamos converter esses pedaços de texto em um formato que nosso modelo de IA possa entender. Isso é feito criando embeddings do texto usando a classe SentenceTransformerEmbeddings fornecida pelo LangChain.

from langchain.embeddings import SentenceTransformerEmbeddings
 
embeddings = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")

Armazenando embeddings no Pinecone

Depois que as embeddings forem criadas, elas precisam ser armazenadas em um local de onde possam ser facilmente acessadas e pesquisadas. Pinecone é um serviço de banco de dados de vetores perfeito para essa tarefa. O código de exemplo é o seguinte:

from langchain.pinecone import PineconeIndexer
 
def index_embeddings(embeddings, docs):
    indexer = PineconeIndexer(api_key='sua-chave-api-do-pinecone', index_name='seu-nome-de-indice')
    indexer.index(embeddings, docs)
 
index_embeddings(embeddings, docs)

Este script cria um índice no Pinecone e armazena as embeddings juntamente com o texto correspondente. Agora, sempre que um usuário fizer uma pergunta, o chatbot poderá pesquisar este índice em busca do texto mais similar e retornar a resposta correspondente.

Criando a Interface do Chatbot com o Streamlit

Com nossos documentos indexados e prontos para serem pesquisados, agora podemos nos concentrar na criação da interface do chatbot. O Streamlit fornece uma maneira simples e intuitiva de criar aplicações web interativas, e é perfeito para nossa interface de chatbot.

Componente de Chat do Streamlit

O componente de chat do Streamlit é uma nova forma de criar chatbots. Ele fornece uma interface semelhante a um aplicativo de bate-papo, tornando um chatbot implantado no Streamlit com uma interface legal. Para usar esse componente, você precisa instalá-lo separadamente usando pip:

pip install streamlit-chat

Após a instalação, você pode importá-lo em seu aplicativo Streamlit:

import streamlit as st
from streamlit_chat import chat
 
@st.cache(allow_output_mutation=True)
def get_chat():
    return chat()
 
chat = get_chat()

Este código cria uma nova interface de chat em seu aplicativo Streamlit. Você pode adicionar mensagens a este chat usando o método add_message:

chat.add_message("Olá, como posso ajudar hoje?", "bot")

Integrando o Chatbot com o LangChain

LangChain é um framework para o desenvolvimento de aplicações alimentadas por modelos de linguagem. Ele fornece uma interface padrão para cadeias, muitas integrações com outras ferramentas e cadeias de ponta a ponta para aplicações comuns. Para integrar nosso chatbot com o LangChain, precisamos modificar a função load_chain em main.py.

from langchain import LangChain
 
def load_chain():
    chain = LangChain(api_key='sua-chave-api-do-openai')
    return chain
 
chain = load_chain()

Este código cria uma nova instância do LangChain com sua chave de API do OpenAI. Você pode usar essa instância para gerar respostas às consultas dos usuários.

Construa um Aplicativo de Visualização de Dados sem Código com o PyGWalker

PyGWalker (opens in a new tab) é também uma outra ferramenta incrível sem código. Você pode usar facilmente esta Biblioteca Python de Código Aberto para criar aplicativos de Visualização de Dados no Streamlit.

Demo do PyGWalker + Streamlit Online (opens in a new tab)

PyGWalker (opens in a new tab) é uma Biblioteca Python que ajuda você a incorporar facilmente uma interface semelhante ao Tableau em seu próprio aplicativo Streamlit sem esforço.

Confira este incrível vídeo produzido por Sven do Coding is Fun (opens in a new tab) demonstrando os passos detalhados para fortalecer seu aplicativo Streamlit com esta poderosa Biblioteca Python de Visualização de Dados!


Agradecimentos especiais a Sven e sua grande contribuição (opens in a new tab) à comunidade PyGWalker!

Além disso, você também pode conferir estes recursos:

Visualize Dados no Streamlit com PyGWalker (opens in a new tab)

Recursos de Privacidade-Conscientes

Na era digital de hoje, violações de dados e preocupações com a privacidade são mais comuns do que nunca. É fundamental garantir que nosso chatbot não apenas forneça uma experiência do usuário perfeita, mas também respeite a privacidade do usuário. Então, como conseguimos isso?

Em primeiro lugar, podemos garantir que nosso chatbot não armazene nenhum dado pessoal do usuário. O componente de chat do Streamlit foi projetado com privacidade em mente - por padrão, ele não armazena nenhum dado do usuário. Isso significa que qualquer conversa que você tenha com o chatbot fica entre você e o bot, sem dados sendo armazenados ou usados para outros fins.

Mas podemos ir além. Podemos usar modelos de linguagem que preservam a privacidade para garantir que nosso chatbot não memorize informações sensíveis. Esses modelos são treinados de forma que eles não retenham dados sensíveis. Por exemplo, o GPT-3.5-turbo da OpenAI é um modelo de linguagem projetado para gerar texto semelhante ao humano sem reter nenhuma informação sensível da entrada que recebe. Isso significa que, mesmo que um usuário compartilhe acidentalmente informações sensíveis, o modelo não se lembrará nem usará essas informações em interações futuras.

Conclusão

Construir um chatbot com Streamlit e LangChain é um processo simples que envolve a configuração do ambiente, a indexação de documentos, a criação da interface do chatbot e garantir recursos de privacidade conscientes. Com o poder dos modelos de LLM e ferramentas de código aberto, você pode criar um chatbot que não apenas seja eficiente e fácil de usar, mas também respeite a privacidade do usuário.

Perguntas Frequentes

  1. Como criar um chatbot no Streamlit? Criar um chatbot no Streamlit envolve vários passos, incluindo a configuração do seu ambiente de desenvolvimento, indexando seus documentos, criando a interface do chatbot e garantindo recursos voltados para a privacidade. Este artigo fornece um guia abrangente sobre como construir um chatbot com o Streamlit.

  2. O que é o uso do chat do Streamlit? O chat do Streamlit é usado para criar uma interface amigável para o chatbot em seu aplicativo Streamlit. Ele oferece uma interface semelhante a um aplicativo de chat, tornando seu chatbot mais interativo e envolvente para os usuários.

  3. Qual é o chatbot de AI mais avançado? Os chatbots de IA mais avançados utilizam modelos de linguagem sofisticados, como o GPT-3.5-turbo, da OpenAI. Esses chatbots podem gerar texto semelhante ao humano, entender contexto e fornecer respostas relevantes. Eles também são projetados levando a privacidade em consideração, garantindo que não mantenham informações sensíveis do usuário.