分词器探测
加上 --tokenizer 后,fpd 在检测的同时识别接口背后的分词器,并与所填模型核对。结果只作参考,不进入排名,也不推迟结果。
# 检测并做分词器探测(默认不做)
npx lmfpd@latest -b https://api.example.com/v1 -k sk-xxx -m deepseek-v4-pro -a cc --tokenizer
# 离线读取报告里保存的分词器探测,不发送请求
npx lmfpd@latest --input result.json --json分词器是模型把文字切成 token 的规则。不同模型家族使用不同的分词器,所以接口在用量(usage)里报告的输入 token 数可以反映上游的分词器。
分词器探测默认关闭。加上 --tokenizer 后,fpd 在第一轮取样的同时发送一次对照请求和若干条测试文本,一次检测只探测一次。探测通常多发约 12 个请求,最多为 --max-probes 加 2 个(默认 22 个)。按次计费的接口对这些请求照常计费。
探测结果只作参考:
- 候选排名和置信度只由数字指纹计算,有没有探测都相同。
- 每一轮的样本完成后立即评分,不等待探测。
- 分词器一致不能证明模型身份,因为很多模型共用同一种分词器。
--parallel 大于 1 时,探测同时发送 4 个请求;否则逐个发送。每个请求的时限是 90 秒。Messages 协议的请求把输出限制为 16 个 token;其他协议与取样请求相同,不限制输出。网页的做法见网页的分词器探测,计算方法见原理。
参数
| 参数 | 说明 | 默认值 |
|---|---|---|
--tokenizer | 做分词器探测 | 不探测 |
--max-probes N | 测试文本数量上限,4–60。达到上限即停止探测。两次对照请求不计入上限。只能与 --tokenizer 一起使用 | 20 |
--tokenizer-bank FILE | 使用自定义分词器库。只能与 --tokenizer 或 --input 一起使用 | 内置分词器库 |
不加 --tokenizer 而使用 --max-probes 或 --tokenizer-bank 时,fpd 在发送任何请求前报错退出。--input 不发送请求,所以不能与 --tokenizer 或 --max-probes 一起使用。
连接参数与检测命令相同。fpd 用 -m 的模型名核对分词器。例如,模型名是 gpt-5,测得的却是 Qwen 的分词器,界面显示 no match,报告里的 claim.status 为 inconsistent。
终端界面
TOKENIZER PROBE 区块位于排名下方,第一行说明它只作参考。
- 探测进行时,区块显示已得到回答的请求数,以及按已有计数暂时领先的分词器。
- 探测结束后,区块显示判定、分词器所属的实验室,以及它与
--model的核对结果。 - 判定为 o200k_base 或 cl100k_base,且核对结果不是“一致”时,区块提示计数可能来自中转站的估算。
- 两次对照请求的计数不同时,区块提示结果可能有误。
最后一轮结束时探测还没结束,状态行显示 Ranking final · tokenizer probe running。这时排名已经是最终结果,fpd 等探测结束后退出,使界面和报告里的探测结果完整。按 q 或 Ctrl+C 会停止探测并退出:
- 各轮结果全部保留,
--output照常保存报告。 - 分词器判定使用已收到的计数。
- 报告顶层的
cancelled为false,tokenizer.cancelled为true。 - 退出码为
130。
输出重定向时,标准错误输出写入一行探测结果。
报告格式
使用 --tokenizer 时,--output 与 --json 的报告包含 tokenizer 对象:
| 字段 | 内容 |
|---|---|
schema | 固定为 fpd-tokenizer-v1 |
model | 核对使用的模型名 |
bank | 所用分词器库的生成日期、类数、测试文本数和归档清单哈希 |
steps、observations | 每个请求的测试文本、状态和输入 token 数。probe 为 null 的是对照请求,只含固定前缀和后缀,不含测试文本 |
verdict | 判定 kind(exact、related 或 unknown)、最接近的类 top、置信度 confidence,以及与模型名的核对 claim |
classes、labs、unknown | 前 10 类和前 5 个实验室的概率,以及“未收录”的概率 |
baseline_drift | 两次对照请求的计数是否不同 |
cancelled、error | 探测是否被停止,以及失败请求的错误码和 HTTP 状态 |
报告请求设置里的 tokenizer 记录是否使用了 --tokenizer。各轮的 analysis 只来自数字指纹。报告不含 API Key。
离线读取
--input 读取报告里的 tokenizer.observations,用当前的分词器库重新计算,不发送请求,也不需要 --tokenizer。--tokenizer-bank 可以换用其他分词器库,-m 或 MODEL 可以替换报告里保存的模型名。
当前分词器库没有某条测试文本时,fpd 跳过它的计数并显示一次警告;使用 --json 时,警告写入标准错误输出。跳过后没有剩余计数时,界面不显示分词器结果,退出码不变。用 --output 另存的报告保留全部原始计数。
失败与退出码
探测中途失败时,判定使用失败前收到的计数。以下情况没有分词器结果,检测照常完成:
- 接口的响应里没有用量。
- 对照请求失败。
- 没有任何测试文本得到回答。
探测失败不改变退出码。
测到的是计数方式
有的中转站用 OpenAI 的开源分词库 tiktoken 在本地估算用量,测得的分词器就是 o200k_base 或 cl100k_base。判定为这两类且与所填模型不一致时,原因可能是中转站的计数方式,上游模型不一定被替换。
最后更新于