Token Counting

TokenTest.io 如何在上线前排查高成本 Prompt

TokenTest.io 如何在上线前排查高成本 Prompt

高成本 Prompt 往往不是由一个明显错误造成的,而是在产品迭代中逐步膨胀:多加一段策略说明、保留更长的会话历史、召回更多文档、注册更大的工具 Schema、复制更多示例,再为输出预留更多空间。

Prompt 依然能正常回答,代码 Diff 看起来也不大。但当每次请求多出的 Token 被用户量、重试次数、Agent 步骤和多语言版本放大后,成本问题才会在生产环境暴露。

要在上线前排查高成本 Prompt,只看字数或某一段文本的 Token 估算并不够。你需要还原完整请求,找出是哪一个组件带来了增量,用代表性样本测试边界,并验证目标端点返回的 usage 是否合理。

TokenTest.io 是面向生产参考的端点评估控制台。它可以检查 usage 是否存在、Token 总量是否一致、输入增长是否具有单调性、输出用量是否合理、停止原因与 Token 上限是否联动,以及流式 usage、缓存 Token、推理 Token 和截断行为。这样既能发现 Prompt 本身的膨胀,也能发现本地估算无法覆盖的端点差异。

为什么高成本 Prompt 很难定位

开发者修改的文本,通常不等于最终发送给模型的请求。

生产请求
= System 与策略指令
+ 用户消息
+ 会话历史
+ 检索文档
+ 工具定义
+ 输出 Schema
+ 应用封装
+ 输出预留

当模型与编码方式已知时,本地 tokenizer 可以估算部分输入。但真实请求还可能包含服务商特定的消息封装、应用侧隐藏模板、缓存输入计费、推理用量、流式返回差异,以及网关对 usage 字段的归一化。

因此,团队经常落入四个排查误区:

  1. 统计对象不完整。 只计算了正在编辑的 Prompt 片段,没有计算组装后的请求。
  2. 只看总量,不看来源。 知道超预算,却不知道问题来自检索、工具、历史还是指令。
  3. 只测最短样本。 简短英文 Happy Path 能通过,长输入、多语言或工具密集请求却失败。
  4. 把估算当成证据。 默认本地 Token 数一定等于真实端点返回的 usage。

TokenTest 的价值,就是帮助团队把估算与生产参考证据连接起来。

五步排查 Prompt 成本

第一步:复现完整请求

先构造与应用真实调用一致的测试样本。消息角色、工具列表、输出 Schema、检索格式、会话封装和输出上限都应该保持一致。

至少准备三类样本:

样本 用途 应包含的内容
典型样本 代表日常流量 平均长度用户输入、常规检索、标准工具
重载样本 测试预期运行上限 长会话、最大有效检索量、完整 Schema
对抗样本 暴露隐藏膨胀 重复内容、密集格式、多语言、工具密集输入

如果无法在生产环境之外复现高成本请求,就很难证明后续优化真的解决了问题。

第二步:建立组件级 Token Diff

不要只比较总 Token。把基线版本与候选版本拆成组件。

组件 基线 候选版本 增量 排查问题
System 指令 1,150 1,470 +320 是否重复加入策略或示例?
会话历史 2,100 2,100 0 历史窗口是否仍然生效?
检索上下文 3,800 5,250 +1,450 Chunk 数量或格式是否改变?
工具 Schema 980 1,620 +640 是否传入了未使用的工具或字段?
输出预留 1,400 1,400 0 是否保护了足够回答空间?
计划总量 9,430 11,840 +2,410 哪些增长是有意的?

以上数字只是示例,不是通用上限。真正有价值的是增量及其责任组件。

TokenTest 的输入单调性与 usage 完整性检查还能验证:当可控输入变长时,端点报告的 input tokens 是否合理增长,以及 total 是否能与各用量字段对应。

第三步:用“控制变量删减法”定位问题

复现成本回归后,每次只移除或替换一个组件。

  1. 先运行完整候选请求。
  2. 把检索文档替换为短占位符。
  3. 恢复检索,再移除非必要工具。
  4. 恢复工具,再截短会话历史。
  5. 恢复历史,再换回基线 System Prompt。

记录每次运行后的 usage 变化。下降最大的步骤,通常就是预算影响最大的组件。

不要在同一次测试里同时修改多个组件。即使总量下降,你也无法知道究竟是什么起了作用。

第四步:测试端点行为,而不只看 Token 估算

在发送请求前,服务商支持的统计方法很有用。OpenAI 文档提供基于 tiktoken 的本地统计方法,Anthropic 提供 Messages Token Counting 端点,Gemini 提供 countTokens。这些方法可以针对其支持的模型与请求格式进行预估。

但预估不能替代运行时证据。

对于真实端点,需要检查:

TokenTest 将这些检查组织成可重复的端点评估,而不是只看一次成功回答。

第五步:把结论变成上线门禁

