Apresentação
Cost Control — studyAI
Estratégia de controlo de custos em GenAI: rate limiting, caching, model selection e limites por utilizador.
Índice
Diagrama: fluxo de controlo de custos
A carregar diagrama…
Contexto
Em GenAI, o maior custo variável são as chamadas LLM (tokens). Sem controlo:
- Um user pode esgotar o budget
- Picos de uso imprevisíveis
- Difícil prever custos
Rate limiting
Já documentado em SECURITY.md. Resumo:
| Endpoint | Limite | Janela |
|---|---|---|
| /chat | 30 req | 1 min |
| /generate | 5 req | 1 h |
| /evaluate | 60 req | 1 min |
Implementação: Redis, sliding window. Key: ratelimit:{user_id}:{endpoint}.
Caching
Cache de respostas
- Key: hash(query + project_id + top-k chunk_ids)
- Value: resposta gerada
- TTL: 24h ou configurável
- Quando: RAG QA Agent, respostas idênticas ou muito similares
Cache de embeddings
- Key: hash(texto)
- Value: embedding vector
- Quando: Chunking (evitar re-embed de chunks iguais), queries repetidas
- Storage: Redis ou em chunks (já guardado)
Cache semântico (avançado)
- Queries semanticamente similares → mesma resposta
- Embedding da query → procurar respostas com similarity > 0.95
- Mais complexo, maior poupança
Dynamic model selection
Por tarefa
| Tarefa | Modelo | Rationale |
|---|---|---|
| Router | gpt-4o-mini | Classificação simples, poucos tokens |
| Content Planner | gpt-4o-mini | Estrutura, não precisa de criatividade máxima |
| Content Writer | gpt-4o | Qualidade de escrita |
| RAG QA Agent | gpt-4o-mini (default) | Respostas curtas, contexto RAG |
| Question Generator | gpt-4o-mini | Geração estruturada |
| Question Evaluator | gpt-4o-mini | Comparação, não geração longa |
Por plano do user
| Plano | Modelo chat | Modelo geração |
|---|---|---|
| Free | gpt-4o-mini | gpt-4o-mini |
| Premium | gpt-4o | gpt-4o |
| Pro | gpt-4o | gpt-4o + opção o1 para reasoning |
Implementação: user.plan ou user_profile.plan → selecionar modelo no service.
Limites por plano
| Plano | Chat/mês | Gerações/mês | Projetos | Storage |
|---|---|---|---|---|
| Free | 100 | 5 | 3 | 100 MB |
| Premium | 500 | 30 | 10 | 1 GB |
| Pro | Ilimitado* | 100 | Ilimitado | 10 GB |
*Com rate limit por minuto.
Implementação:
- Contador em Redis ou DB:
usage:{user_id}:{metric}:{month} - Verificar antes de cada ação
- Reset mensal (cron)
Métricas e alertas
O que medir
- Tokens por user/dia
- Custo por user/dia
- Custo total/dia
- Cache hit rate
- Rate limit 429s
Alertas
- Custo diário > X
- User com uso anómalo (> 3× média)
- Cache hit rate < 20%
Ferramentas
- LangSmith: Token usage por run
- Redis: Contadores de uso
- DB: Tabela usage_metrics (agregado diário)
Referências
- SECURITY.md — Rate limiting
- TECH_DECISIONS.md — Modelos
- ARCHITECTURE.md — Observabilidade
Zona de prática
Sem perguntas. Clica em Editar para adicionar.