Files
dayMaker_lp/documentação/05_RECOMMENDATION_ENGINE.md
Carlos Correia fee538eebd MVP
2026-05-29 11:03:29 +01:00

134 lines
3.2 KiB
Markdown

# Motor de Recomendações e IA
## Estado atual
O DayMaker usa uma abordagem baseada em **IA de linguagem com contexto do inventário**.
Não existe atualmente um motor de regras local como fonte principal das recomendações. A recomendação é gerada pelo serviço `AiRecommendationService`, que chama uma API Ollama remota.
---
## Serviço principal
Ficheiro:
```text
lib/services/ai_recommendation_service.dart
```
Responsabilidades:
- Buscar itens do utilizador no Supabase.
- Construir contexto textual do inventário.
- Enviar mensagens para a API Ollama.
- Manter histórico simples de conversa.
- Suportar `silent: true` para sugestões estruturadas.
- Buscar itens com imagens para a home.
---
## Endpoint e modelo
| Campo | Valor |
|-------|-------|
| Endpoint | `https://apichat.epvc.pt/api/chat` |
| Modelo | `llama3.2:3b` |
| Stream | `false` |
| Formato | Ollama `/api/chat` |
Payload base:
```json
{
"model": "llama3.2:3b",
"messages": [
{"role": "system", "content": "..."},
{"role": "user", "content": "..."}
],
"stream": false
}
```
---
## Prompt de sistema
A IA é instruída a:
- Ajudar a montar outfits e escolher o que levar.
- Usar linguagem simples e curta.
- Não usar emojis.
- Basear-se nas tags e notas dos itens.
- Responder sempre em português.
---
## Contexto enviado à IA
O contexto inclui os itens do utilizador:
```text
Itens disponiveis no inventario do utilizador:
- Bota verde (categoria: Roupa) [tags: casual, outdoor]
- Switch (categoria: Eletrónica) [tags: gaming, casual]
```
Esse contexto é anexado à mensagem de sistema.
---
## Chat IA
No ecrã `AiChatScreen`:
- O utilizador escreve livremente.
- Existem sugestões rápidas no topo.
- A resposta é apresentada como conversa.
- O histórico fica em memória no serviço enquanto a instância existir.
---
## Sugestão IA na Home
Fluxo:
1. Utilizador toca em `Pedir sugestão à IA`.
2. App abre um diálogo e pede a ocasião.
3. O utilizador pode escrever algo como `piquenique no parque` ou escolher chip rápido.
4. A app envia a ocasião em modo `silent`.
5. A IA deve devolver apenas nomes exatos dos itens, um por linha.
6. A app cruza esses nomes com os itens reais do Supabase.
7. A app mostra cards com imagem, nome e categoria.
8. O utilizador pode exportar os itens para um dia da semana.
---
## Modo silencioso
Quando `silent: true`, a instrução acrescentada ao pedido é:
```text
responde APENAS com os nomes exatos dos itens do meu inventario que sugeres, um por linha, sem numeracao, sem explicacao, sem comentarios.
```
Isto permite transformar a resposta da IA numa lista de itens reais.
---
## Limitações conhecidas
- A correspondência depende da IA devolver nomes próximos aos nomes reais.
- Se a IA devolver texto extra, a app tenta limpar linhas, mas pode falhar correspondência.
- A IA não vê imagens, apenas nomes, categorias, tags e notas.
- Não há ranking local por clima, cor ou histórico de uso.
---
## Melhorias futuras
- Resposta em JSON em vez de texto simples.
- Validação local mais robusta por ID de item.
- Sugestões com clima e duração.
- Preferências aprendidas por histórico.
- Integração com calendário.