Token Usage Report - Bericht zum Token-Verbrauch
Liest die lokalen Rollout-Dateien des Agenten aus und gibt die Nutzung des letzten Konversationssegments plus der gesamten Sitzung (zwei Zeilen) aus:
本段会话:输入 123456 / 缓存命中 98765 / 输出 4321 / 命中率 80.0% / 费用 ¥0.12
整个会话:输入 987654 / 缓存命中 876543 / 输出 43210 / 命中率 88.8% / 费用 ¥0.50
Warum beide Zeilen? Die Gesamtsitzungszahlen werden lokal vom Skript berechnet (keine zusätzlichen Modellaufrufe). Daher kostet die Ausgabe nur ein paar Dutzend zusätzliche Zeichen in der Antwort – ein vernachlässigbarer Token-Overhead, und der Benutzer kann den aktuellen Zug mit der Sitzungssumme vergleichen.
Wann ausführen
- Führe das Skript vor dem Erstellen der endgültigen Antwort jeder Sitzung aus.
- Auslöser-Phrasen: "token usage", "用量", "费用", "cost", "billing", "多少 tokens", "汇报", "spent".
- Warum: Es gibt dem Benutzer eine Nutzungszeile pro Zug, die er mit der tatsächlichen Rechnung des Anbieters abgleichen kann. Die Kosten sind eine Schätzung (Preisnotierung), nicht die Rechnung.
Wie ausführen
Skript: scripts/usage_report.py — Python 3.9+, nur Standardbibliothek (keine Installation erforderlich), außer dem optionalen Paket zstandard, das für DeepSeek Harness (dsh) Logs benötigt wird.
python3 <this-skill-dir>/scripts/usage_report.py --latest # letztes Segment/Sitzung (Standard)
python3 <this-skill-dir>/scripts/usage_report.py --whole # gesamte letzte Sitzung
python3 <this-skill-dir>/scripts/usage_report.py --all # Liste pro Sitzung
python3 <this-skill-dir>/scripts/usage_report.py --agent zcode|codex|claude|opencode|dsh
python3 <this-skill-dir>/scripts/usage_report.py --session <substring> # bestimmte Sitzung auswählen
Verwende immer den absoluten Pfad zum Verzeichnis dieser Fertigkeit. Wechsle nicht zuerst mit cd dorthin. Übergib --agent explizit, wenn du es aus einer Agenten-Sitzung heraus ausführst (die automatische Erkennung wählt die zuletzt geänderte Datei aus, die möglicherweise zu einem anderen gleichzeitig laufenden Agenten gehört); --session fixiert eine bestimmte Sitzungsdatei.
Hänge die Ausgabe des Skripts wortwörtlich an die endgültige Antwort an – beide Zeilen, auf separaten Zeilen (oben 本段会话, unten 整个会话). Wenn die Antwort im Markdown-Format ist, rendert ein einzelner Zeilenumbruch als Leerzeichen und verbindet die beiden Zeilen. Setze sie daher in einen umschlossenen Codeblock (oder lasse eine Leerzeile dazwischen):
```text
本段会话:输入 123456 / 缓存命中 98765 / 输出 4321 / 命中率 80.0% / 费用 ¥0.12
整个会话:输入 987654 / 缓存命中 876543 / 输出 43210 / 命中率 88.8% / 费用 ¥0.50
```
- Exit-Code 0 → immer die Zeilen einfügen, auch wenn die Zahlen identisch zum vorherigen Bericht erscheinen (der Benutzer möchte sie bei jedem Zug).
- Codex meldet eine einzelne Zeile (gesamte Sitzung) – es gibt keine Segmentdaten.
- Exit-Code 1 / "No usage data found" → Stille überspringen; den Benutzer nicht fragen.
- Jeder andere Fehler → die Ursache beheben (fehlendes Python, verschobenes Fertigkeitsverzeichnis), bevor du antwortest; nicht stillschweigend überspringen.
Unterstützte Agenten
| Agent | Datenquelle | --latest bedeutet |
|---|---|---|
| ZCode | ~/.zcode/cli/rollout/model-io-*.jsonl | letztes Segment: Datensätze seit der letzten Anfrage, deren letzte Nachricht ein Benutzerprompt ist (dieser Zug inkl. seiner Tool-Aufrufe) |
| Codex | ~/.codex/sessions/**/rollout-*.jsonl | letzte Sitzung (gesamte) – Codex-Rollouts speichern kumulative laufende Summen, daher wird nur die letzte Summe als einzelne Zeile gemeldet; Segmentdaten sind nicht verfügbar |
| Claude | ~/.claude/projects/**/*.jsonl | letztes Segment: Datensätze seit dem letzten "type":"user" Datensatz |
| OpenCode | <data>/opencode/opencode.db (SQLite; %LOCALAPPDATA% unter Windows, $XDG_DATA_HOME oder ~/.local/share sonst) | letztes Segment der letzten Sitzung (ab der letzten Benutzernachricht) |
| DSH | ~/.dsh/sessions/**/session.jsonl[.zstd] (zstd-komprimiert; benötigt optionales zstandard) | letzter Zug (ein Benutzeraustausch) + gesamte Sitzung |
Alle vier werden aus dokumentierten, lokal verifizierten oder gut bekannten Formaten geparst. DeepSeek Harness (dsh) und andere Agenten können mit einem kleinen Parser hinzugefügt werden – siehe README.md für das Rezept.
Genauigkeit & Einschränkungen
Der Bericht ist eine Schätzung basierend auf lokalen Rollout-Daten + Listenpreisen, nicht die Rechnung des Anbieters. Abweichungen zur offiziellen Nutzungsseite können auftreten durch:
- Codex-Summen sind kumulativ: Jeder
total_token_usage-Datensatz ist die laufende Sitzungssumme, daher verwendet das Skript den letzten Datensatz (niemals summiert). Einzelanfragen- und Segmentzahlen sind für Codex nicht verfügbar. - Peak/Off-Peak wird pro Sitzungsstartzeit angewendet, während der Anbieter jede Anfrage nach ihrer eigenen Zeit bepreist. Eine Sitzung, die eine Peak-Grenze überschreitet (09:00–12:00 / 14:00–18:00 Beijing), wird für den überschnittenen Teil falsch bepreist.
- Reasoning-Ausgabe-Token sind in
outputfür Codex enthalten (zum Ausgabesatz abgerechnet); ZCode-Rollouts legen kein Reasoning-Feld offen. - Lokale Rollouts erfassen möglicherweise nicht jede Anfrage auf dem Schlüssel (abgebrochene Streams, nicht-interaktive Aufrufe), sodass die Summen niedriger sein können als die vollständige Schlüsselnutzung.
- Preise sind eine Momentaufnahme; ein Gateway-/Aggregator-Schlüssel oder eine andere Modell-ID kann zu anderen Preisen abgerechnet werden.
Kostenmodell
Offizielle DeepSeek Peak/Off-Peak-Preise, gültig ab 2026-08-17 00:00 Beijing-Zeit (angekündigt am 2026-08-13). Peak-Zeiten: 09:00–12:00 und 14:00–18:00 Beijing; alle anderen Zeiten sind Off-Peak zum halben Preis. Sitzungen vor dem 2026-08-17 verwenden die flachen Legacy-Preise.
| Modell | Zeitraum | cached-in | miss-in | out | (CNY / 1M Token) |
|---|---|---|---|---|---|
| deepseek-v4-flash | off-peak | 0.05 | 1.5 | 4.5 | |
| deepseek-v4-flash | peak | 0.10 | 3.0 | 9.0 | |
| deepseek-v4-pro | off-peak | 0.15 | 4.5 | 13.5 | |
| deepseek-v4-pro | peak | 0.30 | 9.0 | 27.0 |
Der Abrechnungszeitraum ergibt sich aus der Sitzungsstartzeit (maschinenlokale Zeit). Wenn die offiziellen Preise geändert werden, aktualisiere die PRICES_*-Tabellen in scripts/usage_report.py; die maßgebliche Quelle ist platform.deepseek.com.
Integration (automatischer Bericht für jede Sitzung)
Füge diese Regel zur Benutzer-Level-Anweisungsdatei des Agenten hinzu (~/.zcode/AGENTS.md, ~/.codex/AGENTS.md, CLAUDE.md oder einer Projekt AGENTS.md):
Führe
python3 <skill-dir>/scripts/usage_report.py --agent <your-agent> --latest(IMMER--agentübergeben – die automatische Erkennung könnte Daten eines anderen gleichzeitig laufenden Agenten lesen) vor jeder endgültigen Antwort aus und hänge seine beiden Ausgabezeilen wortwörtlich an:本段会话:输入 X / 缓存命中 Y / 输出 Z / 命中率 N% / 费用 ¥M整个会话:输入 X / 缓存命中 Y / 输出 Z / 命中率 N% / 费用 ¥M. Überspringe nur, wenn das Skript "No usage data found" ausgibt.
Sicherheit
- Das Skript liest nur lokale Rollout-JSON-Dateien im Home-Verzeichnis des Benutzers. Es liest, druckt oder benötigt niemals API-Schlüssel,
.env-Dateien oder Anmeldeinformationen. - Rollout-Dateien können Prompt-Text enthalten – gib deren Inhalt niemals aus. Gib nur die aggregierten Zahlen aus, die das Skript ausgibt.