分母是一個被接受的任務
成本數字最常壞在同一個地方:分母。每千 token 的單價是一次模型呼叫的價格,而賣給客戶的是一個做完而且被接受的任務。兩者之間還夾著規劃、檢索、多個模型、工具呼叫、人工核准,以及重試。
所以本檔案全程使用的分母是「通過接受標準的一個任務」。若改用全部啟動次數當分母,會出現一個會騙人的效果:失敗率一上升,啟動次數跟著變多,每次嘗試的平均成本反而看起來降低了。
在寫下第一個數字之前,下面五件事必須先鎖定;中途改動其中任何一項,後面所有列就不再可比:
- 一個任務從哪裡算開始、到哪裡算結束;
- 寫成文字的接受標準,而不是逐案判斷;
- 所有數字共用的日曆期間;
- 該期間啟動的任務數;
- 最終被接受的任務數。
成本總帳:決定最後數字的九個科目
分母固定之後,接下來的工作是把分子收齊。漏掉的科目通常並不小,它只是不以模型帳單的形式出現,所以沒有任何東西提醒你它存在。
| 成本科目 | 什麼讓它變大 | 為什麼常被漏掉 | 性質 |
|---|---|---|---|
| 模型推理 | 上下文長度、步數、推理 token | 被當成唯一的成本 | 變動 |
| 重試與失敗任務 | 失敗率與工具鏈長度 | 只有成功的呼叫被計入 | 變動 |
| 人工覆核與介入 | 需要核准的任務比例 | 被當成團隊開銷,不是任務成本 | 按任務算是變動,排班則是固定 |
| 第三方工具與 API | 每個任務的呼叫次數、資料授權 | 藏在月費訂閱裡 | 混合 |
| RPC、節點與模擬 | 查詢次數與模擬嘗試次數 | 免費額度掩蓋了真實成本 | 變動 |
| 儲存、向量索引與重新嵌入 | 語料規模與重建索引的頻率 | 一開始付過一次,之後就被忘掉 | 混合 |
| 監控、安全與濫用防制 | trace 量與事件次數 | 被歸為平台成本,而非產品成本 | 固定但會有尖峰 |
| 客服、退款與爭議 | 投訴率與退款政策 | 記在單位經濟之外 | 變動 |
| 空閒容量與最低承諾量 | 沒用到也要付的 GPU 或方案 | 只計算實際用量 | 固定 |
尚未量測的科目仍留在表上,標註為「尚未量測」,而不是刪掉。固定成本在整個期間用同一條規則分攤;中途換規則得到的毛利改善,來源只是方法變了,不是營運變好了。
費率要有日期,用量要是真的
費率是會過期的資料,這正是它容易被用錯的原因。今天生效的價格,不能在沒有公開說明調整方式的情況下,被拿來稱作舊期間的實際成本。
計費口徑也不統一。不同模型對輸入、輸出、快取讀取、快取寫入、批次與推理 token 的費率都不一樣,而自架 GPU 計的是容量而非 token。把兩者加在同一列,得到的數字回答不了任何問題。
讓一列成本能被別人覆核的,是和數字一起保存的四件東西:模型 ID 或計費項目、用量資料的來源、幣別與費率日期,以及把兩者相乘的公式。真的拿不到的數值寫成帶最壞假設的區間,而不是四捨五入成一個看起來很整齊的單一數字。
鏈上成本歸給觸發它的那個任務
鏈上動作有一個模型成本沒有的性質:失敗了照樣要付錢。被 reverted 的交易已經燒掉 gas,而那筆 gas 屬於觸發它的任務,不屬於某個再也沒人追查的通用基礎設施科目。
因此採用的是 receipt 上的實際數字,而不是送出前的 gas 估算;資產匯率取交易當時的價格,換算方法一併留存。一列完整的鏈上成本包含:
- 交易 hash 以及觸發它的任務 ID;
- receipt 上的 gas used 與 effective gas price;
- 最終狀態:成功或 reverted;
- 模擬費用,以及從未真正送出的嘗試;
- 隨之而來的 bridge、relayer 與簽章服務費用。
receipt 拿不到時仍可使用估算,但有一個條件:該列標明為估算,且不與含實際數字的列相加。
脆弱點只會在情境裡現形
一個平均成本數字,剛好藏住了最值得知道的事:在什麼條件下這門生意的經濟就不成立了。能讓它現形的不是計算精度,而是用同一條公式跑出來的幾個情境。
- 供應商漲價,模型與基礎設施都算;
- 失敗率與重試次數上升;
- 需要人工介入的任務比例上升;
- 免費額度、補助或補貼停止;
- 負載突增,備援容量必須以隨需價格買進;
- 接受標準收緊,導致接受率下降。
這一組情境要找的是:只變動一點點、卻讓毛利正負翻轉的那個參數。這種參數連同它的門檻值寫在前面,因為讀者的注意力真正該放在那裡。
最好的一個月不算結果。如果確實只算過一個期間,那就報告這一個期間,並註明目前還沒有可對照的期間。
收入要放在同一個期間
完整成本要有意義,對面必須有收入,而且是同一批任務、同一個客群、同一個期間的收入。取自兩個不同期間的兩個數字算不出毛利,只算得出差額。
算進產品收入的是客戶為服務支付的金額,扣掉退款、平台分成與付款成本。Token 出售、基金會撥款、投資款與國庫資產增值可以呈現,但要放在自己的那一列——錢的來源不同,可持續的時間也不同。
單位貢獻在固定成本之前報告,固定成本再以總額完整呈現。兩者回答的是兩個不同的問題,合成一個數字會讓兩個答案都消失。用這兩個數字推損益平衡的做法,另見AI Agent 的收入能不能覆蓋算力成本。
公布哪些數字,別人才重算得出來
一份成本計算要有重量,前提是別人能重算一次並得到接近的結果。下面是讓這件事成立的最小內容;客戶身分可以遮蔽,不會因此降低價值。
- 口徑與期間
- 一個任務的邊界、接受標準,以及採用的日曆期間
- 樣本與分布
- 啟動數與接受數,以及用量的 P50 與 P95,而不只是平均值
- 失敗與人工
- 失敗率、重試次數,以及需要人工介入的任務比例
- 費率與來源
- 模型與工具清單、計費項目、幣別與費率日期
- 收入分類
- 哪些算進產品收入,哪些另列一行
- 資料字典與公式
- 每個欄位的名稱、公式版本,以及可重算的匯總表
若一個百分比形式的節省宣稱沒有附上以上六項中的任一項,它仍然只是團隊聲明,不是已經被覆核過的數字。
重算工作表
這一節把上面的檔案換成別人可以重做一遍的形式。排列順序照計算流程,而不是照發現順序;其中沒有任何一列會產生建議。
| 檢查對象 | 用什麼數字對照 | 什麼會推翻這一列 | 證據不足時怎麼判 |
|---|---|---|---|
| 分母 | 同期間的接受任務數與啟動任務數 | 把每次 API 呼叫成本當成產品成本 | 接受標準寫成文字之前,這一列先擱置 |
| 費率 | 有日期的帳單或費率頁,對到該期間的用量 | 沒有日期的價格被當成舊期間的事實 | 數字標為估算,並與帳單分欄 |
| 科目完整度 | 供應商帳單加上人工工時與失敗嘗試 | 非模型的基礎設施被當成免費 | 尚未量測的科目保留為區間 |
| 鏈上成本 | receipt 上的 gas used 與 effective gas price,可回連任務 ID | gas 估算取代了真實交易 | 實際值優先,估算另行標註 |
| 收入期間 | 同一日曆期間的淨收入與完整成本 | 國庫流入取代了客戶付款 | 單位貢獻在固定成本之前報告 |
| 耐受度 | 在漲價與接受率下降的情境下重算一次 | 只公布最好的那個月 | 結果以區間連同門檻一起呈現 |
| 可重算性 | 其他人能依公式與資料字典重算 | 手上只有百分比形式的節省宣稱 | 重算成功之前,狀態維持為團隊聲明 |
做這張表時最常出現兩種閃失。第一,成本取自最樂觀的情境,收入也取自最樂觀的情境——這個組合在現實裡從來不會同時發生。第二,分攤規則改了一次,被記成毛利改善,而營運數字其實一動也沒動。
這份計算也有到期日。費率、模型清單或失敗率一變,就重算被這個變動碰到的那幾列並更新費率日期——而不是把整張表從頭做一次。
常見問題
為什麼不用每千 token 成本比較產品?
因為架構可能呼叫不同數量的模型和工具;被接受任務才反映完整工作量。
免費額度要算成本嗎?
應同時呈現現金支出和正常化成本,避免免費額度到期後結論失效。
人工覆核是固定還是變動成本?
視工作方式而定;若每個任務都需要則屬變動,值班與管理可按一致規則分攤。
這樣的成本數字能成立多久?
在記下的費率、模型清單與重試率仍然相同的期間內。其中任何一項變了,就重算被這個變動碰到的那幾列並更新費率日期,而不是整張表重做。
本檔案使用的來源
- AI x Crypto: Exploring Use Cases and Possibilities — 用於核對範圍、版本、行為或控制的一手資料;使用時仍須確認頁面日期與上下文。
- Building effective agents — 用於核對範圍、版本、行為或控制的一手資料;使用時仍須確認頁面日期與上下文。
- Measuring AI agent autonomy in practice — 用於核對範圍、版本、行為或控制的一手資料;使用時仍須確認頁面日期與上下文。
- OpenAI Agents SDK — 用於核對範圍、版本、行為或控制的一手資料;使用時仍須確認頁面日期與上下文。
- OpenAI Evals — 用於核對範圍、版本、行為或控制的一手資料;使用時仍須確認頁面日期與上下文。
- Ethereum JSON-RPC API — 用於核對範圍、版本、行為或控制的一手資料;使用時仍須確認頁面日期與上下文。
- AI agent quickstarts for Safe Smart Account — 用於核對範圍、版本、行為或控制的一手資料;使用時仍須確認頁面日期與上下文。
- NIST AI 600-1: Generative AI Profile — 用於核對範圍、版本、行為或控制的一手資料;使用時仍須確認頁面日期與上下文。
