context_length_exceeded:上下文超长怎么解决
400高频上下文token超长30 秒结论
这次请求的 token 总数超过了模型窗口。 注意:输入 + 输出都算,输出还要预留 max_tokens。
报错原文对照
{'error': {'message': "This model's maximum context length is 128000 tokens. However, your messages resulted in 135000 tokens.", 'type': 'invalid_request_error', 'code': 'context_length_exceeded'}}
{"type":"error","error":{"type":"invalid_request_error","message":"prompt is too long: 210000 tokens > 200000 maximum"}}
原因排序
| 概率 | 原因 |
|---|---|
| 45% | 历史消息没裁剪,越聊越长 |
| 30% | 塞了长文档 / 大段代码 |
| 15% | max_tokens 设太大,挤占输入空间 |
| 10% | 模型窗口本身就小(8K/16K) |
修法
1. 裁剪历史
只保留最近 N 轮 + 第一条(通常第一条最重要)。中间的丢掉或摘要。
def trim(messages, keep_first=1, keep_last=10):
if len(messages) <= keep_first + keep_last:
return messages
return messages[:keep_first] + messages[-keep_last:]
2. 长文档先摘要
不要把整本书塞进去。先分块摘要,再把摘要喂给主模型。
3. 换大窗口模型
| 模型档位 | 典型窗口 |
|---|---|
| 小模型(mini/flash) | 128K |
| 中端 | 200K |
| 长上下文专用 | 1M |
我们的模型库可以按上下文排序筛。
责任判定表
| 现象 | 责任方 |
|---|---|
| 报错里明确说超了多少 token | 你的输入 |
| 明明内容不长也报 | 站点把窗口改小了(有些中转站会缩水) |
| 只有某家站报 | 那家站限制更严 |
一个常被忽略的点
很多中转站会把 200K 窗口标称成 “1M”。实测方法:发一个超长 prompt 看在哪一步报错。
还是没解决?把报错贴进来
新用户福利:先免费试,再决定充值
注册就送积分,可兑换 API 额度。拿真实请求验证本页结论,比看十篇教程都有用。
领免费额度