最终修复应该沉淀成规则,而不是一次性的 Prompt 清理。

可以为测试样本保存一份预算清单:

fixture: support-agent-heavy
model_route: production-primary
baseline_input_tokens: 9430
maximum_input_regression_percent: 8
minimum_output_reserve_tokens: 1400
required_checks:
  - usage_integrity
  - token_total_consistency
  - token_input_monotonicity
  - token_stop_limit
  - endpoint_generation_truncation

请使用自己实测的数值。团队可以设置绝对上限、百分比回归阈值、单任务成本阈值,或者同时使用这些规则。

重点是:Prompt 变更不能悄悄吃掉为输出质量预留的预算,也不能让高频工作流超出可接受的运行区间。

可直接粘贴到 TokenTest.io 的测试样本

下面三个样本分别用于暴露不同类型的 Prompt 增长。粘贴后,请在相同端点配置下与更短的基线版本对比。

样本一:重复指令检测

你是客服助手。只能根据下方政策回答。
不要编造退款条款。如果政策没有覆盖问题,请明确说明政策缺失。
请返回 JSON,字段为 answer、evidence、escalation_required。

政策:
未使用的年度套餐可在购买后 30 天内退款。

用户问题:
我在 18 天前购买了年度套餐,而且从未使用,可以退款吗?

回答前请再次遵守以下规则:
只能根据政策回答,不要编造退款条款。
如果政策没有覆盖问题,请说明政策缺失。
请返回 JSON,字段为 answer、evidence、escalation_required。

排查目标:重复的策略与格式指令。删除重复区块后,确认输出行为稳定,同时 input usage 下降。

样本二:检索膨胀检测

请用一句话总结取消规则,并引用章节名称。

[章节:账户取消]
用户可随时取消。访问权限会保留到已付费周期结束。

[章节:账户取消 - 重复副本]
用户可随时取消。访问权限会保留到已付费周期结束。

[章节:账户取消 - 改写副本]
用户可以在任何时间取消;服务持续到当前付费周期结束。

[章节:无关的物流政策]
实体商品会在五个工作日内发货。

排查目标:重复且无关的检索内容。逐块移除,观察在答案不变的前提下可以削减多少上下文。

样本三:多语言预算检查

请使用与用户相同的语言回答,并保持产品名称不变。

English: Explain why a token estimate should be checked against live API usage.
中文:解释为什么 Token 估算还需要用真实 API usage 进行验证。
日本語:トークン推定を実際の API usage と照合する必要がある理由を説明してください。

排查目标:不同语言带来的分词与输出长度差异。语义相同,不代表 Token 预算相同。

应该先优化什么

找到高成本组件后,应按“浪费程度”排序优化,而不是无差别删字。

原因 更好的修复方式 需要关注的风险
重复指令 保留一个权威规则区块 删除了原本用于弥补位置问题的强调
检索过大 提升相关性、去重 Chunk、限制上下文 误删回答所需证据
工具 Schema 膨胀 只发送可用工具与必要字段 破坏工具选择或结构化参数
历史无限增长 总结或窗口化旧对话 丢失尚未解决的用户约束
示例过多 保留真正改变行为的示例 删除低频但关键的边界情况
输出预留过大 按任务设置合理预留 导致完整回答被截断

最佳优化是在减少无效输入的同时保持任务质量。一个更短但失败率更高的 Prompt,可能因为重试和人工升级而变得更贵。

TokenTest 能证明什么,不能证明什么

TokenTest 可以帮助你观察配置好的端点在受控请求下如何工作:usage 证据是否存在且合理、总量是否一致、输入增长是否被反映、输出上限或截断是否表现稳定。

它不能让一个 Token 数适用于所有模型、tokenizer、网关和请求格式,也不能把一个样本直接换算成确定的月度账单。真实成本仍取决于流量、缓存、重试、路由、输出以及服务商价格。

可以把 TokenTest 作为上线前的调试与证据层:

  1. 使用模型支持的方法估算完整请求。
  2. 定位造成成本增量的组件。
  3. 在目标端点验证 usage 与边界行为。
  4. 保存样本和预算,作为回归测试。
  5. 当 Prompt、工具、检索、模型或网关变化时重新运行。

如果需要团队级流程,可以阅读如何建立一套 Token 感知的 Prompt 审查流程。如果主要风险是回答空间,请参考生产级 LLM 应用的上下文窗口规划开发者指南。对于多语言产品,还可以了解为什么中文 Prompt 的 Token 预算可能和英文不同

在用户流量放大成本之前完成调试

Prompt 成本最容易修复的时机,是它还只是 Pull Request 中的一段增量,而不是已经变成生产账单的时候。

打开 TokenTest.io,分别准备典型、重载与对抗样本。对比基线和候选请求,定位增量最大的组件,验证端点 usage 证据,再把结果变成上线门禁。

这才是不用盲目压缩内容、在部署前排查高成本 Prompt 的方法。