中转站折扣率指数 · 方法论
试运行这个指数是什么
指数值 = 全市场折扣率 × 100。97.15 读作「官方价的 97.2%」;若某日读数 55.00,即「官方价的 55%,约 5.5 折」。跌 = 灰市折扣加深。
数据来源
数据来自各站公布的标价。首批 2 家:302.AI(直接标价)、AIHubMix(倍率制)。
三形态归一
所有报价先归一到「每百万 token 美元」(usd_per_mtok):
| 形态 | 归一方式 |
|---|---|
| 直接标价 | 站点标价;若为人民币标价,按当日 CFETS USD/CNY 中间价折美元 |
| 倍率制 | 每百万 token 美元 = 模型倍率 × 1,000,000 ÷ 每美元额度单位;输出价 = 输入价 × 补全倍率;缓存读价 = 输入价 × 缓存倍率 |
| 分档 | 取最优公开档,档位随观测标注 |
两种形态互为校验:同一支 Claude Opus 5,302.AI 直接标价 $5 / $25,AIHubMix 倍率制换算(model_ratio 2.5、completion_ratio 5,即 2.5 × 1,000,000 ÷ 500,000 = $5 输入,输入 × 5 = $25 输出)亦为 $5 / $25(2026-08-31 302.AI 货架整批换代后重钉,见下方口径变更记录;302.AI 已不再售卖任何 OpenAI 模型,此前用作校验示例的 GPT-5.6 Sol 已随货架换代真实下架)。
混合价权重
折扣率按混合价(blended)口径,权重 缓存读 : 输入 : 输出 = 7 : 2 : 1,与本站 Token 价格指数同权重,保证与官方带同构可比。
同缓存口径规则(关键)
折扣率 = 中转站混合价 ÷ 官方混合价。两侧混合价必须用同一缓存口径:
- 两侧都有缓存价 → 都用各自真实缓存价(口径记
observed); - 任一侧没有缓存价 → 两侧都按「缓存读 = 输入价」降级(口径记
input_proxy)。
原因:官方价普遍给缓存读 90% 折扣,而多数中转站不公布缓存价。若拿「中转站降级混合价」除「官方真实混合价」,会把明明更便宜的站算成「贵过官方」。实例(2026-08-31 302.AI 货架换代后重取,此前用作示例的 Claude Sonnet 5 已随换代真实下架,见下方口径变更记录):302.AI 的 DeepSeek-V4-Flash 标价 $0.22 / $0.66(tier 形态,取最优公开档),官方按峰谷加权折美元(站上 fx_rate 表 2026-08-31 的 CFETS 中间价,1 USD = 6.7828 CNY)约为 $0.27 / $0.80、缓存读约 $0.0089;同口径(两侧混合价都按「缓存读=输入价」降级)折扣率约 0.82(约 8.2 折,中转确实更便宜);若口径不同——官方侧改用真实缓存价、中转侧仍降级——会算成约 1.89(贵 89%)——后者是口径错配的假象,把明明便宜近两成的站算成了贵近九成。反向亦然:中转站有缓存价而官方没有(如通义千问两支)时若不降级,会把 1.0083 算成 0.5740 的假折扣。
每行折扣率所用口径在指数详情页成分表逐行标注。
倍率制站点的缓存倍率恰为 1 时视为「未配置缓存计费」(该值是 one-api 的默认值,实测 807 支模型中 527 支恰为 1)而非真实缓存价,按未发布处理。
官方基准
分母取本站 Token 价格带的官方日价,当日必须自己有行——不再「当日缺失取最近有效日」(2026-08-31 起,见下方口径变更记录)。成分表标注分母实际取自哪天,正常情况下就是当天。官方人民币价折美元所用汇率与日期同样逐行可溯源。
分子结转:页面变过即停,不是按天数
中转站标价一经采集即持续有效,直到该站页面确凿变过为止——不是「超过 N 天没新观测就停」。判据是两道守卫:① 还够得着这条候选自己那份页面——近期仍有成功抓取,具体为 14 天内该页面至少有过一次成功抓取(这道门槛管的是页面可达性,不是价格新鲜度);② 该候选之后,这份页面没有被判定为「内容变了」的新抓取。任一道不过,当天这一站这个型号就不出价,不会拿更老的候选顶替。
采「页面变过」而不是「天数」,是因为一个健康的静态定价页可以很久不变——「N 天没新观测」在这里不等于陈旧,误伤会把健康的慢变源当死源掐断。
发布门槛与缺期
篮子内 ≥3 支模型有当日折扣率才发布,否则缺期(宁缺勿滥,缺期在图上如实留空)。折扣率 >1.20(贵过官方 20% 以上)或 <0.05(疑似假标价或解析错误)的观测转入隔离,不进指数。0.05–1.20 之间照常入带——贴官方价、或中转站收便利费加价,都是真实现象:实测多支模型的中转站标价与官方刊例价完全一致,也有站点稳定加价销售。
口径变更记录:溢价隔离阈值 1.05 → 1.20(2026-07-27,issue #74)
改前:折扣率贵过官方 5% 以上(>1.05)即转入隔离、不进指数,逐条交裁决 agent 判断是真实加价还是采集/解析错误。运行后发现:agent 面对「中转价比官方贵 5–15%、数据自洽(两侧价与折扣率能对上、采集计算无误)」的观测,反复给出同一个结论——这属于方法论判断,不是它能靠单条证据裁决的事,应该由人一次性定规则。
人类拍板:数据自洽(用落库的两侧价重算折扣率,与落库值一致)且溢价 ≤20% 时,当真实加价接受,直接入带,不再逐条隔离。理由:中转站收便利费是真实市场行为,折扣率指数应如实反映「有些站其实更贵」,而不是把所有贵过官方的观测都当异常剔除。超过 20% 才转入隔离——这个量级更可能是解析错误或异常标价,仍需人工复核。数据不自洽(重算对不上落库值)则无论溢价高低都转入隔离,因为这说明落库的某个数有问题,与「加价多少」无关。
这条改动是公网可见的口径变更:部署后,贵官方 5–20% 之间的观测不再转入隔离,直接按真实加价计入当日指数;按日重算的 job 本身只处理当日,不会自己去翻旧账。但存量此前被隔离的观测不会被晾在原地——它们会经既有更正协议(护栏 8)逐条回带:裁决 agent 或人工对某条 relay_anomaly case 给出 accept 后,更正流程按该 case 的历史日期重算,那一天的指数读数会被重新计算并覆盖(agents/correction.py::_apply_relay_correction)。也就是说"新规则不追溯"这句只在没人碰这些存量观测时成立;一旦它们被回带,其所属日期的历史读数确实会变。
回滚约定(本站口径变更的通用纪律)
阈值变更是公网可见口径,回滚同样是。上线期间按新口径(1.20)算出的那些天,index_value 已经落库;若日后把 DISCOUNT_HI 改回 1.05,按日重算的 job 只会重算当日,历史那几天原样留着——序列上会出现一段口径与前后不同、且图上无任何标记的日子。这类"沉默的口径断层"是本站最不该有的东西:读者看到的是一条连续曲线,实际中间一段的分母规则不一样。
故凡本页记录的口径变更,回滚时二选一,不许什么都不做:
- 一并重算该口径窗口期——把变更生效日到回滚日之间的每一天按回滚后的口径重算
relay-discount,并同期追算下游cn-gray-cost(它按「官方 blended × 跨站折扣率中位数」取数,只取未隔离行,折扣率一变它必须跟着变,见docs/methodology/cn-gray-cost.md)。重算走既有jobs/compute_relay_discount.py+jobs/compute_gray_cost.py的compute_for_date,逐日调用;两支都是 upsert,重复重算幂等。这是首选。 - 留口径分界标——若窗口期太长或原始数据已不足以重算,必须在本页写明"YYYY-MM-DD 至 YYYY-MM-DD 为 X 口径",并在指数页对该区间做可见标注,不能只改代码常量了事。
同一条纪律适用于任何一次会改变入带/隔离边界的阈值调整,不限于 DISCOUNT_HI。判据很简单:如果这次改动会让同一批原始观测在改动前后落进不同的带,它就是口径变更,回滚就要走上面两条之一。
口径变更记录:分子/分母双侧加陈旧上限,覆盖率会下降(2026-08-31,issue #104)
改前:分子(中转站标价)与分母(官方基准)都是无上限 last-known——只要曾经采集过,就算源已经停更/换版面很久,仍会一直拿最后一次的旧值参与计算,沿途没有任何标记。这正是「陈旧价没有封顶地往下滚」的病灶:一个源哑火之后,旧价会一路滚上公网、滚进比价闸门。deepseek 2026-08-16 换版面是实况——换版面之后源不再产出可信新值,但旧口径下当天照样捡回换版面前的最后一条价格,正常参与折扣率计算,一天不落。
改后:
- 分子(中转站标价):结转须过两道守卫(见上方「分子结转」一节)——页面变过就停,不再拿更老的候选顶替。
- 分母(官方基准):
ticker_day_price当天必须自己有行,不再向前找最近一条。
两侧改动会让覆盖率下降——某天某站某型号如果撞上上面任一道守卫,那天就会缺席,折扣率指数当天覆盖的模型数可能比改动前少。这是诚实,不是退步:改动前的"覆盖率"里混着一部分早已过期、只是没人告诉你它过期了的旧价;改动后,覆盖率如实反映"今天到底有多少个源真的还在说话"。
生产量化(2026-08-31,只读,近 31 个 CN 自然日):分母侧收紧后,本指数篮子当时 17 支模型里只有 deepseek-v4-flash / deepseek-v4-pro(同源 deepseek,正是已知冻结源)各新增 11/31 天缺分母,其余 15 支健康型号零影响。此量化取自换篮前的观测窗口,与下方「篮子与换篮」一节记录的 17→19 扩篮(issue #105 C 段)是两件独立的事:扩篮改变的是分子分母的成分集合,不改写这段已发生的历史量化结论。
回滚约定
同上方「溢价隔离阈值」一节的通用纪律:这是会改变入带/缺期边界的口径变更,回滚时必须走「一并重算窗口期」或「留口径分界标」二选一,不许什么都不做——判据同样是"这次改动会不会让同一批原始数据在改动前后落进不同的带"。
向前也一样,不只是回滚:2026-08-31 之前已发布的 index_value 是旧口径(无上限 last-known)算出来的;本次改动本身不会去改写它们(按日重算的 job 只处理当日),但此后若有 --all --rebuild 全量重算、或更正协议命中一条历史 period_date,都会用新口径改写那一天——同一条序列前后不同口径且图上无标记,正是本页开头点名的"沉默的口径断层"。故 08-31 之前的历史值仍视为旧口径,任何对这些历史期的重算都须同时按本节做分界标注,不能悄悄改写了事。
口径变更记录:302.AI 货架整批换代,重钉映射(2026-08-31,issue #105)
302.AI 上一版钉的 8 个站内模型名(含此前用作本页示例的 GPT-5.6 Sol / Claude Sonnet 5)在 2026-07-22 至 08-26 间滚动全部下架,页面结构完好、只是货架换了一批型号——这是换代不是解析器故障或站点失效(判据见 agents/producers.py::_sweep_relay_catalog_turnover)。人工按 2026-08-31 真快照 65 张卡逐张重钉:5 支有官方分母(deepseek-v4-flash、deepseek-v4-pro、claude-opus-5、kimi-k3、glm-5.3)进 model_map、出折扣率、入本指数篮;另 6 支无官方分母或暂缓发布(grok-4.6、doubao-seed-evolving、gemini-3.7-flash/3.6-flash/3.5-flash-lite、qwen3.8-max)只采不发,ticker 建为 relay_only,可落观测但不上站、不出折扣率、不入任何指数(db/seed.py::RELAY_ONLY_TICKERS)。
篮子净增 kimi-k3、glm-5.3 两支(此前两站均无覆盖):17 → 19。claude-opus-5 与两支 deepseek 本来就在篮(aihubmix 侧已覆盖),302.AI 只是多给一条腿,不改分母。8 个旧名已从 model_map 清除,不留永久零观测的噪音条目。
cn-gray-cost(灰市标价成本指数)的篮子直接复用 RELAY_BASKET 常量(db/seed.py::seed 里 gray.basket = RELAY_BASKET),随本次扩篮同步 17 → 19,覆盖率分母同步变化——该指数走 _admit_new + admission_base_price 等权相对价口径,入篮瞬间不出台阶,不需要额外的分界标注。
口径变更记录:08-14–08-30 历史期按新口径整体回算,口径分界前移至 08-14(2026-09-02,issue #107)
上方 issue #104 一节写死过一条纪律:「08-31 之前的历史值仍视为旧口径……任何对这些历史期的重算都须同时按本节做分界标注,不能悄悄改写了事」。本节就是那条标注。
背景:#104(陈旧价封顶)与 #105(302.AI 货架重钉)都只对当期及以后生效,都没有回算历史。结果是 2026-08-14 至 08-30 共 17 个期,仍拿 302.AI 已经不再售卖的 8 支型号(claude-fable-5、claude-sonnet-5、glm-5-2、gpt-5-6-luna、gpt-5-6-sol、gpt-5-6-terra、kimi-k2-7-code、qwen3-7-plus)在参与计算——曲线因此在 08-31 出现一个约 2.6 点的台阶(08-30 100.05 → 08-31 97.41),那个台阶是口径变更不是行情,正是本页开头点名的「沉默的口径断层」。
处置(2026-09-02 人类拍板):把 08-14–08-30 全 17 期按新口径整体回算,而不是留着台阶。回算用 jobs/compute_relay_discount --date(本次新增;此前只有 compute_gray_cost 有该参数,缺这一半导致没有 case 可借道的历史期根本无法回算)与 jobs/compute_gray_cost --date,两条指数同期成对重算——它们是同源派生,只算一边会造出新的不一致。
新的口径分界:本次回算之后,
- 2026-08-14 及以后的
relay-discount/cn-gray-cost读数一律为新口径(分子分母双侧陈旧上限 + 302.AI 按真实货架重钉); - 2026-08-13 及以前仍为旧口径(无上限 last-known + 旧货架映射),本次未回算,也不打算回算——再往前的原始快照覆盖度不足以支撑同等质量的重建,硬算出来的值可信度低于现在挂着的值。
也就是说口径分界从 08-31 前移到了 08-14,并没有消失。读跨 08-13/08-14 的序列时仍需知道这条线的存在。
已知的先后不一致:08-22 一期早于本次批量回算被单独重算过(2026-09-02 清理 relay_anomaly case 2469 时经更正协议触发,relay-discount 100.06 → 100.26、cn-gray-cost 94.11 → 94.38)。它与本次回算口径一致,不需要再算一次;记在这里是因为它当时是一次未加标注的改写,按本页纪律须补记。
口径变更记录:分母改用 DeepSeek 高峰档,不再用峰谷加权价(2026-09-09,issue #112)
这是一次会改变入带/隔离边界的口径变更,按本页「回滚约定」一节的通用判据成立: 同一批原始观测在改动前后会落进不同的带。故此处留分界标。
背景:DeepSeek 自 2026-08-17 起分高峰 / 空闲两档计价(高峰 35h/周、空闲 133h/周, 空闲价为高峰价的一半)。本站 Token 价格带的官方日价按每周时长加权——那是「一个典型 用户一周下来平均付多少」的口径,对 Token 带是对的。但中转站平价计费、不分时段, 它转发的实际上就是高峰档那一列。拿「中转站的高峰价」除「官方的加权价」,分母天生偏小。
实测(2026-09-09 生产真值,1 USD = 6.7769 CNY):deepseek-v4-pro 在 AIHubMix 的
混合价 $0.7742,官方加权分母 $0.4199 → 折扣率 1.8438,越界隔离;换成高峰档分母
$0.6950 → 1.1140,正常入带。这一条自 08-20 起每天产生一条 relay_anomaly 争议,
到 09-09 已积压 41 条——不是行情异常,是分母口径不对。
混合价权重 7:2:1(cache:input:output)让缺口进一步放大:缓存读占七成权重,而它正是 两档差距被空闲档压得最狠的构件。
改法:relay-discount 的分母改取未做时间加权的高峰档(jobs/official_basis.py
的 RELAY_BASIS_TIER)。Token 价格带不变,仍用每周加权值——两个指数问的是不同的问题,
Token 带问「用户平均付多少」,折扣率带问「中转站相对官方同一口径便宜多少」。
无分档数据的源(篮子 19 支里的另外 17 支)逐字节不受影响。
cn-gray-cost 刻意不跟改:灰市标价对标的是官方牌价,与中转站的计费口径无关。
新的口径分界:
- 2026-09-09 及以后的
relay-discount读数,deepseek 两支按高峰档分母; - 2026-09-08 及以前仍为加权档分母,本次未回算。
台阶大小(部署前推算,其余 16 支一位不变):deepseek-v4-pro 0.8226→0.8055(AIHubMix 腿 解除隔离回篮,源数 1→2)、deepseek-v4-flash 0.6853→0.4141,指数约 98.30 → 96.70。 读跨 09-08/09-09 的序列时需知道这条线。
存量 41 条 relay_anomaly 与 4 条 outlier 的处置尚未决定,记在这里以免遗忘:
若日后选择回填分档观测 + 逐日重算,那将再次改写这段历史,届时须按本页纪律另立一节分界标注。
顺带记录一个改后仍存在的事实:高峰档分母下 deepseek-v4-pro 的折扣率是 1.1140 > 1, 即 AIHubMix 转发这一支确实比官方高峰档贵约 11%。这不再是口径错配的假象,是真实加价, 按 2026-07-27 那次 1.05→1.20 的约定它应当入带。但它贴着 1.20 的线,上游稍一涨价就会 重新报案——闸门是否适配「真的比官方贵」这类常态,是另一个待议话题,本次未动。
篮子与换篮
篮子 = 本站 Token 白名单模型 × 首批中转站实际在售的交集(当前 19 支,2026-08-31 起——302.AI 按真货架重钉映射后净增 kimi-k3、glm-5.3 两支,见上方口径变更记录),数据化维护。站内模型名与白名单型号逐字吻合才映射(如 gemini-3.1-pro-preview 不映射为 gemini-3.1-pro)。换篮走既有链式规则。