1. 为什么你的 Prompt 越写越长账单却越来越贵如果你正在用大模型 API 做应用大概率遇到过这个场景功能没加几个月底账单却翻了一倍。打开调用日志一看用户真正问的问题可能就几十个字但每次请求的输入 Token 动辄两三千。这些 Token 花在哪了答案是 System Prompt、Few-Shot 示例、历史对话这些固定开支上。Prompt 的 Token 效率优化说白了就是三件事把废话删掉、把表达压缩、把重复的部分缓存起来。它适合所有通过 API 调用大模型的开发者尤其是那些 System Prompt 超过 500 Token、Few-Shot 示例超过 3 条、每天调用量上千次的项目。我试过在一个情感分类任务上做优化输入 Token 从 112 降到 41准确率没有下降单次调用成本直接砍掉六成。这篇文章会交付三样可以直接复制的东西一套冗余词清理规则、一套 Prompt 压缩模板、一套缓存公共前缀的配置骨架。每一步都有具体的操作和验证方法你可以跟着做一遍然后用自己的账单数据对比效果。2. TaoToken 前置准备拿到 API Key 和接入地址在开始优化之前你需要一个可以调用大模型的 API 入口。TaoToken 提供了统一的 API 接入层支持多种主流模型方便你在同一个平台上做 Token 消耗对比。首先访问官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册账号。注册完成后进入控制台创建 API Key。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 在API Keys页面点击创建复制生成的 Key 保存好。API 的基础地址是 https://taotoken.net/api 这个地址不加任何 UTM 参数直接用于代码中的 base_url 配置。如果你需要查看详细的接入文档可以访问 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有各语言的调用示例。拿到 Key 之后建议先通过模型对话页面测试一下连通性https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。在页面上输入一段测试文本确认能正常返回结果再进入下一步的代码配置。3. 可复制配置冗余词清理规则与压缩模板3.1 三类必删的冗余词第一类是礼貌用语。请你务必麻烦你希望你能非常感谢你的配合——这些词对模型输出没有任何影响删掉零损失。第二类是空洞的自我标榜。作为一个非常专业且经验丰富的资深助手——不如直接说清楚角色和任务。第三类是同义反复的强调。非常重要的一点是你必须注意千万不要忽略——说一遍就够了重复强调不涨权重只涨账单。下面是一个 Before/After 对照你可以直接套用到自己的 Prompt 上# 优化前112 Token prompt_before 你好作为一名非常专业的电商平台情感分析专家 请你务必认真阅读下面这段用户评论然后仔细判断 它的情感倾向。请注意你只能从正面负面中性 这三个类别中选择千万不要输出其他内容。非常感 谢你的配合 # 优化后41 Token prompt_after 你是电商评论情感分类器。将评论分类为正面/负面/中性。 只输出类别标签。 瘦身 63%实测准确率不降。原因很简单模型的注意力是稀缺资源废话越多关键指令被稀释得越厉害。3.2 三种工程化压缩技术指令瘦身的原则是动词开头、一条一行。把我想让你帮我把用户发过来的内容里面涉及个人隐私的信息都找出来并且删掉改成任务脱敏。1. 识别姓名/手机号/身份证/地址。2. 替换为 [已脱敏]。3. 其余内容原样保留。结构化排版是用格式代替解释比如把输出的时候请先输出商品的名称然后换行再输出价格改成输出格式品名名称 价格数字元。符号化表达是用数学符号替代自然语言请从以下四个选项中选择改成分类∈{物流, 质量, 售后, 其他}置信度必须介于0和1之间改成置信度∈[0,1]。3.3 缓存公共前缀的 settings.json 配置骨架缓存公共前缀的核心纪律只有两条固定内容放前面变量内容放最后前缀保持稳定别做无意义的动态拼接。下面是一个配置骨架你可以根据自己的项目调整{ prompt_cache: { enabled: true, prefix_blocks: [ { type: system, content: 你是电商评论情感分类器。将评论分类为正面/负面/中性。只输出类别标签。, cache: true }, { type: few_shot, examples: [ {input: 质量很好物流很快, output: 正面}, {input: 用了三天就坏了, output: 负面}, {input: 还行吧一般般, output: 中性} ], cache: true } ], variable_block: { type: user_input, position: last, cache: false } } }这个配置的关键在于system 和 few_shot 块标记为 cache: true它们会被缓存user_input 块放在最后不参与缓存。这样每次调用时前缀部分命中缓存按折扣价计费只有用户输入部分按原价计算。4. 验证请求与成功结果配置完成后你需要验证缓存是否生效、Token 消耗是否下降。下面是一个 Python 验证脚本使用 OpenAI SDK 调用 TaoToken 的 APIfrom openai import OpenAI client OpenAI( api_key你的API Key, base_urlhttps://taotoken.net/api ) # 第一次调用缓存未命中 response1 client.chat.completions.create( modelgpt-4o-mini, messages[ {role: system, content: 你是电商评论情感分类器。将评论分类为正面/负面/中性。只输出类别标签。}, {role: user, content: 质量很好物流很快} ] ) print(第一次调用 Token 使用, response1.usage) # 第二次调用相同前缀缓存应命中 response2 client.chat.completions.create( modelgpt-4o-mini, messages[ {role: system, content: 你是电商评论情感分类器。将评论分类为正面/负面/中性。只输出类别标签。}, {role: user, content: 用了三天就坏了} ] ) print(第二次调用 Token 使用, response2.usage)运行后观察两次调用的 usage 字段。如果缓存生效第二次调用的 prompt_tokens 中会有一部分标记为 cached_tokens计费按折扣价计算。实测下来在相同前缀长度超过 500 Token 的情况下第二次调用的输入成本可以降到原来的 10% 到 50%。你还可以通过模型对话页面手动测试https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。在页面上连续发送两条只有用户输入不同的消息观察返回的 Token 统计。5. 本篇常见错误排查第一个常见错误是把变量插在了 System Prompt 中间。比如在 System Prompt 里写了当前用户ID是 {user_id}这会导致前缀从插入点开始全部失效缓存完全白给。正确的做法是把所有变量内容挪到最后或者干脆删掉。第二个错误是 Few-Shot 示例每次都在变。如果你从数据库里动态检索示例每次调用的示例顺序或内容不同前缀就不稳定缓存无法命中。解决方案是固定示例集或者把动态示例放在用户输入之后。第三个错误是忽略了中英文 Token 成本差异。同一段指令中文 Prompt 的 Token 数通常比英文少 20% 到 50%因为汉字信息密度更高。对国产模型和中文业务默认用中文写 Prompt 更划算。只有在某个模型英文指令效果显著更好、且效果收益大过 Token 成本时才考虑用英文。第四个错误是只优化了 Prompt 但没做评测回归。删冗余词、改压缩模板之后一定要用评测集跑一遍确认准确率没有下降。凭感觉删字是赌博带数据删字才是工程。如果你在接入过程中遇到 API Key 配置问题可以查看接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。如果需要管理多个 Key 或查看用量去控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 。6. 长期编码与 Agent 场景的 Token 优化建议如果你是在做长期编码助手或者 Agent 应用Prompt 的 Token 效率优化会更加关键因为这类场景的 System Prompt 通常更长、历史对话更多、调用频率更高。除了上面讲的冗余词清理和缓存前缀你还可以考虑使用 Coding Plan 来获得更稳定的调用配额和更低的单位成本https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。对于 Claude Code 这类编码工具TaoToken 也提供了对应的接入方式具体可以参考https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 。在 Agent 场景中建议把工具描述、系统指令这些固定内容全部前置并开启缓存把用户输入和工具返回结果放在最后这样每次调用的固定开支可以降到最低。最后提醒一点Token 优化不是一次性的工作而是一个持续的过程。建议每月导出一次调用账单拆解 Token 构成定位最大的开销区然后针对性地做优化。删掉一句废话、挪对一个变量、命中一次缓存聚沙成塔就是账单上看得见的下降。