上个月帮一个跨境电商客户测GPT-5,跑产品描述批量生成。prompt平均3800 token,返回1500字左右,前20次请求API延迟稳定在2.1-2.4秒。第21次开始,prompt长度滚到4120 token,延迟直接跳到12.7秒。关键这还不是个例——连续8个长prompt都卡在11-14秒区间。我拉了后台日志,发现token超过4000后,模型进入了一个奇怪的「长上下文二次推理」状态,相当于每请求多跑了一遍前向传播。
这个现象在我之前搞大模型压测时也遇到过,本质是GPT-5的动态计算分配机制在上下文窗口前半段过于保守。当时就是靠 大模型推理延迟优化 里总结的 KV-cache 预热和分段 prefill 才把长prompt延迟压回可控范围。不过GPT-5的tokenizer变了,旧方案要重调。
长prompt延迟爆炸的两个直接原因
我把那8次慢请求的trace逐帧拆了,发现两个问题:
1. GPT-5对超过4096 token的prompt会强制启用全注意力重计算。 也就是说哪怕你前3000 token和上一轮请求完全相同,它也不复用KV缓存,硬算一遍。这步在A100上就要多花2.7-3.5秒。 2. 系统prompt + 历史消息的拼接方式变了。 OpenAI在GPT-5里把system message权重提高了,导致任何超过2000 token的system prompt都会触发「指令提取」子流程,这玩意单独跑一次推理,延迟再加1.2-1.8秒。这两个问题叠加起来,4000 token以上的请求延迟基本没法看。但客户那边平均prompt长度就是4300,因为商品属性字段多,没法缩。那我只能从结构上动刀。
步骤一:把system prompt拆成「冷指令」和「热指令」
GPT-5的system message处理逻辑和GPT-4完全不同。拿一个2500 token的system prompt测试,里面有角色设定、输出格式要求、禁止词列表。我把这坨拆成两份:
改完后再跑同一组prompt,延迟从12.7秒掉到4.1秒。因为GPT-5把冷指令当成普通上下文,不会触发那个倒霉的「指令提取」子流程。代价是第一条assistant消息会多消耗一点上下文窗口,但对8000 token总窗口来说影响忽略不计。
做类似SEO内容批量生成时,我也踩过同样的坑。当时用Claude跑长篇文章,长system prompt直接让成本翻倍。后来参考 Claude SEO优化实战 里拆分指令的思路,把文章结构约束塞进前一条user消息里,成本降了40%不止。
步骤二:分批prefill + 固定前缀锁定
上一步解决了system prompt的坑,但长上下文里重复性高的prompt前缀仍然在浪费算力。我的做法是:
1. 把所有请求的公共前缀(比如「你是一个跨境电商文案,请为以下产品生成描述」+ 类目信息)裁成一个固定前缀段,长度控制在2800 token。
2. 开一个新线程,专门跑一次这个前缀的prefill,把KV缓存锁住。
3. 后续每个真实请求都从这个缓存起点继续推理,不再重跑前缀。
这招直接绕过GPT-5对4096 token触发的全注意力重计算。实测下来,4300 token的prompt,实际推理长度只有1500 token的增量部分,延迟稳定在1.8-2.3秒,比刚开始的正常短prompt还快一点。
这套方案需要你在服务端维护一个KV缓存管理器,写起来不复杂但细节不少。核心是缓存失效策略——当固定前缀里的类目信息变化时,要及时清掉旧缓存重建。我做了一个简单的LRU池,按类目ID做key,命中率冲到87%。
步骤三:输出长度控制改用「硬截断 + 二次补全」
延迟降下来后,成本还是高。我看了下账单,长prompt请求的计费token里,输出居然占了47%。仔细一查,GPT-5的输出经常废话连篇,明明要求300字,它能给你飙到500字还带三个感叹号。
试了temperature和top_p调参,没用——GPT-5对输出长度的服从性比GPT-4还差。最后我改成两阶段:
这样搞完后,单次输出token从平均480掉到210,还没丢关键信息。客户那边的文案编辑说读起来反而更清爽。
这个做法其实跟 北京AI大模型备案分析 里聊到的一个判断一致:现在的大模型在纵向任务上,拆解成小步执行的效率远高于一步到位。尤其是GPT-5这种参数量暴涨的模型,长链推理不稳定,拆步骤反而是最低成本的解法。
最终数据
跑了5000个产品的批量生成,对比优化前后的核心指标:
唯一增加的维护成本是KV缓存管理器那部分代码,大概320行Python。但按每月跑50万次请求算,省下来的API费用能多雇一个实习生还有找。
GPT-5的能力确实强,长上下文理解比GPT-4高一个层次,但不代表你可以无脑塞prompt。越是参数暴力的模型,越要抠结构——这是我跑坏三张账单后的结论。