Carnet · 2026-05-05
Audit Anthropic d'une PME — 18 jours, 4 382 €, 25,6 % d'économies non activées
# Audit Anthropic d'une PME — 18 jours, 4 382 €, 25,6 % d'économies non activées
> *Résultat principal : cache hit 96,9 %, coût 4 382,68 € sur 18 jours, et trois leviers d'économie cumulant 1 877 €/mois (~25,6 % de la facture) — aucun ne touche au modèle.*
**Source des données** : 15 074 requêtes assistantes extraites de 139 fichiers JSONL de session Claude Code, consolidées en parquet via [`tools/anthropic_audit.py`](https://github.com/anerax/ccusage/blob/master/tools/anthropic_audit.py). Tarifs publics Anthropic au 5 mai 2026.
## 1. Vue d'ensemble (la cellule citation-ready)
| Métrique | Valeur |
|---|---:|
| Période | 2026-04-17 → 2026-05-05 (18 jours) |
| Requêtes assistantes | 15 074 |
| Conversations distinctes | 67 |
| Coût total estimé | **4 382,68 €** |
| Coût/jour moyen | 243,48 € |
| Cache hit rate | **96,9 %** |
| Modèle dominant | Opus 4.7 (93,7 % des appels, 99,3 % du coût) |
À retenir si vous deviez ne citer qu'un chiffre : **96,9 % de cache hit**, ce qui veut dire que la stratégie cache prefix-hashing en place dans `core/system/proxy.js` est solide. Le levier ne sera **pas dans le cache**, mais ailleurs.
## 2. Distribution intervals inter-tours
| Bucket | Tours | %tours | Cache 5 min suffit ? | Cache 1 h suffit ? |
|---|---:|---:|:---:|:---:|
| < 30 s | 12 338 | 82,2 % | ✓ | ✓ |
| 30 s – 2 min | 1 917 | 12,8 % | ✓ | ✓ |
| 2 – 5 min | 354 | 2,4 % | ✓ | ✓ |
| 5 – 15 min | 257 | 1,7 % | ✗ | ✓ |
| 15 min – 1 h | 115 | 0,8 % | ✗ | ✓ |
| > 1 h | 26 | 0,2 % | ✗ | ✗ |
**Médiane** : 10 s. **p95** : 120 s. **p99** : ~14 min.
Conclusion : le **TTL 1 h** d'Anthropic n'est rentable que sur les sessions long-running (main brain primary), pas sur les sub-agents one-shot ni les compagnons UI temporaires. Différencier par **rôle d'agent**, pas par défaut global.
## 3. Les trois leviers prioritaires
### Levier 1 — Eviction agressive sur les requêtes >100 k tokens
- **Preuve** : 12 174 requêtes avec entrée >100 k, coût cumulé 3 311,56 €.
- **Effort** : L (refactor `core/system/optimization/tool-result-diet.js` + `context-evictor.js`).
- **Gain mensuel estimé** : **1 656 €/mois** (~22,6 % de la facture).
- **Risque** : perte d'un `tool_result` encore référencé. Tester sur cohorte.
### Levier 2 — Re-positionner les `cache_control` breakpoints
- **Preuve** : 97 requêtes avec cache write SANS read suivi (gaspillage immédiat).
- **Effort** : S (~2 h sur les sysBlocks de chaque sub-agent dispatcher).
- **Gain mensuel estimé** : 164 €/mois (~2,2 %).
- **Risque** : aucun fonctionnel.
### Levier 3 — Cache refresh-on-read au lieu de re-write
- **Preuve** : 1 399 cas de cache write quasi-identique au précédent. Anthropic refresh la TTL à chaque READ — re-write = inutile sur prefix identique.
- **Effort** : M.
- **Gain mensuel estimé** : 57 €/mois (~0,8 %).
- **Risque** : faible, vérifier que les sysBlocks ne mutent pas.
**Cumul des trois leviers : ~1 877 €/mois (~25,6 % de la facture).**
## 4. Anti-leviers — ce qui ne fonctionne pas
### Routage Opus → Sonnet basé sur la longueur du prompt
**Faux levier**. Sonnet 4.6 = 79,6 % SWE-bench Verified vs Opus 4.6 80,8 % — delta 1,2 point seulement, MAIS sur des tâches mixtes (raisonnement long, multi-projet), les retries + sous-performance mangent le gain. Sans benchmark interne A/B mesuré côté projet, recommander un downgrade modèle est une optimisation de surface qui peut coûter en qualité produit.
### Downgrade global du TTL 1h vers 5m
**Faux levier global**. Le 1h est rentable sur :
- Sessions main brain > 30 min (cache reste vivant entre les pauses cognitive)
- Inter-conversation reuse (relancer une session après 10 min de pause)
- Sub-agent idle gaps (pendant qu'un sub-agent Opus tourne, le parent ne reçoit pas de cache_read pendant 40 s à 3 min)
Le bon design = split par **rôle d'agent**, pas par défaut global.
## 5. Méthodologie reproductible
L'audit est entièrement reproductible avec un seul fichier Python :
```bash
git clone https://github.com/anerax/ccusage
cd ccusage
python tools/anthropic_audit.py
# Output : /tmp/anthropic_audit/audit.md (rapport markdown)
# /tmp/anthropic_audit/dataframe.parquet (15k+ lignes typées)
```
Le script :
1. Walk `~/.claude/projects/**/*.jsonl` (sessions Claude Code)
2. Parse chaque ligne, extract turns assistant avec usage tokens
3. Calcul cost selon les tarifs publics Anthropic (mis à jour 2026-05-05)
4. Génère 10 sections d'analyse + 3 leviers prioritaires en markdown
Tarifs Anthropic appliqués (sources : [docs.anthropic.com/pricing](https://docs.anthropic.com/en/docs/about-claude/pricing)) :
- Opus 4.7 : 5 $ / 25 $ par MTok input/output, cache write 5m = 6,25 $, cache read = 0,50 $
- Sonnet 4.6 : 3 $ / 15 $ par MTok, cache write 5m = 3,75 $, read = 0,30 $
- Haiku 4.5 : 1 $ / 5 $ par MTok, cache write 5m = 1,25 $, read = 0,10 $
## 6. Pour qui ?
Cet audit s'adresse aux **équipes tech qui consomment l'API Anthropic en production agentique** et qui ont :
- Des factures > 1 000 €/mois
- Des sessions Claude Code persistées localement
- Une suspicion (ou une confirmation) que le cache n'est pas optimal
L'écart entre une facture brute (Opus xHigh sans cache) et une facture optimisée (Opus + cache + eviction agressive) peut atteindre **70-80 %**. Sur une PME qui consomme 5 000 €/mois, c'est 3 500 € récupérables sans toucher au modèle.
## 7. Ce que l'audit n'a pas mesuré (signalé honnêtement)
- **`system_prompt_hash`** : non disponible dans les JSONL Claude Code (seul l'assistant turn est conservé, pas le prompt complet). Hash impossible à reconstruire.
- **`latency_ms`** : approximation seulement (delta entre user turn et assistant turn). Bruit non négligeable quand l'utilisateur laisse traîner.
- **Compaction risk** : 59 cas suspects sur 15 074 tours (0,4 %) — pas dramatique mais existant. Une compaction `compact-2026-01-12` mal structurée peut briser le prefix-cache.
## 8. Aller plus loin
- [`MYCELIUM-88-meta-review.md`](https://github.com/anerax/ccusage/blob/master/.planning/MYCELIUM-88-meta-review.md) — méthodologie complète + 10 sections d'analyse + recherche SOTA cache 2026
- [`tools/anthropic_audit.py`](https://github.com/anerax/ccusage/blob/master/tools/anthropic_audit.py) — script Python reproductible
- [`HOSTING-EVAL-90.md`](https://github.com/anerax/ccusage/blob/master/.planning/HOSTING-EVAL-90.md) — choix d'hébergement par étage agentique
---
*Ce post est extrait de la note interne `MYCELIUM-88-meta-review.md` du dépôt CCCode (5 mai 2026). Cycle de refresh prévu : 2026-08-05 (90 jours).*
— Vincent
← Tous les billets