ttok 0.4 发布:token计数CLI工具新增 --list-models 命令

ttok 0.4 修复技术债务并新增 --list-models,支持 uvx 零安装调用。
Simon Willison 发布了两年来首次更新的 ttok 0.4,这款基于 OpenAI tiktoken 库的命令行工具专注于统计文本的 token 数量。此次更新的核心是清理技术债务:修复 Click 库的弃用警告、更新 CI 配置,并新增 `--list-models` 命令,让用户可以直接查看各模型对应的 encoding,避免因选错 tokenizer 而导致计数偏差。文章特别强调了 ttok 对 `uvx` 的支持——借助 uv 的隔离缓存机制,用户可以用 `cat file.txt | uvx ttok` 这样的管道命令零安装地完成统计。作者认为,在 AI 工具链日益复杂的背景下,ttok 这种单一职责、克制设计的 CLI 工具反而保持了持久的生命力。

时隔两年,ttok 迎来重要更新
开发者 Simon Willison 发布了 ttok 0.4 版本。这款基于 OpenAI 开源 tiktoken 库构建的命令行工具,专注于解决一个具体而高频的问题:统计文本的 token 数量。尽管核心功能没有变化,但这次更新修复了长期存在的 Click 警告、更新了 CI 流程,并新增了 --list-models 命令,用于列出当前支持的模型列表。
对于日常与 LLM 打交道的开发者来说,token 计数并非可有可无的细节。API 调用成本、上下文窗口限制、提示词工程中的截断策略,都直接依赖于对 token 数量的准确估算。ttok 的价值在于把这些能力封装成一条简单的管道命令。
与 uvx 配合,零安装即用
此次更新中一个值得关注的细节是 ttok 对 uvx 的支持。uvx 来自 Python 包管理工具 uv,允许用户在不显式安装的情况下直接运行 CLI 工具。这意味着你可以这样统计任意文件的 token 数:
cat file.txt | uvx ttok
这种设计降低了使用门槛。对于偶尔需要统计 token 的用户,无需在本地环境中配置 Python 包,也避免了版本冲突的困扰。它将 ttok 从“需要安装的工具”变成了“随手可用的命令”,这对于一个功能单一的 CLI 工具而言,是体验上的实质性提升。
uvx 与 uv 的关系:uvx 是 uv 提供的一个便捷别名,实际等价于 uv tool run。uv 是由 Astral(Ruff 的开发者)用 Rust 编写的高性能 Python 包与项目管理器,目标是在速度上全面替代 pip、pip-tools、virtualenv、pipx 等传统工具。当你执行 uvx ttok 时,uv 会先解析 ttok 的最新版本,将其安装到一个隔离的、由 uv 统一管理的缓存环境中,然后运行入口脚本,整个过程不会污染当前项目的虚拟环境,也不会要求你手动 pip install。首次运行会有下载开销,之后则命中缓存,几乎是瞬时的。
这种机制与 pipx 类似,但 uv 依赖其全局缓存和硬链接策略,让多个工具之间可以共享依赖,避免了重复下载。对于像 ttok 这样功能单一、调用频繁的小工具,uvx 提供了一种介于“全局安装”和“临时脚本”之间的最佳实践:既能保证版本独立,又能做到随手可用。
新增 --list-models 命令的意义
0.4 版本新增的 --list-models 命令,允许用户直接查看当前 tiktoken 支持的模型及其对应的编码方式。
这一改进解决了一个实际痛点:不同模型(如 GPT-4、GPT-3.5、text-embedding-ada-002)使用的是不同的 tokenizer,同一段文本在不同模型下的 token 数量可能不同。过去用户需要查阅文档或源码才能确认某个模型对应的编码名称,现在可以通过命令行直接获取。
uvx ttok --list-models
对于需要精确控制成本的团队来说,这个命令降低了误用错误编码导致计数偏差的风险。
tokenizer 与 encoding 的区别:在这里需要区分两个容易混淆的概念。tokenizer 指的是将文本切分为 token 的完整算法流程(包括预处理、BPE 合并规则等),而 encoding 是 OpenAI 在 tiktoken 中给每一套具体 tokenizer 规则起的名字,比如 cl100k_base、o200k_base、p50k_base。同一个 encoding 可能被多个模型共用,例如 GPT-4 早期版本和 text-embedding-ada-002 都使用 cl100k_base。
因此 --list-models 列出的是“模型名 → encoding 名”的映射关系。tiktoken 本身并不内置所有模型的完整列表(它只内置 encoding),ttok 起到的作用是把常见的模型别名和对应的 encoding 关联起来,让用户不必记忆 gpt-4o 到底该用 o200k_base 还是 cl100k_base。这也解释了为什么模型列表的更新往往滞后于 OpenAI 发布新模型——它需要人工维护映射表。
维护状态与工具定位
Simon Willison 在发布说明中坦承,ttok 已经“两年没有更新”。这种坦率本身也反映了开源小工具的常态:当核心依赖(tiktoken)稳定、功能需求没有变化时,工具会进入低维护期。这次更新更多是清理技术债务——修复 Click 库的弃用警告、更新 CI 配置,确保项目在现代 Python 环境下仍能正常工作。
ttok 的定位始终清晰:一个专注的、单一职责的 CLI 工具。它不试图成为完整的 tokenizer 管理平台,也不提供可视化界面,只是安静地完成计数任务。在 AI 工具链日益复杂的今天,这种克制的设计反而让它保持了生命力。
对于需要频繁估算 token 用量的开发者,0.4 版本是一个值得升级的版本;而对于尚未尝试过的用户,uvx 的一行命令调用方式,或许正是最低成本的入门方式。
相关推荐

M&M's斥资数百万换掉人工蓝色素,为什么这么难?
玛氏公司投入数百万美元,试图用螺旋藻天然色素替代M&M豆中的人工蓝色素,却因物料浓稠堵塞管道、残留物引发霉菌风险而被迫改造整条产线。本文解析这场配方迁移背后的工程难题、消费者与监管推力,以及"无人工色素不等于健康"的清醒判断。

Meta全球AI开发者黑客松组队需求:计算机视觉与医疗AI方向
Reddit开发者发帖为Meta Global AI Developer Hackathon招募队友,方向聚焦计算机视觉与医疗AI。本文分析这一组队信号背后的赛道逻辑、技能互补需求与黑客松选题策略。

Claude 多个模型报错:Fable 5.1、Sonnet 5.5、Haiku 5.5 故障复盘
Claude Fable 5.1、Sonnet 5.5、Haiku 5.5 及 Opus 5.5 fast mode 出现错误率升高,官方 17 分钟内完成定位与恢复。本文梳理故障时间线、多模型连带故障的技术原因,以及对开发者重试与降级策略的实际启示。