Chatbot com LangChain e Streamlit: Criando uma interface conversacional
Parte 6 (final) da série "Tudo o Que Você Precisa Saber Sobre LangChain (Antes de Começar um Projeto com IA)"
Chegamos ao o último post da nossa série sobre LangChain!
Hoje vamos dar vida às nossas aplicações criando um chatbot interativo usando LangChain e Streamlit. Se você acompanhou os posts anteriores, já sabe o poder do LangChain para trabalhar com modelos de linguagem (LLMs).
Agora é hora de criar uma interface amigável para os usuários, usando Streamlit.
Veja todos os posts da série:
Quer mais novidades de IA? Me siga no Linkedin e no Instagram !
Mas antes, o que é Streamlit?
Streamlit é um framework em Python que permite transformar scripts simples em aplicações web interativas de forma rápida e prática.
Ele foi criado com o objetivo de facilitar a vida de cientistas de dados, engenheiros de machine learning e desenvolvedores que querem criar interfaces visuais para seus projetos, sem precisar lidar com front-end, HTML ou JavaScript.
Com apenas algumas linhas de código, podemos criar sliders, campos de texto, botões e gráficos dinâmicos. E o melhor: tudo isso rodando localmente no navegador, com atualização em tempo real conforme os dados mudam.
Neste tutorial, vamos usar o Streamlit para criar a interface do nosso chatbot, uma página leve e intuitiva onde o usuário poderá conversar com nosso LLM.
Pronto para colocar seu chatbot no ar? Vamos começar!
Preparando o ambiente
Primeiro, vamos instalar as dependências necessárias:
pip install langchain langchain-google-genai streamlitAgora vamos criar um arquivo app.py, com o seguinte código:
import streamlit as st
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain.schema import HumanMessage, AIMessage
import os
# Configuração da página
st.set_page_config(
page_title="Chatbot com LangChain e Streamlit",
page_icon="🤖",
layout="centered"
)
# Título da aplicação
st.title("Chatbot")
st.markdown("*Chatbot com LangChain e Streamlit*")
# Sidebar para configurações
with st.sidebar:
st.header("⚙️ Configurações")
# Campo para API Key
api_key = st.text_input(
"Google API Key",
type="password",
help="Cole aqui sua chave de API do Google AI Studio"
)
if st.button("Limpar Conversa"):
st.session_state.messages = []
st.rerun()
st.markdown("---")
st.markdown("### 📝 Como usar:")
st.markdown("""
1. Insira sua API Key do Google
2. Digite sua mensagem
3. Pressione Enter ou clique em Enviar
""")
st.markdown("---")
st.markdown("### 🔗 Links úteis:")
st.markdown("[Obter API Key](https://aistudio.google.com/app/apikey)")
# Inicializar o histórico de mensagens
if "messages" not in st.session_state:
st.session_state.messages = []
# Função para inicializar o modelo
@st.cache_resource
def init_model(api_key):
if not api_key:
return None
try:
llm = ChatGoogleGenerativeAI(
model="gemini-1.5-flash",
google_api_key=api_key,
temperature=0.3,
max_tokens=250
)
return llm
except Exception as e:
st.error(f"Erro ao inicializar o modelo: {str(e)}")
return None
# Verificar se a API key foi fornecida
if not api_key:
st.warning("⚠️ Por favor, insira sua API Key do Google na barra lateral para começar.")
st.stop()
# Inicializar o modelo
llm = init_model(api_key)
if not llm:
st.error("❌ Não foi possível inicializar o modelo. Verifique sua API Key.")
st.stop()
# Container para o chat
chat_container = st.container()
# Exibir mensagens do histórico
with chat_container:
for message in st.session_state.messages:
if message["role"] == "user":
with st.chat_message("user"):
st.write(message["content"])
else:
with st.chat_message("assistant"):
st.write(message["content"])
# Input do usuário
if prompt := st.chat_input("Digite sua mensagem aqui..."):
# Adicionar mensagem do usuário ao histórico
st.session_state.messages.append({"role": "user", "content": prompt})
# Exibir mensagem do usuário
with st.chat_message("user"):
st.write(prompt)
# Gerar resposta do assistente
with st.chat_message("assistant"):
with st.spinner("Pensando..."):
try:
# Preparar o histórico para o modelo
messages = []
for msg in st.session_state.messages:
if msg["role"] == "user":
messages.append(HumanMessage(content=msg["content"]))
else:
messages.append(AIMessage(content=msg["content"]))
# Gerar resposta
response = llm.invoke(messages)
assistant_response = response.content
# Exibir resposta
st.write(assistant_response)
# Adicionar resposta ao histórico
st.session_state.messages.append({
"role": "assistant",
"content": assistant_response
})
except Exception as e:
st.error(f"Erro ao gerar resposta: {str(e)}")
Vamos executar o comando no terminal:
>> streamlit run app.pyEsse comando executa o arquivo app.py e abre uma interface web interativa no navegador usando o Streamlit, na porta 8501.
Acesse http://localhost:8501 e insira sua API_KEY do Google no menu à esquerda, e você poderá conversar com o chatbot:
Esse é um exemplo simples e funcional de um chatbot completo: LLM rodando por trás e uma interface web criada com Streamlit!
Agora, vamos para o próximo passo: criar um chatbot com RAG, onde o usuário pode conversar com seus documentos. Dê um CTRL+C no terminal para parar a execução atual.
Para isso, precisamos instalar mais algumas bibliotecas:
pip install langchain_community PyPDF2 python-docx sentence-transformersVamos agora criar um arquivo chamado app_rag.py e adicionar esse conteúdo:



