省 Token 实战:把长文对话成本降下来的六个方法
调 API 的账单里,很大一部分是重复发送的历史消息。下面六个方法按「见效快慢 + 改动大小」排序。
一、别把全部历史都带上(立刻见效)
多轮对话默认把所有历史一起发。但绝大多数任务只依赖最近几轮。保留最近 3~5 轮,加上第一轮的系统设定,通常就够。
这一条往往能砍掉一半以上的输入 Token。
二、系统提示词写短(立刻见效)
系统提示词每一轮都会重发。一段 500 字的角色设定,对话 20 轮就是 1 万字的重复开销。
把它压到必要信息:角色、输出格式、禁忌。删掉所有「请你务必」「非常重要」这类无信息量的强调。
三、长文档先摘要再提问(立刻见效)
把一份长文档整个塞进上下文,然后问五个问题,等于把文档发了五遍。
正确做法:第一次让模型输出一份结构化摘要,之后的提问基于摘要,只在需要细节时再回原文取对应片段。
四、任务分级用不同模型(要改一点代码)
不是所有任务都需要最强模型。格式转换、简单分类、文本清洗这类,用便宜的小模型完全够用,成本可能差一个数量级。
做法:在调用层加一个简单的路由,按任务类型分流。
五、用缓存机制(要改一点代码)
多家平台支持提示词缓存——重复的前缀部分按更低价格计费。如果你的系统提示词固定、只有用户输入在变,这个能省很多。
用的时候注意:把固定部分放在前面,变化部分放在后面,缓存才能命中。
六、限制输出长度(容易被忽略)
输出 Token 通常比输入贵。模型有话痨倾向,不限制就会写很长。
在提示词里明确「不超过 200 字」,同时在 API 参数里设 max_tokens 兜底。两处都要设,只设一处经常不生效。
先量后调
动手优化之前,先把「输入 Token / 输出 Token / 调用次数」这三个数按功能模块统计一遍。大多数人凭直觉优化的地方,往往不是真正花钱的地方。