docai.cc

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 看在哪一步报错。

还是没解决?把报错贴进来

纯本地判断,不上传你的报错内容。支持 400 / 401 / 403 / 404 / 413 / 429 / 500 / 502 / 503 / 504 / 529 及常见错误码文字。

新用户福利:先免费试,再决定充值

注册就送积分,可兑换 API 额度。拿真实请求验证本页结论,比看十篇教程都有用。

领免费额度