Makerchain é um assistente inteligente baseado em busca vetorial para suporte em projetos maker localmente, utilizando modelos locais Ollama com Mistral, integrado com FastAPI para uma interface web simples e eficiente.
- ✨ Descrição
- ⏳ Linha do Tempo de Execução
- ⚙️ Componentes do Projeto
- 🛠 Tecnologias Usadas
- 🔍 Alternativas ao FAISS
▶️ Como Rodar- 🤝 Contribuições
- 📄 Licença
Makerchain permite consultas inteligentes em documentos indexados por vetores, combinando o poder do modelo Mistral local via Ollama com a eficiência do índice FAISS.
Você pergunta em português e recebe respostas contextuais rápidas — tudo via uma interface web simples, com histórico e opção para limpar! 💬✨
-
🛠️ Ingestão dos dados (ingest.py)
- Coleta e processa documentos (PDF, condigo fonte, texto, etc).
- Extrai texto dos documentos usando bibliotecas como
unstructured
epypdf
. - Divide o texto em pedaços menores (chunks).
- Gera embeddings para cada chunk usando
OllamaEmbeddings
. - Armazena os vetores no banco vetorial local
FAISS
.
-
📚 Carga do banco vetorial e modelo (load_qa_chain)
- Carrega o banco de dados FAISS com os embeddings.
- Inicializa o modelo de linguagem
ChatOllama
(ex: modelo "mistral").
-
💬 Recepção da pergunta via API (FastAPI)
- Usuário envia a pergunta via aplicação web.
- Backend recebe e processa a requisição.
-
🔍 Processamento da pergunta e recuperação
- O retriever busca os chunks mais relevantes no FAISS.
- O LLM gera resposta contextualizada usando os chunks.
-
📝 Resposta ao usuário e histórico
- Resposta é enviada para o frontend.
- Perguntas e respostas são armazenadas em sessão para histórico.
- Usuário pode limpar o histórico via botão.
O script ingest.py
agora permite selecionar dinamicamente o splitter para divisão dos chunks:
recursive
– padrão, comRecursiveCharacterTextSplitter
, focado em velocidade e simplicidade.semantic
– utiliza.sentence_splitter.SemanticChunker
(ou similar) para gerar chunks contextuais mais coesos, com base em embeddings.
Componente | Função |
---|---|
src/main.py |
Servidor FastAPI com rotas, sessão e interface web |
src/qa_engine.py |
Carrega FAISS, embeddings e cadeia de QA usando Ollama + Mistral |
vectorstore/db_faiss |
Índice vetorial FAISS local |
src/templates/index.html |
Template HTML com formulário, resultados e histórico |
ingest.py |
Script para processar documentos e criar índice vetorial FAISS |
- FastAPI — Framework web rápido e moderno
- Uvicorn — Servidor ASGI para rodar FastAPI
- Jinja2 — Templates HTML dinâmicos
- LangChain — Framework para construção de pipelines com LLMs
- Langchain-Ollama — Integração local com modelos Ollama
- FAISS — Biblioteca para indexação e busca vetorial
- Python-Multipart — Suporte a envio de formulários
- Starlette Sessions — Gerenciamento de sessão no FastAPI
-
Instale as dependências:
pip install -r requirements.txt
-
Adicione os documentos, códigos fonte e outros arquivos na pasta
data
. -
Faça a vetorização dos arquivos usando o script
ingest.py
:python3 ingest.py
-
Execute o servidor FastAPI:
python -m uvicorn src.main:app --reload
-
Acesse o sistema pelo navegador:
http://localhost:8000 -
Interaja com o Makerchain! ✨
Você pode rodar o MakerChain via Docker de forma se preferir:
- Docker instalado
- Execute via Docker Compose:
docker-compose up --build
- Acesse no navegador:
http://localhost:8000
services:
makerchain:
build: .
ports:
- "8000:8000"
volumes:
- .:/app
working_dir: /app
command: uvicorn src.main:app --host 0.0.0.0 --port 8000 --reload
environment:
- OLLAMA_HOST=http://host.docker.internal:11434
- Integração com o OpenWebUI.
- Explorar outras alternativas para banco vetorial.
- Uso de arquitetura MCP.
- Fork o repositório
- Crie uma branch (
git checkout -b feature/nova-funcionalidade
) - Commit suas mudanças (
git commit -am 'Adiciona nova funcionalidade'
) - Push para a branch (
git push origin feature/nova-funcionalidade
) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.