帮你省token · Token Saver
> 输入你的任务描述,告诉你哪些工具调用是浪费——杀鸡别用牛刀。
§0 你一定经历过这个场景
你让 Agent 帮你翻译一句话。Agent 想了想,加载了翻译 Skill。翻译 Skill 想了想,调了 LLM 做翻译。最后你拿到了翻译结果——但这个过程多花了不止一倍的 token。
更隐蔽的浪费:你问 Agent "CAP 定理是什么意思",Agent 觉得这是个"深度问题",帮你调了 search-agent 去搜索。search-agent 搜了一圈,用 LLM 总结了一下,告诉你答案。但 CAP 定理是计算机科学的常识——Agent 自己就知道答案,根本不需要搜索。
这就是 Token Saver 要解决的问题。它不是事后诸葛亮,而是在你派发任务之前,先帮你分析:这个任务里哪些部分根本不需要工具,LLM 自己就能做。
§Q 快速上手
触发方式
- "帮我分析一下这个任务能不能省 token"
- "检查这个需求是否需要那么多工具"
- "这任务有必要调 file-agent 吗"
- "看看能不能精简一下工具调用"
- "帮我省 token"
工作模式
| 模式 | 触发 | 输出 |
|---|---|---|
| 单任务分析(默认) | 输入任务描述 | 完整分析报告 + 节省建议 |
| 批量审计 | 输入多个任务(一行一个) | 逐任务分析 + 汇总 |
| 交互模式 | --interactive |
逐轮输入输出 |
§1 核心能力
Token Saver 是一款纯本地运行的命令行分析工具。核心脚本 scripts/token_analyzer.py 完成全部分析逻辑。
它怎么工作
用户输入任务描述
│
▼
加载工具清单 (skills_registry.json)
│
▼
特征匹配引擎
├── LLM 原生能力检测(7 大类:知识问答/文本处理/代码解释/方案设计/逻辑推理/格式转换/简单计算)
├── 工具触发词匹配(逐个工具检测是否有匹配的触发特征词)
└── 特殊规则覆盖(翻译内容在输入中→跳过翻译Skill;文件路径无操作→跳过file-agent)
│
▼
逐工具判断:需要 OR 可省略
│
▼
输出分析报告(可读 + JSON)
输出的报告包含什么
| 部分 | 内容 |
|---|---|
| 任务结论 | 一句话总结:能否省、省多少 |
| LLM 原生能力匹配 | 哪些子任务根本不需要任何工具 |
| 工具级分析 | 逐工具:触发词、是否需要、替代理由 |
| 节省建议 | 严重程度 + 可省略调用数 + 行动建议 |
严重程度分级
| 级别 | 含义 |
|---|---|
none |
不涉及外部工具,已是最优 |
minimal |
工具均为必要,无需调整 |
moderate |
有可省略项,建议优化 |
significant |
大量可省略,严重浪费 |
§R 核心铁律
- 只建议不强制执行:标记"可省略"不代表禁止调用,最终决定权在 Agent 或用户
- 宁可漏判不可误判:不确定时标记为"需要调用",避免误删必要工具导致任务失败
- 规则可解释:每一条建议必须附带具体理由,不说"可能可以省略"
- 零网络零依赖:纯本地运行,不联网、不装第三方包
- 清单可扩展:新增工具只需编辑
skills_registry.json,不改代码
§A 结构化异常处理
| 异常场景 | 检测条件 | 处理方式 | 提示语 |
|---|---|---|---|
| 任务描述为空 | 输入为空字符串 | 拒绝分析 | 任务描述为空,请输入要分析的任务内容。 |
| 任务描述过短 | 输入 < 3 个字符 | 降级输出 | 任务描述过短(少于3个字符),无法进行有意义的分析。 |
| 工具清单缺失 | skills_registry.json 不存在 | 降级到内置默认清单 | 未找到工具清单配置文件,使用内置默认清单。建议补充 skills_registry.json 以获得更准确的分析。 |
| 工具清单格式损坏 | JSON 解析失败 | 终止并提示 | 工具清单配置文件格式错误,请检查 skills_registry.json 是否为合法 JSON。 |
| 无任何匹配 | 任务不匹配任何工具触发词和 LLM 原生能力 | 正常输出,标注无匹配 | 未检测到明确的外部工具需求,此任务可能不涉及工具调用。 |
| 多任务混合 | 输入包含多个用换行/分号分隔的任务 | 逐行拆分分析 | 检测到多个任务,将逐条分析。 |
| 全工具匹配 | 任务命中了几乎所有工具的触发词 | 标注"过于宽泛" | 任务描述可能过于宽泛,命中了几乎所有工具。建议拆分为更具体的子任务后再分析。 |
| 任务含代码/数据块 | 输入包含大段代码或数字表格 | 跳过代码块部分,仅对自然语言部分分析 | 检测到代码/数据块,已跳过。仅对任务描述中的自然语言部分进行分析。 |
§B 常见错误与纠正
| 错误做法 | 为什么是错的 | 正确做法 |
|---|---|---|
| 看到"翻译"就建议跳过翻译Skill | 如果是翻译整篇文件(如 PDF),需要文件读取+格式保留,LLM 纯文本无法替代 | 检查翻译内容是否已在输入中(内联文本→可跳过;文件→不可跳过) |
| 看到"搜索"就建议跳过 web_search | 时效性问题(如"今天天气""最新新闻")LLM 不知道答案 | 区分时效性需求和非时效性需求 |
| 把"写代码"一律判为需要 python_executor | 只写代码不运行 → LLM 就行;需要运行/调试 → 才需要 executor | 检查是否有"运行""测试""执行"等关键词 |
| 看到文件路径就建议调 file-agent | 用户可能只是提到路径作为上下文引用,而非要求文件操作 | 检查是否有"保存""读取""写入""移动"等操作词 |
| 拆碎 LLM 原生任务去调工具 | "分析A和B的区别"→先调 web_search 搜A、再搜B、再调总结,其实 LLM 一步就能回答 | 先判断任务是否属于 LLM 原生能力范畴,是就直接回答,不再拆成多步工具调用链 |
§C 能力边界
Token Saver 能做到的:
- 基于关键词匹配判断任务是否需要外部工具
- 识别 LLM 原生能力范围内的任务
- 输出结构化的省 token 建议报告
Token Saver 做不到的:
- 不保证 100% 准确——关键词匹配有局限性
- 不感知对话上下文——只分析单条任务描述,不知道历史对话中已有哪些信息
- 不替代 Agent 的路由决策——Agent 可能有其他理由必须调用某个工具
- 不计算实际 token 数量——只给相对节省建议
- 不自动拦截工具调用——是一个分析建议工具,不是拦截器
§D 避坑指南
| 坑 | 避坑方法 |
|---|---|
| 把 Token Saver 的建议当圣旨 | 它的判断基于关键词,可能漏判或误判。拿建议做参考,结合实际情况决定 |
| 忽略了上下文的价值 | 有些工具调用虽然单看可省略,但在多轮对话中提供了后续任务需要的信息。Token Saver 不感知上下文 |
| 配置清单过时 | 新增了工具但没更新 skills_registry.json → 新工具不会被分析到。定期同步清单 |
| 把"节省 token"当作唯一目标 | 有时多花 token 换更高质量结果是值得的。省 token 是手段不是目的 |
| 忽略工具调用的副作用 | 有些工具调用不只为输出——如 file-agent 创建文件、app-agent 安装应用——这些副作用 LLM 无法替代 |
§E FAQ
Q:分析结果说"可省略",我该不该省?
A:建议优先省。但如果该工具的输出是后续步骤的输入,保留它。Token Saver 只看单任务,不知道你的完整工作流。
Q:为什么翻译有时候建议省、有时候不省?
A:取决于翻译内容在哪。内容已经在你的输入里 → LLM 直接翻 → 省。内容是文件或网页 → 需要先读取 → 不省。
Q:能分析历史对话里已经完成的任务吗?
A:当前版本只分析你输入的任务描述文本。把历史任务的描述粘贴进来就可以分析。
Q:怎么添加新的工具到分析清单?
A:编辑 scripts/skills_registry.json,按已有条目的格式添加新工具即可。需要填:name / type / triggers / cost / llm_can_do / replaceable_scenarios。
§F 版本历史
| 版本 | 日期 | 变更说明 |
|---|---|---|
| 1.0 | 2026-07-15 | 首次发布。支持 12 种工具/Agent/Skill 的特征匹配、7 大类 LLM 原生能力检测、特殊规则覆盖(内联翻译/文件路径无操作)、可读+JSON 双格式输出。 |
§G 完整演示
命令行调用
# 单任务分析
python scripts/token_analyzer.py "帮我总结一下CAP定理,然后保存到桌面"
# 批量审计
echo -e "翻译:Hello World\n搜索2024年GDP数据\n设计一个数据库表结构" | python scripts/token_analyzer.py --stdin
# 交互模式
python scripts/token_analyzer.py --interactive
分析报告示例
输入:翻译这段英文:The quick brown fox jumps over the lazy dog,然后保存到桌面
============================================================
📊 Token 消耗分析报告
============================================================
📝 任务: 翻译这段英文:The quick brown fox jumps over the lazy dog,然后保存到桌面
📌 结论: ⚠️ 可省 2 个调用:1 个无需工具 + 1 个LLM可替代。
----------------------------------------
🟢 LLM 原生能力(不需要任何工具)
----------------------------------------
• [文本处理] → 内容已在对话上下文中时,LLM直接处理
----------------------------------------
🔍 工具级分析
----------------------------------------
🟢 各种Skill(翻译等)(skill, 消耗: medium)
触发词: 翻译
建议: 🟢 可跳过,LLM直接处理
理由: 翻译内容已在用户输入中,LLM可直接翻译,无需调用翻译Skill
🔴 file-agent (agent, 消耗: high)
触发词: 保存到
建议: 🔴 需要调用(文件系统操作与文档处理,需要物理文件访问)
----------------------------------------
💰 节省建议
----------------------------------------
严重程度: significant
可省略调用数: 2
建议: 发现 1 个子任务属于LLM原生能力(无需工具),1 个工具调用可被LLM替代。
============================================================
解读:翻译这一步完全不需要调翻译 Skill——LLM 已经看到了要翻译的内容,直接翻就行。但"保存到桌面"这一步确实需要 file-agent,因为要物理写入文件系统。最终建议:翻译 Skill 可以省,file-agent 必须留。
文件结构
token-saver/
├── SKILL.md # 本文件(路由层)
├── 需求说明书.md # 需求文档
├── README.md # 快速概述
└── scripts/
├── skills_registry.json # 工具清单配置(可扩展)
└── token_analyzer.py # 核心分析引擎(可直接运行)
(内容由AI生成,仅供参考)