0%
Custos, latência e atualização em produção

Colocação em produção

O protótipo custa três euros, o serviço custa três mil

10-15 min

Custos, latência e atualização em produção

Um serviço RAG entra em produção com 300 usuários. Duas semanas depois, a fatura mensal chega a quatro dígitos e a latência mediana passa de cinco segundos nos horários de pico. Ninguém havia calculado o custo por requisição, porque, em desenvolvimento, cada teste custava um centésimo de euro. No mesmo mês, um documento é retirado do site interno por um erro jurídico; ele continua no índice vetorial e o sistema segue citando-o por três semanas.

Esses dois problemas têm uma causa comum: o protótipo não tem ciclo de vida. Ele indexa uma vez, responde algumas dezenas de vezes, e nada muda. Um serviço em produção precisa absorver documentos que evoluem, documentos que desaparecem, picos de carga, e prestar contas sobre seu custo. Essas restrições não se somam no final: elas determinam escolhas de arquitetura que são muito caras de refazer depois.

Calcular o custo por requisição

Decomponha antes de otimizar. Uma requisição consome tokens de entrada, tokens de saída, um embedding da pergunta e, eventualmente, um reranqueamento.

TARIFS = {                     # euros pour 1 000 jetons, à ajuster
    "entree": 0.00015,
    "sortie": 0.00060,
    "plongement": 0.00002,
}

def cout_requete(jetons_contexte, jetons_question, jetons_reponse, reclassement_local=True):
    entree = (jetons_contexte + jetons_question + 250)   # 250 pour les consignes
    total = (entree / 1000) * TARIFS["entree"]
    total += (jetons_reponse / 1000) * TARIFS["sortie"]
    total += (jetons_question / 1000) * TARIFS["plongement"]
    return total

unitaire = cout_requete(3000, 30, 300)
print(f"{unitaire*1000:.2f} € pour 1 000 requêtes")
print(f"{unitaire*300*20*22:.0f} € par mois pour 300 personnes, 20 requêtes par jour ouvré")

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!