Seu Chatbot Especialista Personalizado
Imagine ter um assistente que conhece TUDO sobre sua empresa!
Políticas, procedimentos, produtos, histórico - tudo na ponta da língua, 24/7!
Nesta aula, você vai criar um chatbot especializado treinado especificamente com os dados da sua área, empresa ou projeto. Não é mais um chatbot genérico - é SEU especialista pessoal!
Exemplos de Chatbots que Você Pode Criar:
🏢 Chatbot Corporativo
Responde sobre políticas, RH, procedimentos da empresa
🎓 Tutor Educacional
Especialista em sua matéria ou curso específico
🛒 Assistente de E-commerce
Conhece todos os produtos, preços e especificações
⚖️ Consultor Jurídico
Especialista em leis específicas ou contratos
Arquitetura do Nosso Chatbot
1. Coleta de Dados
PDFs, documentos, sites, planilhas
2. Processamento
Limpeza, chunking, embedding
3. Base de Conhecimento
Vector Database (ChromaDB)
4. Chatbot
Llama + RAG + Interface
Stack Tecnológico:
- LLM: Llama 3.2 via Ollama (local); Qwen 3 ou DeepSeek se quiser mais qualidade
- Embeddings: Sentence Transformers
- Vector DB: ChromaDB
- Framework: LangChain
- Interface: Streamlit
Passo 1: Preparando Seus Dados
Fontes de Dados Suportadas:
Instalar Dependências
pip install langchain streamlit chromadb sentence-transformers \
pypdf2 python-docx pandas
Código para Processar Documentos
# data_processor.py
import os
import pandas as pd
from langchain.document_loaders import PyPDFLoader, TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma
class DocumentProcessor:
def __init__(self):
self.embeddings = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-MiniLM-L6-v2"
)
self.text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
length_function=len
)
def load_documents(self, folder_path):
"""Carrega documentos de uma pasta"""
documents = []
for filename in os.listdir(folder_path):
file_path = os.path.join(folder_path, filename)
if filename.endswith('.pdf'):
loader = PyPDFLoader(file_path)
documents.extend(loader.load())
elif filename.endswith('.txt'):
loader = TextLoader(file_path)
documents.extend(loader.load())
# Adicione outros tipos de arquivo conforme necessário
return documents
def process_documents(self, documents):
"""Processa e cria chunks dos documentos"""
chunks = self.text_splitter.split_documents(documents)
return chunks
def create_knowledge_base(self, chunks, persist_directory="./knowledge_base"):
"""Cria base de conhecimento vetorial"""
vectordb = Chroma.from_documents(
documents=chunks,
embedding=self.embeddings,
persist_directory=persist_directory
)
return vectordb
# Exemplo de uso
if __name__ == "__main__":
processor = DocumentProcessor()
# Carregue seus documentos
documents = processor.load_documents("./meus_documentos")
# Processe em chunks
chunks = processor.process_documents(documents)
# Crie base de conhecimento
vectordb = processor.create_knowledge_base(chunks)
print(f"✅ Base de conhecimento criada com {len(chunks)} chunks!")
Passo 2: Criando o Chatbot RAG
O que é RAG (Retrieval Augmented Generation)?
RAG combina busca em base de conhecimento + geração de texto. O modelo primeiro busca informações relevantes, depois gera uma resposta baseada nessas informações.
Código do Chatbot Principal
# chatbot.py
import streamlit as st
from langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.llms import Ollama
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
class CustomChatbot:
def __init__(self, knowledge_base_path="./knowledge_base"):
# Inicializar embeddings
self.embeddings = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-MiniLM-L6-v2"
)
# Carregar base de conhecimento
self.vectordb = Chroma(
persist_directory=knowledge_base_path,
embedding_function=self.embeddings
)
# Inicializar LLM local (Ollama)
self.llm = Ollama(
model="llama3.2",
temperature=0.1 # Mais conservador para dados específicos
)
# Criar template de prompt personalizado
self.prompt_template = """
Você é um assistente especializado com acesso a uma base de conhecimento específica.
Use apenas as informações fornecidas no contexto para responder à pergunta.
Se não souber a resposta com base no contexto, diga que não tem essa informação.
Contexto: {context}
Pergunta: {question}
Resposta detalhada:
"""
self.prompt = PromptTemplate(
template=self.prompt_template,
input_variables=["context", "question"]
)
# Criar chain RAG
self.qa_chain = RetrievalQA.from_chain_type(
llm=self.llm,
chain_type="stuff",
retriever=self.vectordb.as_retriever(search_kwargs={"k": 3}),
chain_type_kwargs={"prompt": self.prompt}
)
def ask(self, question):
"""Fazer pergunta ao chatbot"""
try:
response = self.qa_chain.run(question)
return response
except Exception as e:
return f"Erro ao processar pergunta: {str(e)}"
def search_similar(self, query, k=3):
"""Buscar documentos similares"""
results = self.vectordb.similarity_search(query, k=k)
return results
# Exemplo de uso
if __name__ == "__main__":
chatbot = CustomChatbot()
while True:
pergunta = input("\n🤖 Digite sua pergunta (ou 'quit' para sair): ")
if pergunta.lower() == 'quit':
break
resposta = chatbot.ask(pergunta)
print(f"\n📝 Resposta: {resposta}")
print("-" * 50)
Passo 3: Interface Web com Streamlit
Aplicação Web Completa
# app.py
import streamlit as st
from chatbot import CustomChatbot
import time
# Configuração da página
st.set_page_config(
page_title="Meu Chatbot Especialista",
page_icon="🤖",
layout="wide"
)
# CSS customizado
st.markdown("""
""", unsafe_allow_html=True)
# Inicializar chatbot
@st.cache_resource
def load_chatbot():
return CustomChatbot()
# Título da aplicação
st.title("🤖 Meu Assistente Especializado")
st.markdown("---")
# Sidebar com informações
with st.sidebar:
st.header("📊 Informações")
st.info("Este chatbot foi treinado com dados específicos da sua organização.")
st.header("🔧 Configurações")
show_sources = st.checkbox("Mostrar fontes", value=True)
max_tokens = st.slider("Tamanho da resposta", 100, 1000, 500)
# Área principal
chatbot = load_chatbot()
# Histórico de mensagens
if "messages" not in st.session_state:
st.session_state.messages = []
# Exibir histórico
for message in st.session_state.messages:
if message["role"] == "user":
st.markdown(f"""
""", unsafe_allow_html=True)
else:
st.markdown(f"""
""", unsafe_allow_html=True)
# Input para nova pergunta
pergunta = st.chat_input("Digite sua pergunta aqui...")
if pergunta:
# Adicionar pergunta do usuário
st.session_state.messages.append({"role": "user", "content": pergunta})
# Mostrar pergunta imediatamente
st.markdown(f"""
""", unsafe_allow_html=True)
# Gerar resposta
with st.spinner("🤔 Pensando..."):
resposta = chatbot.ask(pergunta)
# Adicionar resposta do bot
st.session_state.messages.append({"role": "bot", "content": resposta})
# Mostrar resposta
st.markdown(f"""
""", unsafe_allow_html=True)
# Mostrar fontes se solicitado
if show_sources:
with st.expander("📚 Ver fontes utilizadas"):
docs = chatbot.search_similar(pergunta, k=2)
for i, doc in enumerate(docs, 1):
st.write(f"**Fonte {i}:**")
st.write(doc.page_content[:300] + "...")
if doc.metadata:
st.write(f"*Arquivo: {doc.metadata.get('source', 'Desconhecido')}*")
st.write("---")
# Botão para limpar histórico
if st.sidebar.button("🗑️ Limpar Conversa"):
st.session_state.messages = []
st.experimental_rerun()
# Instruções
with st.sidebar.expander("❓ Como usar"):
st.write("""
1. Digite sua pergunta na caixa de texto
2. O chatbot buscará na base de conhecimento
3. Receberá uma resposta baseada nos seus dados
4. Use 'Mostrar fontes' para ver de onde veio a informação
""")
# Estatísticas
if st.sidebar.button("📊 Estatísticas da Base"):
st.sidebar.write(f"📚 Documentos na base: {chatbot.vectordb._collection.count()}")
Executar a Aplicação
streamlit run app.py
Abrirá em http://localhost:8501
Exemplo Prático: Chatbot Empresarial
Cenário: Empresa de Software
Vamos criar um chatbot para uma empresa que responde sobre:
- Políticas de RH
- Procedimentos técnicos
- Produtos e serviços
- FAQ de clientes
Estrutura de Arquivos:
chatbot_empresa/
├── meus_documentos/
│ ├── manual_rh.pdf
│ ├── procedimentos_tecnicos.docx
│ ├── catalogo_produtos.pdf
│ └── faq_clientes.txt
├── knowledge_base/ # Criado automaticamente
├── data_processor.py
├── chatbot.py
├── app.py
└── requirements.txt
Exemplo de Conversa:
Otimizações e Melhorias
Melhor Retrieval
- Use BM25 + embeddings (híbrido)
- Rerank resultados com CrossEncoder
- Ajuste o número de chunks (k=3-5)
Performance
- Cache de respostas frequentes
- Modelos menores para respostas rápidas
- GPU acceleration se disponível
Qualidade
- Fine-tune prompt template
- Adicione exemplos few-shot
- Implemente feedback loop
Monitoramento
- Log de perguntas e respostas
- Métricas de satisfação
- Analytics de uso
Deploy para Produção
Casos de Uso Avançados
Assistente Médico
Treinado com protocolos, diagnósticos e diretrizes médicas
Consultor Legal
Especializado em legislação específica e jurisprudência
Tutor Acadêmico
Personalizado para cursos e disciplinas específicas
Você Criou Seu Próprio Especialista IA!
Parabéns! Você acabou de construir algo que empresas pagam dezenas de milhares de reais:
O que você dominou:
- Arquitetura RAG completa
- Processamento de documentos diversos
- Base de conhecimento vetorial
- Chatbot inteligente com contexto
- Interface web profissional
- Deploy para produção
Valor de Mercado:
Um chatbot especializado como este vale entre R$ 15.000 - R$ 50.000 dependendo da complexidade!
"Você não está apenas aprendendo IA, está dominando o futuro."
- Isaque Victor
Isaque Victor cursos gratuitos