这类问题我又碰上了一次。把一份 300 页的合同全文塞进 claude-3-5-sonnet 的一次请求,估算 19 万 token,接口返回 400,原文是 prompt is too long: 195000 tokens > 190000 maximum。
第一反应是「中文按字符估算的 token 数偏乐观」,验证下来不成立。
真正麻烦的地方在于,几个原因的现象几乎一样。模型上下文上限是 200k,但要给输出预留额度;文档里有重复附录,占了近三成 token;系统提示与工具定义也计入同一预算。
先按真实分词估算总量
python -c "print({'chars':420000,'est_tokens':195000})"
去掉重复附录后再估一次
python -c "print({'chars':310000,'est_tokens':142000})"
再往下把输出额度显式留出来
python -c "print({'max_tokens':4096,'budget':195904})"
超长文档改成分段摘要再汇总
curl https://api.anthropic.com/v1/messages -H "x-api-key: $KEY" -H "anthropic-version: 2023-06-01" -d @part1.json
白天有业务在跑,能验证的部分都压到了晚上做。
改完先别撤,确认这几项。请求返回 200 并给出完整回答,输入 token 小于上限减去输出额度,分段汇总的结论与原合同逐条可对应。
容易忽略的是,上下文上限是输入加输出的总和,把 200k 全给输入就必然失败,先扣掉输出预算再决定切几段。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
