Claude Code Token 費用分析:費用計算、工具統計與 Web Dashboard 實作
這個章節要説明關於 Claude Code Analytics 的部分内容
計算 token 費用、分析工具使用模式、建立 Web Dashboard
首先加入 Token 計算器
這邊要查詢所有 session,計算每個 session 的 token 用量與美金費用
新增費用計算模組
新增 lib/costs.mjs:
urscos Tech.
計算 token 費用、分析工具使用模式、建立 Web Dashboard
新增 lib/costs.mjs:
session保存格式結構如下:

json格式化如下:

Claude Code 沒有使用資料庫,而是選擇了最簡單的格式:每個 session 一個 .jsonl 檔案,每行一條 JSON 訊息。
| 比較面向 | JSONL 格式 | 關聯式資料庫 |
|---|---|---|
| 讀取方式 | 任何文字編輯器、cat |
需要 DB 驅動 |
| 追加速度 | 極快(append-only) | 需要 transaction |
| 查詢能力 | 低(需全掃) | 高(SQL) |
| 跨機器遷移 | 複製檔案即可 | 需要 dump/restore |
| 故障恢復 | 行級別,單行壞掉不影響其他行 | 依賴 transaction log |
| 版本控制 | 可用 git 追蹤 | 不適合 |
結論:AI 對話是只增不改、需要人類可讀、不需要複雜查詢的應用場景,所以JSONL 是最合適的選擇。
先問個問題,彩球從 38 個號碼中抽 6 個,理論上每組會出現「連號對」(兩個相鄰的數字)的機率是多少,平均每期會出現幾對連號?0.5?1?2?
很多人會猜「應該很少,大概 0.2 對左右」。理由很直觀:38 個選 6 個,平均每個號碼之間應該隔 38/6 ≈ 6 格,連號感覺很稀有。
但這個直覺是錯的。連號其實非常常見,平均每期會出現超過 0.8 對。

彩球有 38 個號碼,每期開 6 顆球。任何一個號碼平均 6/38 ≈ 15.8% 的機率出現。換算過來——
平均每 6.33 期,每個號碼會出現一次。
這個「6.33」也叫做「期望間距」。然而實際每個號碼的間距會落在哪裡?透過圖形可以看到

圖裡藍色長條是「實際間距分布」,紅線是「幾何分布的理論曲線」。
理論告訴你最常見的間距是 1 期(下一期就再出現),不是 6 期。
直覺以為「平均 6.33 期」表示「大多落在 6 附近」是錯的——平均值會被少數的長間距(20、30 期)拉高,但中位數和眾數都遠小於平均值。
幾何分布 PMF:
$$P(X = k) = p \cdot (1 - p)^{k - 1}, \quad k = 1, 2, 3, \ldots$$
期望間距:
$$E[X] = \frac{1}{p} = \frac{38}{6} \approx 6.33$$
Kolmogorov-Smirnov 檢定(用來檢驗實際間距是否符合幾何分布):
$$D = \sup_x \left| F_n(x) - F(x) \right|$$
| 符號 | 意思 |
|---|---|
| $p$ | 每期出現機率(= 6/38) |
| $X$ | 兩次出現之間的間距(期數) |
| $F_n(x)$ | 實際數據的經驗 CDF |
| $F(x)$ | 幾何分布的理論 CDF |
| $D$ | 兩個 CDF 的最大差距 |
K-S 檢定的判定跟 Chi² 類似:p-value > 0.05 表示「實際間距和理論幾何分布沒有顯著差異」。
(py3.10) G:\Dev\Program\Lottery>python blog\02-gap-distribution.py
========== 彩球 間距分析 ==========
主號碼範圍 : 1-38
理論期望間距 : 6.3333 (= main_max / main_count = 38/6)
實際平均間距 : 6.3128
間距樣本數 : 11308
K-S 檢定(vs 幾何分布 p=0.1579)
D 統計量 = 0.1579
p-value = 0.000000
判定 : 拒絕「符合幾何分布」假設
========== 樂彩 間距分析 ==========
主號碼範圍 : 1-49
理論期望間距 : 8.1667 (= main_max / main_count = 49/6)
實際平均間距 : 8.1297
間距樣本數 : 12641
K-S 檢定(vs 幾何分布 p=0.1224)
D 統計量 = 0.1224
p-value = 0.000000
判定 : 拒絕「符合幾何分布」假設
一句話結論:號碼間距服從幾何分布——最常見的間距是 1 期,不是 6 期。長間距是長尾事件,本來就會偶爾出現。
這并不能拿來預測「冷號該回補」,這是賭徒謬誤的核心。幾何分布有一個關鍵特性叫無記憶性:
$$P(X > s + t \mid X > s) = P(X > t)$$
意思是「已經等了 $s$ 期不出現,再等 $t$ 期才出現的機率,跟一開始等 $t$ 期出現的機率一樣」。
一個號碼已經 30 期沒出現,下一期出現的機率還是 6/38 ≈ 15.8%。
歷史不會「累積債務」,未來不會「強制償還」。
幾何分布是少數有「無記憶性」的分布之一(另一個是連續版的指數分布)。這個性質正是「每期獨立」的數學保證。
分析間距的用途:
系列 B 第二篇:量化「兩個年份之間城市變了多少」有兩條主流路徑——SSIM 著重結構相似度,ResNet 著重語義變化。本篇拆解兩者各自的擅長領域,並以實際數據示範何時應同時採用兩個指標。
前一篇介紹的三個指標(邊緣密度、建築覆蓋率、紋理熵)屬於單幀指標——每張影像獨立計算一個數值。
然而研究城市發展時,真正想回答的問題是「這個地點從 2018 到 2025 發生了多大的變化」。最直覺的做法是差分(metric_2025 - metric_2018),但此方式有一個根本限制:
兩張影像的 edge_density 同樣是 0.18,差值為零——但實際上整片區域可能已完全重建,只是新舊建築的邊緣密度恰好相同。
差分丟失了「像素級的對應關係」。需要的是直接比對兩張影像本身的方法。
主流有兩條路徑:
| 方法 | 偵測對象 | 計算成本 | 可解釋性 |
|---|---|---|---|
| SSIM | 結構相似度(像素對應) | 低(CPU 即可) | 高 |
| ResNet 餘弦距離 | 語義相似度(特徵對應) | 中(一次 forward pass) | 中 |
兩者並非替代關係,而是互補。