Rapport d'utilisation des tokens
Lit les fichiers de rollout locaux de l'agent et imprime l'utilisation du segment de conversation le plus récent plus de toute la session (deux lignes) :
本段会话:输入 123456 / 缓存命中 98765 / 输出 4321 / 命中率 80.0% / 费用 ¥0.12
整个会话:输入 987654 / 缓存命中 876543 / 输出 43210 / 命中率 88.8% / 费用 ¥0.50
Pourquoi les deux lignes ? Les nombres de la session entière sont calculés localement par le script (sans appels de modèle supplémentaires), donc les rapporter ne coûte que quelques dizaines de caractères supplémentaires dans la réponse — une surcharge de tokens négligeable, et l'utilisateur peut comparer le tour actuel au total de la session.
Quand exécuter
- Exécuter avant de composer la réponse finale de chaque session.
- Formulations déclencheurs : "token usage", "用量", "费用", "cost", "billing", "多少 tokens", "汇报", "spent".
- Pourquoi : cela donne à l'utilisateur une ligne d'utilisation par tour qu'il peut recouper avec la facture réelle du fournisseur. Le coût est une estimation (instantané de tarification), pas la facture.
Comment exécuter
Script : scripts/usage_report.py — Python 3.9+, bibliothèque standard uniquement
(rien à installer), sauf le package optionnel zstandard nécessaire pour les logs DeepSeek Harness (dsh).
python3 <chemin-absolu-de-ce-dossier>/scripts/usage_report.py --latest # segment/session le plus récent (par défaut)
python3 <chemin-absolu-de-ce-dossier>/scripts/usage_report.py --whole # toute la session la plus récente
python3 <chemin-absolu-de-ce-dossier>/scripts/usage_report.py --all # liste par session
python3 <chemin-absolu-de-ce-dossier>/scripts/usage_report.py --agent zcode|codex|claude|opencode|dsh
python3 <chemin-absolu-de-ce-dossier>/scripts/usage_report.py --session <sous-chaîne> # cibler une session
Utilisez toujours le chemin absolu vers le dossier de cette compétence. Ne faites pas cd ailleurs
d'abord. Passez --agent explicitement lorsque vous l'exécutez depuis une session d'agent
(la détection automatique prend le fichier le plus récemment modifié, qui peut appartenir à un
agent différent exécuté simultanément) ; --session épingle un fichier de session spécifique.
Ajoutez la sortie du script à la réponse finale textuellement — les deux lignes, sur des lignes séparées (本段会话 ci-dessus, 整个会话 ci-dessous). Si la réponse est en markdown, un seul saut de ligne s'affiche comme un espace et fusionne les deux lignes, donc placez-les dans un bloc de code (ou laissez une ligne vide entre elles) :
本段会话:输入 123456 / 缓存命中 98765 / 输出 4321 / 命中率 80.0% / 费用 ¥0.12
整个会话:输入 987654 / 缓存命中 876543 / 输出 43210 / 命中率 88.8% / 费用 ¥0.50
- Code de sortie 0 → incluez toujours les lignes, même si les nombres semblent identiques au rapport précédent (l'utilisateur les veut à chaque tour).
- Codex rapporte une seule ligne (session entière) — il n'y a pas de données de segment.
- Code de sortie 1 / "No usage data found" → ignorez silencieusement ; ne demandez pas à l'utilisateur.
- Toute autre erreur → corrigez la cause (Python manquant, dossier de compétence déplacé) avant de répondre ; n'ignorez pas silencieusement.
Agents pris en charge
| Agent | Source de données | Signification de --latest |
|---|---|---|
| ZCode | ~/.zcode/cli/rollout/model-io-*.jsonl | dernier segment : enregistrements depuis la dernière requête dont le dernier message est une invite utilisateur (ce tour incluant ses appels d'outils) |
| Codex | ~/.codex/sessions/**/rollout-*.jsonl | dernière session (entière) — les rollouts Codex stockent des totaux cumulatifs, donc seul le total final est rapporté, comme une seule ligne ; les données de segment ne sont pas disponibles |
| Claude | ~/.claude/projects/**/*.jsonl | dernier segment : enregistrements depuis le dernier enregistrement "type":"user" |
| OpenCode | <data>/opencode/opencode.db (SQLite ; %LOCALAPPDATA% sur Windows, $XDG_DATA_HOME ou ~/.local/share autrement) | dernier segment de la session la plus récente (depuis le dernier message utilisateur) |
| DSH | ~/.dsh/sessions/**/session.jsonl[.zstd] (compressé zstd ; nécessite zstandard optionnel) | dernier tour (un échange utilisateur) + session entière |
Tous sont analysés à partir de formats documentés, vérifiés localement ou bien connus. DeepSeek Harness (dsh) et d'autres agents peuvent être ajoutés avec un petit analyseur — voir README.md pour la recette.
Précision et limites
Le rapport est une estimation à partir des données de rollout locales + prix catalogue, pas la facture du fournisseur. Les écarts par rapport à la page d'utilisation officielle peuvent provenir de :
- Les totaux Codex sont cumulatifs : chaque enregistrement
total_token_usageest le total de session cumulé, donc le script utilise le dernier enregistrement (ne fait jamais la somme). Les nombres par requête et par segment ne sont pas disponibles pour Codex. - Le tarif heures pleines/creuses est appliqué par heure de début de session, tandis que le fournisseur facture chaque requête à son propre horaire. Une session traversant une limite de période (09:00–12:00 / 14:00–18:00 heure de Pékin) est mal tarifée pour la partie traversée.
- Les tokens de sortie de raisonnement sont inclus dans
outputpour Codex (facturés au taux de sortie) ; les rollouts ZCode n'exposent aucun champ de raisonnement. - Les rollouts locaux peuvent ne pas capturer toutes les requêtes sur la clé (flux interrompus, appels non interactifs), donc les totaux peuvent être inférieurs à l'utilisation complète de la clé.
- Les tarifs sont un instantané ; une clé de passerelle/agrégateur ou un ID de modèle différent peut facturer à des prix différents.
Modèle de coût
Tarification officielle DeepSeek heures pleines/creuses, effective 2026-08-17 00:00 heure de Pékin (annoncée 2026-08-13). Heures de pointe : 09:00–12:00 et 14:00–18:00 heure de Pékin ; tous les autres horaires sont creuses à moitié prix. Les sessions avant 2026-08-17 utilisent les anciens tarifs forfaitaires.
| Modèle | Période | cache-in | miss-in | sortie | (CNY / 1M tokens) |
|---|---|---|---|---|---|
| deepseek-v4-flash | creuses | 0,05 | 1,5 | 4,5 | |
| deepseek-v4-flash | pointe | 0,10 | 3,0 | 9,0 | |
| deepseek-v4-pro | creuses | 0,15 | 4,5 | 13,5 | |
| deepseek-v4-pro | pointe | 0,30 | 9,0 | 27,0 |
La période de facturation provient de l'heure de début de session (heure locale de la machine). Si les
tarifs officiels changent, mettez à jour les tables PRICES_* dans scripts/usage_report.py ;
la source faisant autorité est platform.deepseek.com.
Intégration (rapport automatique à chaque session)
Ajoutez cette règle au fichier d'instructions utilisateur de l'agent (~/.zcode/AGENTS.md,
~/.codex/AGENTS.md, CLAUDE.md, ou un fichier AGENTS.md de projet) :
Exécutez
python3 <dossier-compétence>/scripts/usage_report.py --agent <votre-agent> --latest(passez TOUJOURS--agent— la détection automatique peut lire les données d'un autre agent exécuté simultanément) avant chaque réponse finale et ajoutez ses deux lignes de sortie textuellement :本段会话:输入 X / 缓存命中 Y / 输出 Z / 命中率 N% / 费用 ¥M整个会话:输入 X / 缓存命中 Y / 输出 Z / 命中率 N% / 费用 ¥M. Ignorez uniquement lorsque le script affiche "No usage data found".
Sécurité
- Le script lit uniquement les fichiers JSON de rollout locaux sous le répertoire personnel
de l'utilisateur. Il ne lit, n'imprime ni ne nécessite de clés API, fichiers
.envou identifiants. - Les fichiers de rollout peuvent contenir du texte d'invite — ne faites jamais écho à leur contenu. Imprimez uniquement les nombres agrégés que le script produit.