Treinando um Chatbot com Seus Dados

📚 Aula 08 de 15
⏱️ 45 min
🔢 Módulo 3
📅 2025-08-25
Progresso do Curso 50.0% completo

🤖 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)
  • Embeddings: Sentence Transformers
  • Vector DB: ChromaDB
  • Framework: LangChain
  • Interface: Streamlit

📊 Passo 1: Preparando Seus Dados

Fontes de Dados Suportadas:

📄 PDFs
📝 Documentos Word
📊 Planilhas Excel
🌐 Páginas Web
📋 Arquivos TXT
📑 Markdown
1

Instalar Dependências

pip install langchain streamlit chromadb sentence-transformers \
            pypdf2 python-docx pandas
2

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.

1

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

1

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"""
        
👤
{message["content"]}
""", unsafe_allow_html=True) else: st.markdown(f"""
🤖
{message["content"]}
""", 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"""
👤
{pergunta}
""", 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"""
🤖
{resposta}
""", 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()}")
2

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:

👤 Usuário: Qual é a política de home office da empresa?
🤖 Chatbot: Segundo o manual de RH, a política de home office permite que colaboradores trabalhem remotamente até 3 dias por semana, mediante aprovação do gestor direto. É necessário ter equipamentos adequados e internet estável. O colaborador deve estar disponível no horário comercial (8h-18h) e participar de reuniões presenciais quando solicitado.
👤 Usuário: Como fazer deploy de uma aplicação Python no nosso servidor?
🤖 Chatbot: Para deploy de aplicações Python, siga estes passos do manual técnico: 1) Configure o ambiente virtual com 'python -m venv app_env', 2) Instale dependências com 'pip install -r requirements.txt', 3) Configure as variáveis de ambiente no arquivo .env, 4) Use PM2 para gerenciar o processo: 'pm2 start app.py --name minha-app', 5) Configure nginx como proxy reverso apontando para a porta da aplicação.

🚀 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

🐳 Docker (Recomendado)

# Dockerfile
FROM python:3.11-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

EXPOSE 8501

CMD ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]

☁️ Cloud Platforms

  • Streamlit Cloud: Deploy direto do GitHub
  • AWS/GCP: Container instances
  • Railway/Render: Deploy simplificado

🎯 Casos de Uso Avançados

🏥 Assistente Médico

Treinado com protocolos, diagnósticos e diretrizes médicas

✅ Multilíngue ✅ Validação cruzada ✅ Referências

⚖️ Consultor Legal

Especializado em legislação específica e jurisprudência

✅ Citações legais ✅ Análise de casos ✅ Atualizações

🎓 Tutor Acadêmico

Personalizado para cursos e disciplinas específicas

✅ Exercícios ✅ Explicações ✅ Bibliografia

🎉 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!

🔮 Próxima aula:

Vamos criar um sistema de análise automática de documentos que extrai insights e gera relatórios!

"Você não está apenas aprendendo IA, está dominando o futuro."

- Isaque Victor

🎯 Teste Seus Conhecimentos