Este projeto implementa um Mini Chatbot baseado em Retrieval-Augmented Generation (RAG) utilizando o modelo Mistral-7B-Instruct-v0.2 e a biblioteca LangChain.
O chatbot responde a perguntas sobre nutrição, recuperando informações relevantes de uma base de documentos (.txt e .pdf) e gerando respostas precisas e contextualizadas.
Criar um sistema que combine:
- Recuperação de informações com FAISS (vetor store)
- Geração de respostas com o modelo Mistral-7B
Exemplos de perguntas:
- “Quais alimentos são ricos em ferro?”
- “Como planejar uma dieta equilibrada?”
O tema nutrição foi escolhido pela sua relevância social e pela ampla disponibilidade de conteúdo confiável.
| Tecnologia | Função |
|---|---|
| Python 3.11 | Linguagem base do projeto |
| LangChain | Framework para pipeline RAG |
| Mistral-7B-Instruct-v0.2 | Modelo de linguagem local (formato GGUF) |
| FAISS | Vetor store para busca semântica |
| Sentence Transformers | Geração de embeddings (all-MiniLM-L6-v2) |
| llama-cpp-python | Execução local do modelo Mistral |
| PyPDF2 | Processamento de arquivos PDF |
- CPU moderna (mín. 8 núcleos) ou GPU NVIDIA (para acelerar o modelo)
- Memória: mínimo 12 GB RAM (para modelos quantizados Q4)
- Python: 3.8 ou superior (recomenda-se 3.11)
- Espaço em Disco: ~5 GB para o modelo e documentos
conda create -n chatbot python=3.11
conda activate chatbotpip install -U langchain langchain-community langchain-huggingface pypdf faiss-cpu sentence-transformers tf-keras llama-cpp-pythonCom GPU NVIDIA (opcional):
pip install llama-cpp-python --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cu122🔎 Substitua
cu122pela sua versão de CUDA (nvidia-smi)
HF_HUB_ENABLE_HF_TRANSFER=1 huggingface-cli download \
TheBloke/Mistral-7B-Instruct-v0.2-GGUF mistral-7b-instruct-v0.2.Q4_K_M.gguf \
--local-dir ./modelos --local-dir-use-symlinks Falsemkdir -p data/nutricaoAdicione de 10 a 50 arquivos .txt ou .pdf com conteúdos sobre nutrição:
guias, artigos científicos, receitas saudáveis, materiais da OMS, etc.
No script chatbot_rag.py, atualize:
llm = LlamaCpp(
model_path="./model/mistral-7b-instruct-v0.2.Q4_K_M.gguf",
...
)llm = LlamaCpp(
model_path="./modelos/mistral-7b-instruct-v0.2.Q4_K_M.gguf",
n_ctx=2048,
max_tokens=500,
temperature=0.7,
n_gpu_layers=40,
verbose=True
)Execute o script:
python chatbot_rag.pyVocê verá no terminal:
Bem-vindo ao Chatbot de Nutrição!
Digite sua pergunta ou 'sair' para encerrar.
Faça perguntas como:
- “Quais alimentos são ricos em ferro?”
- “Como planejar uma dieta rica em fibras?”
Para encerrar, digite sair.
Pergunta: Quais alimentos são ricos em ferro?
Resposta: Alimentos ricos em ferro incluem carne vermelha, fígado, espinafre, lentilhas, feijão e cereais fortificados. O ferro heme, encontrado em produtos animais, é mais facilmente absorvido pelo corpo.
Fontes: [{'source': 'data/nutricao/guia_nutrientes.pdf', 'page': 3}, {'source': 'data/nutricao/artigo_ferro.txt'}]
Pergunta: sair
Encerrando o chatbot...
mini-chatbot-rag/
├── data/
│ └── nutricao/ # Arquivos .txt e .pdf
├── modelos/
│ └── mistral-7b-instruct-v0.2.Q4_K_M.gguf
├── chatbot_rag.py # Script principal
└── README.md
- Leitura dos documentos (.txt/.pdf)
- Divisão em chunks (~1000 caracteres, com sobreposição de 200)
- Geração de embeddings com
all-MiniLM-L6-v2 - Armazenamento vetorial no FAISS
- Busca semântica com LangChain
- Resposta gerada com Mistral-7B
- Tempo de resposta (CPU): 5–25 segundos
- Tempo de resposta (GPU): 2–6 segundos
- Reduza
n_ctx(ex: 1024) oumax_tokens - Use quantizações menores (ex: Q2_K)
- Use GPU se possível
-
Erro ao sair:
TypeError: 'NoneType' object is not callableBug conhecido do
llama-cpp-python. Não afeta o uso. Pode ser mitigado liberando o modelo manualmente. -
Baixo desempenho em PCs com <12 GB RAM: use quantizações mais leves ou reduza
n_ctx.
Este projeto foi desenvolvido para fins acadêmicos.
Sinta-se à vontade para sugerir:
- Suporte a outros modelos (ex.: LLaMA, Gemma)
- Interfaces gráficas com Gradio ou Streamlit
- Otimização para bases maiores
Distribuído sob a licença MIT.