成本歸因到功能:知道每個功能花了多少錢
帳單只有一個總數,無法做決策。這是把成本拆到功能層級的做法。
當有人問「這個功能值不值得做」,你需要知道它每月花多少錢。但雲端帳單只給你一個總額,模型 API 帳單也只有一個總額。
成本歸因需要在呼叫端就打好標籤,事後無法補。
標籤設計
@dataclass
class CostTag:
feature: str # 'rag_qa' | 'summarize' | 'agent_support'
tenant: str # 客戶或部門
user_id: str
env: str # prod | staging
trigger: str # 'user' | 'batch' | 'internal' | 'eval'
# 每次呼叫都帶標籤,並在回應後記錄實際用量
def call_llm(messages, tag: CostTag, **kw):
r = provider.chat(messages, **kw)
metrics.record_cost(
**asdict(tag),
model=kw.get('model'),
in_tok=r.usage['in'], out_tok=r.usage['out'],
cost_usd=price(kw.get('model'), r.usage),
)
return r`trigger` 欄位很關鍵
把「使用者觸發」「批次任務」「內部測試」「評測」分開。很多團隊發現自己有兩三成的成本來自評測與測試——這不是壞事,但必須被看見,才能判斷是否合理。
可以回答的問題
- 每個功能的每月成本與趨勢。
- 每位使用者的平均成本(用於定價決策)。
- 每個客戶的成本(用於毛利分析)。
- 哪個功能的成本成長最快。
- 單次操作的成本分布(p50 / p95),找出昂貴的長尾。
搭配業務指標看
-- 每個功能的成本效益
SELECT feature,
SUM(cost_usd) AS cost,
COUNT(*) AS calls,
SUM(cost_usd) / COUNT(*) AS cost_per_call,
SUM(CASE WHEN success THEN 1 END) AS successes,
SUM(cost_usd) / NULLIF(SUM(CASE WHEN success THEN 1 END), 0)
AS cost_per_success
FROM llm_costs
WHERE ts >= NOW() - INTERVAL '30 days' AND env = 'prod'
GROUP BY feature ORDER BY cost DESC;
cost_per_success 比 cost_per_call 有意義得多。一個單次便宜但常常失敗需要重試的功能,實際成本可能更高。
設定預算與告警
- 每個功能設月度預算,達 80% 時告警。
- 單日成本超過近七日中位數兩倍時告警——這通常代表出現了迴圈或濫用。
- 新功能上線後兩週內密切追蹤,成本估算失準是常態。
把成本儀表板開放給產品與業務團隊看。當他們能看到「這個功能每月三萬」時,關於要不要優化的討論會理性很多。
訂閱後繼續閱讀全文
本篇為訂閱者專屬內容。訂閱後可取得下列權限:
- 解鎖全部內容權限
- 閱讀不限篇數
- 全站移除廣告
月卡
NT$240
開通 30 天
一次付清,開通 30 天
季卡
NT$620
開通 90 天
一次付清,開通 90 天,每天約 NT$7
年卡
NT$2,160
開通 365 天
一次付清,開通 365 天,每天約 NT$6
一次性付款,付款成功後立即開通,到期自動結束,不會再次扣款,也不需要取消訂閱。
立即訂閱
金額均為新臺幣(TWD),即實際扣款金額,不另收手續費
支援信用卡 · Apple Pay · Google Pay · WebATM · ATM 轉帳
購買須知與退款政策