Skip to content

RonaldLopes/langchain-chatbot-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chatbot RAG com PDF

Sistema de chat com PDFs usando LangChain + Ollama. Basicamente você faz upload de um PDF e pode conversar com ele usando IA local.

Funcionalidades

  • Upload de PDFs
  • Busca semântica com embeddings
  • Memória da conversa
  • Tudo roda local (sem mandar dados pra cloud)

Setup

Instalar Ollama

curl -fsSL https://ollama.ai/install.sh | sh

# baixar os modelos
ollama pull gpt-oss:20b
ollama pull mxbai-embed-large

Instalar dependencias

pip install -r requirements.txt

Rodar

streamlit run run.py

Abre no navegador automaticamente na porta 8501.

Como usar

  1. Verifica se o Ollama ta rodando (tem um status na sidebar)
  2. Upload do PDF
  3. Processa o PDF
  4. Começa a perguntar

Estrutura

langchain/
├── run.py
├── app/
│   └── main.py           # streamlit UI
├── core/
│   ├── pdf_processor.py  # processa PDFs
│   └── rag_engine.py     # RAG engine
├── config/
│   └── settings.py       # configs
└── utils/
    └── helpers.py

Stack

  • Streamlit - interface web
  • LangChain - framework RAG
  • Ollama - modelos locais (gpt-oss:20b + mxbai-embed-large)
  • FAISS - vectorstore
  • PyPDF - ler PDFs

Usei langchain-ollama ao invés do langchain-community porque tem melhor integração e performance com Ollama.

Configuração

Para trocar os modelos, edita o config/settings.py:

OLLAMA_LLM_MODEL = "gpt-oss:20b"  # ou llama3.2, mistral, etc
OLLAMA_EMBEDDINGS_MODEL = "mxbai-embed-large"

Parâmetros:

  • chunk_size: 1000
  • chunk_overlap: 200
  • search_k: 3

Problemas comuns

Ollama não conecta

  • Roda ollama serve antes
  • Testa: curl http://localhost:11434/api/tags

PDF não processa

  • PDF pode estar corrompido
  • PDFs muito grandes demoram

ImportError

pip install --upgrade langchain-ollama

Notas

  • Tudo roda local, não precisa de API keys
  • PDFs grandes vão demorar pra processar (normal)
  • Se der erro de memória, diminui o CHUNK_SIZE no settings.py
  • Usei FAISS ao invés de Chroma pq é mais rápido pra datasets pequenos
  • ConversationBufferMemory não escala bem, mas funciona pra demos

Customização do Prompt

O agente usa um prompt system customizado em config/prompts.py. Para ajustar o comportamento:

# config/prompts.py
SYSTEM_PROMPT = """Seu prompt personalizado aqui..."""

Ou ao instanciar:

rag = RAGEngine(
    temperature=0.7,  # controla criatividade
    system_prompt="Seu prompt customizado"
)

TODO

  • Add support for multiple PDFs
  • Implement proper logging (not just print/errors)
  • Consider switching to ConversationBufferWindowMemory for longer sessions
  • Add streaming responses
  • Cache embeddings between sessions
  • Add support for different prompt templates per use case

MIT License

About

Um chatbot inteligente que responde perguntas sobre PDFs usando Retrieval-Augmented Generation (RAG) com modelos de IA locais via Ollama.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages