Files
_Assistant_Lead_Tech/knowledge/backend/patterns/llm-providers.md
T
MaksTinyWorkshop ef24d85d57 capitalisation: triage 95_a_capitaliser + création domaine infra
Triage des 27 propositions du buffer de capitalisation (skill
capitalisation-triage), avec vérification des doublons contre la base.

Intégré dans knowledge/ (23 entrées):
- backend: redis (compensation incrBy non-atomique), nestjs (injection
  cassée sous tsx watch; guard write mode dégradé), async (test rollback
  pipeline multi-fichiers), contracts (idempotence POST), auth (disclosure
  comptes soft-deleted), prisma (index partial soft-delete), llm-providers
  (nouveau: OAuth vs API key, prompt caching).
- frontend: tests (garde-fous parking Later), navigation (fichiers
  non-route sous src/app Expo Router), general (type client vs payload
  backend), state (fallback catch-all mapping DB→UI).
- workflow: story-tracking (statut BMAD vs narratif obsolète).
- product: general (nouveau: doc feature store sans UI).
- infra: NOUVEAU DOMAINE (traefik, tailscale, docker, docker-networking,
  reverse-proxy-paths, sidecar tailscale) + 00_INDEX.md.

Autres:
- 90_debug_et_postmortem.md: post-mortem réseau Docker partagé hors compose.
- Rejeté 3 doublons (types enum contracts, getter PrismaService, $transaction).
- Buffer 95_a_capitaliser.md purgé et restauré à son état initial.
- _projects.conf: MAJ statuts epics + ajout app-rl799.
2026-06-25 10:31:22 +02:00

60 lines
2.6 KiB
Markdown

---
title: "Backend — Patterns : Fournisseurs LLM"
domain: backend
bucket: patterns
tags: [llm, anthropic, openai, api-key, oauth, prompt-caching, couts]
applies_to: [analysis, implementation, architecture]
severity: medium
validated_on: 2026-06-25
source_projects: [_Assistant_Cuisine]
---
# Backend — Patterns : Fournisseurs LLM
> Extrait de la base de connaissance Lead_tech. Voir `knowledge/backend/patterns/README.md` pour l'index complet.
---
<a id="pattern-oauth-consumer-vs-api-key"></a>
## OAuth abonnement consumer ≠ API key — ne pas mélanger les deux usages
Tous les fournisseurs LLM (Anthropic, OpenAI, Google) séparent strictement deux mondes :
| Type | Auth | Usage prévu | Coût |
|---|---|---|---|
| **Abonnement consumer** (Claude Pro/Max, ChatGPT Plus) | OAuth via app officielle | usage interactif personnel via clients officiels (desktop, web, plugin IDE) | forfait mensuel |
| **API platform** | API key | usage programmatique, multi-users, services tiers, prod | pay-per-token |
### Règle
- Ne **jamais** utiliser les credentials OAuth d'un abonnement consumer pour servir une application à plusieurs utilisateurs. Anthropic l'interdit explicitement (ToS) ; les autres le tolèrent moins ouvertement mais le principe est identique. Risque concret : bannissement du compte si détecté.
- Pour toute application applicative (chatbot, intégration produit), prendre une **API key séparée**, indépendante de l'abonnement consumer.
---
<a id="pattern-prompt-caching-system-prompt-stable"></a>
## Prompt caching obligatoire dès qu'un gros system prompt est stable
Tout système ayant un system prompt volumineux et stable (knowledge base, format de sortie, persona) DOIT activer le prompt caching côté fournisseur. La portion cachée est facturée à une fraction du tarif normal (ordre de grandeur : ~10 %), ce qui divise le coût input par 5 à 10 sur un usage où le system prompt domine.
```ts
// OpenAI : promptCacheKey via provider metadata
streamText({
model: openai("gpt-4.1-mini"),
system: bigStaticPrompt,
experimental_providerMetadata: {
openai: { promptCacheKey: "myapp-system-v1" },
},
});
// Anthropic : marquage explicite des blocs cacheables dans messages (cache_control)
```
### Conséquences sur les coûts
- Le **coût marginal** d'un nouvel utilisateur est quasi nul tant que le system prompt domine le volume de tokens.
- Pour un usage léger (quelques conversations/jour, prompt caching actif), prévoir un budget mensuel de l'ordre de quelques euros.
- Toujours poser un **budget cap** côté console fournisseur pour éviter toute dérive.
---