Guilherme Favaron
Sync: Complete project update (Phase 6) - API, Metadata, Eval, Docs
a686b1b
# FAQ - Perguntas Frequentes
Respostas para as duvidas mais comuns sobre o RAG Template.
---
## Geral
### O que e RAG?
RAG (Retrieval-Augmented Generation) e uma tecnica que combina busca de informacao com geracao de texto por LLMs. Em vez do LLM gerar respostas apenas com seu conhecimento pre-treinado, ele primeiro busca informacao relevante em documentos e usa isso como contexto.
**Analogia**: E como fazer uma prova de consulta vs decorar tudo. Com RAG, o LLM pode "consultar" seus documentos.
### Quando usar RAG?
Use RAG quando:
- Precisa de respostas baseadas em documentos especificos
- Informacao muda frequentemente (docs atualizados)
- Quer citar fontes das respostas
- Precisa de conhecimento especializado/privado
- Quer reduzir alucinacoes do LLM
**Nao use RAG quando**:
- Precisa de conhecimento geral (use LLM direto)
- Tarefas criativas sem base documental
- Respostas muito curtas (busca simples e melhor)
### Qual a diferenca entre RAG e Fine-tuning?
| RAG | Fine-tuning |
|-----|-------------|
| Adiciona documentos externos | Retreina o modelo |
| Atualizacao instantanea | Requer re-treinamento |
| Menos recursos computacionais | Muito caro |
| Pode citar fontes | Conhecimento "embebido" |
| Melhor para docs especificos | Melhor para estilo/formato |
**Recomendacao**: Use RAG primeiro. Fine-tuning e para casos muito especificos.
---
## Ingestao de Documentos
### Por que meus resultados sao irrelevantes?
**Causas comuns**:
1. **Chunks muito grandes ou pequenos**
- Muito grande: Contexto diluido
- Muito pequeno: Perde contexto
- **Solucao**: Teste 500-1500 caracteres
2. **Estrategia de chunking inadequada**
- Documentos tecnicos: Use recursivo
- Textos narrativos: Use por sentencas
- **Solucao**: [Veja comparacao de chunking](tutorials/02_optimizing_rag.md#estrategias-de-chunking)
3. **Modelo de embedding nao adequado**
- Documentos tecnicos em ingles: `all-MiniLM-L6-v2`
- Documentos multilingues: `paraphrase-multilingual`
- **Solucao**: Teste diferentes modelos
4. **Query muito diferente dos documentos**
- Use query expansion
- Reformule a pergunta
- **Solucao**: Aba "Chat RAG" → Ativar query expansion
### Como escolher o tamanho de chunk?
**Regra geral**:
- Documentos tecnicos/codigo: 500-800 caracteres
- Documentos narrativos: 1000-1500 caracteres
- Perguntas/respostas: 200-500 caracteres
**Dica**: Use a aba "Comparacao de Chunking" para testar!
**Considere**:
- Modelo de embedding: Limite de tokens (geralmente 512)
- Contexto do LLM: Quantos chunks cabem (top_k * chunk_size)
- Semantica: Chunks devem ter sentido completo
### Posso usar imagens e PDFs?
- **PDFs**: Sim, suportado nativamente
- **Imagens**: Nao no momento (planejado para futuro)
- **DOCX**: Nao (planejado para futuro)
- **HTML/Markdown**: Nao (planejado para futuro)
### Quanto tempo demora a ingestao?
**Depende de**:
- Tamanho dos documentos
- Numero de chunks gerados
- Modelo de embedding usado
**Benchmarks tipicos** (CPU):
- Documento de 10 paginas: ~5-10 segundos
- Documento de 100 paginas: ~30-60 segundos
- 100 documentos pequenos: ~2-5 minutos
**Otimizacoes**:
- Use cache de embeddings (ja ativo)
- Batch processing (ja ativo)
- GPU para embeddings (requer config manual)
---
## Busca e Recuperacao
### O que e top_k e como escolher?
**Top_k** e o numero de documentos recuperados na busca.
**Guidelines**:
- Perguntas simples: top_k = 3-5
- Perguntas complexas: top_k = 5-10
- Analise comparativa: top_k = 10-20
**Trade-offs**:
- Muito baixo: Pode perder contexto relevante
- Muito alto: Ruido, latencia maior, custo maior
**Dica**: Use Playground para testar diferentes valores!
### Quando usar hybrid search?
**Use hybrid search (BM25 + vetorial) quando**:
- Busca por termos exatos e importantes (nomes, datas, numeros)
- Documentos tecnicos com terminologia especifica
- Mix de busca lexica e semantica
**Nao use quando**:
- Busca puramente semantica e suficiente
- Performance e critica (hybrid e ~2x mais lento)
- Documentos muito curtos
**Alpha recomendado**:
- 0.3-0.4: Enfase em BM25 (termos exatos)
- 0.5: Balanceado
- 0.6-0.7: Enfase em vetorial (semantica)
### O que e reranking e quando usar?
**Reranking** usa um modelo cross-encoder para re-ordenar resultados.
**Use quando**:
- Qualidade e mais importante que velocidade
- Top_k inicial e grande (ex: recupera 20, rerank para 5)
- Queries complexas
**Nao use quando**:
- Latencia e critica (<1s resposta)
- Hardware limitado (reranking e pesado)
- Resultados iniciais ja sao bons
**Performance**:
- Melhoria tipica: +10-15% precision
- Custo: +200-500ms de latencia
---
## LLMs e Geracao
### Qual LLM devo usar?
Depende de prioridades:
| Provider | Melhor para | Custo | Qualidade | Latencia |
|----------|-------------|-------|-----------|----------|
| **HuggingFace** | Testes, MVP | Gratis* | Media | Alta |
| **OpenAI GPT-3.5** | Producao rapida | Baixo | Boa | Baixa |
| **OpenAI GPT-4** | Melhor qualidade | Alto | Excelente | Media |
| **Anthropic Claude** | Textos longos | Medio | Excelente | Baixa |
| **Ollama** | Privacidade | Gratis** | Variavel | Variavel |
*Gratis mas com rate limits
**Requer servidor proprio
**Recomendacao**:
- Desenvolvimento: HuggingFace
- Producao: GPT-3.5 ou Claude
### Como melhorar a qualidade das respostas?
1. **Melhore a recuperacao**
- Ajuste chunk size
- Teste hybrid search
- Use reranking
- Aumente top_k
2. **Ajuste parametros do LLM**
- Temperature baixa (0.1-0.3): Respostas precisas
- Temperature media (0.4-0.6): Respostas naturais
- Temperature alta (0.7-1.0): Respostas criativas
3. **Melhore o prompt**
- Instrucoes claras
- Exemplos de formato desejado
- Restricoes explicitas
4. **Use modelo melhor**
- GPT-4 > GPT-3.5 > Modelos open-source
### Por que o LLM alucina mesmo com RAG?
**Causas**:
1. Contexto recuperado nao tem a resposta
2. Contexto e ambiguo ou contraditorio
3. LLM ignora o contexto
4. Temperature muito alta
**Solucoes**:
1. Verifique contextos recuperados (painel lateral)
2. Melhore a busca (hybrid search, reranking)
3. Use prompt mais restritivo: "RESPONDA APENAS com base no contexto"
4. Reduza temperature para 0.1-0.2
5. Use modelo mais capaz (GPT-4, Claude)
---
## Performance e Escalabilidade
### Como melhorar a velocidade?
**Ingestao**:
- Use modelo de embedding menor (384d vs 768d)
- Batch processing (ja ativo)
- Cache (ja ativo)
**Busca**:
- Limite top_k
- Use indices otimizados (IVFFLAT ja configurado)
- Connection pooling (configure no provider)
**Geracao**:
- Use LLM mais rapido (GPT-3.5 vs GPT-4)
- Reduza max_tokens
- Use streaming (nao implementado ainda)
### Quantos documentos posso armazenar?
**Depende do database**:
- Supabase free: 500MB = ~300k chunks pequenos
- Neon free: 10GB = ~6M chunks pequenos
- Railway: Baseado em credito
- Local: Ilimitado (ate disco encher)
**Calculo**:
```
Chunk medio: 1000 chars = 1KB
Embedding (384d): 1.5KB
Metadata: 0.5KB
Total: ~3KB por chunk
1GB = ~330k chunks
10GB = ~3.3M chunks
```
### O sistema escala?
**Ate 100k documentos**: Sim, sem problemas
**100k-1M documentos**: Requer otimizacoes
**1M+ documentos**: Requer arquitetura distribuida
**Otimizacoes para escala**:
- Indices IVFFLAT (ja implementado)
- Connection pooling
- Cache distribuido (Redis)
- Sharding de database
- Load balancing
---
## Banco de Dados
### Qual provider de banco escolher?
Veja [comparacao completa](DATABASE_COMPARISON.md).
**TL;DR**:
- **Desenvolvimento**: Neon (10GB free)
- **MVP/Demo**: Supabase (infraestrutura robusta)
- **Producao**: Supabase Pro ou database dedicado
- **Full-stack**: Railway (app + banco junto)
### Posso trocar de provider depois?
**Sim!** O codigo e 100% portatil (PostgreSQL padrao).
**Para migrar**:
1. Backup: `pg_dump $DATABASE_URL_OLD > backup.sql`
2. Setup novo provider
3. Restore: `psql $DATABASE_URL_NEW < backup.sql`
4. Atualize .env com novo DATABASE_URL
5. Reinicie app
**Tempo**: ~5-10 minutos
### Como fazer backup?
**Manual**:
```bash
pg_dump $DATABASE_URL > backup_$(date +%Y%m%d).sql
```
**Restore**:
```bash
psql $DATABASE_URL < backup_20260123.sql
```
**Automatico**:
- Supabase Pro: Backups diarios automaticos
- Neon: Point-in-time recovery
- Railway: Manual ou configure script
---
## Deploy e Producao
### Qual opcao de deploy e melhor?
Depende do caso:
| Opcao | Melhor para | Custo | Facilidade |
|-------|-------------|-------|------------|
| **HF Spaces** | Demo, Portfolio | Gratis | Muito facil |
| **Railway** | MVP, Startup | $5-20/mes | Facil |
| **Docker VPS** | Controle total | $5-50/mes | Medio |
| **Local** | Desenvolvimento | Gratis | Facil |
**Recomendacao**: Comece com HF Spaces para demo, migre para Railway/VPS para producao.
### Como monitorar em producao?
**Ja implementado**:
- Aba "Monitoramento"
- Logging estruturado (JSON)
- Metricas de latencia
**Adicional (recomendado)**:
- Prometheus + Grafana para metricas
- Sentry para erros
- CloudWatch/DataDog para logs
### Como lidar com picos de trafego?
**Opcoes**:
1. **Horizontal scaling**: Multiplas instancias do app
2. **Rate limiting**: Limitar requests por usuario
3. **Caching**: Cache de respostas frequentes
4. **Queue system**: Processar requests em fila
**Nao implementado** no template atual, mas pode adicionar facilmente.
---
## Desenvolvimento
### Como contribuir?
1. Leia [CONTRIBUTING.md](../CONTRIBUTING.md)
2. Fork o repositorio
3. Crie uma branch
4. Faca suas mudancas
5. Abra um Pull Request
### Como adicionar novo provider de LLM?
1. Crie arquivo em `src/llms/seu_provider.py`
2. Herde de `BaseLLM`
3. Implemente metodo `generate()`
4. Adicione ao factory em `src/llms/__init__.py`
5. Adicione testes
Veja [Arquitetura](../PROJECT_STRUCTURE.md) para detalhes.
### Como executar testes?
```bash
# Todos os testes
pytest tests/ -v
# Com cobertura
pytest tests/ --cov=src --cov=ui --cov-report=html
# Testes especificos
pytest tests/test_units.py -v
```
---
## Recursos Adicionais
### Tutoriais
- [Tutorial 1: Primeiros Passos](tutorials/01_getting_started.md)
- [Tutorial 2: Otimizando RAG](tutorials/02_optimizing_rag.md)
- [Tutorial 3: RAG em Producao](tutorials/03_production_deployment.md)
- [Tutorial 4: RAG Avancado](tutorials/04_advanced_rag.md)
### Documentacao
- [README Principal](../README.md)
- [Guia de Deploy](../DEPLOY.md)
- [Comparacao de Databases](DATABASE_COMPARISON.md)
- [Roadmap](ROADMAP.md)
### Comunidade
- GitHub Issues: [github.com/guifav/rag_template/issues](https://github.com/guifav/rag_template/issues)
- Discussions: Use GitHub Discussions
- Pull Requests: Contribuicoes bem-vindas!
---
## Nao encontrou sua duvida?
1. Procure em [issues existentes](https://github.com/guifav/rag_template/issues)
2. Abra nova issue com label "question"
3. Descreva sua duvida claramente
4. Comunidade ajudara!
---
**Ultima atualizacao**: Janeiro 2026