Assistente que responde dúvidas sobre eletrodomésticos com base no manual oficial do fabricante, citando a página. Projeto de portfólio construído em fases (roadmap).
Perguntas em linguagem do dia a dia sobre geladeiras e micro-ondas Electrolux e Brastemp, respondidas só com o conteúdo dos manuais. Toda resposta mostra o trecho, o manual e a página. Quando os manuais não trazem a resposta, a Manu diz que não sabe.
Fora desta fase: identificação do produto pela foto da etiqueta (fases 2 e 3), filtro por modelo, OCR, memória de conversa. Detalhes no spec.
Sem framework de RAG: cada etapa é uma peça solta.
PDF ──pdfplumber──> texto por página ──Ollama (embeddings)──> ChromaDB
│
pergunta ──Ollama──> top-k páginas ──limiar──┬── abaixo: recusa (sem chamar o LLM)
└── acima: Claude (saída estruturada) ──> resposta + citações
api/: pipeline e API em Python (FastAPI).web/: interface em Next.js.
- Python 3.12+
- Node 20+
- Ollama rodando localmente, com o modelo de embeddings:
ollama pull bge-m3- Uma chave da API do Claude.
cd api
python -m venv .venv
.venv/bin/pip install -e ".[dev]"
cp .env.example .envPreencha ANTHROPIC_API_KEY no .env.
Os PDFs não ficam no repositório (ADR 0006). Baixe cada manual pelo source_url listado em api/data/manuals.yaml e salve em api/data/pdfs/ com o nome do campo file. Depois confira:
.venv/bin/manu-validate.venv/bin/manu-indexReindexar substitui os dados anteriores. Se trocar EMBEDDING_MODEL, apague data/chroma/ antes.
.venv/bin/uvicorn manu.main:app --port 8000cd web
npm install
cp .env.example .env.local
npm run devAbra http://localhost:3000.
cd api
.venv/bin/pytestOs testes não usam rede, Ollama nem a chave do Claude.
Com a base indexada e o gabarito preenchido em api/eval/gabarito.yaml:
cd api
.venv/bin/manu-evalO relatório é salvo em api/eval/reports/.
- Embeddings:
bge-m3via Ollama. É multilíngue (manuais e perguntas estão em português), roda local e sem custo por chamada. - Geração: Claude com saída estruturada (
answer,refused,used_chunk_ids). A resposta nunca depende de interpretar texto livre. - Duas barreiras contra alucinação: limiar de similaridade antes do LLM e instrução para recusar quando os trechos não bastam.
- Limiar de similaridade: pendente de calibração com o gabarito (valor provisório 0,5).
Pendente: preenchido após a calibração do limiar com o gabarito final.
| Métrica | Valor |
|---|---|
| Acerto de busca (top-3) | — |
| Recusa correta | — |
| Recusa indevida | — |
| Respostas julgadas corretas | — |