这个坑值得记一笔。fireworks-ai 0.15 调 accounts/fireworks/models/llama-v3p3-70b-instruct,送进去 3 万字中文合同,返回 400,原文 Input length exceeds the maximum context length of 32768 tokens,按字符数看只占一半。

刚开始盯着「max_tokens 预留的输出额度挤占了输入空间」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。中文的 token 密度比英文高,字数不等于 token 数;system 提示和 few-shot 示例被一并计入;本地 tokenizer 和部署侧使用的版本不一致。

上来先用模型同款 tokenizer 重新估算一次

python count_tokens.py --model llama-v3p3-70b --file contract.txt

接着把响应里的 usage.prompt_tokens 打出来对齐

python -c "import json;r=json.load(open('resp.json'));print(r['usage'])"

下调 max_tokens 给输入腾出空间

python smoke.py --model llama-v3p3-70b --max-tokens 1024 --file contract.txt

末了按章节切片后分多次请求并汇总

python split_by_heading.py --input contract.txt --max-tokens 12000

命令输出我都留了记录,免得改完记不清原来的值。

改完先别撤,确认这几项。切片后的每次请求都返回 200,usage 里 prompt_tokens 与本地估算相差不超过 5%,汇总结果章节齐全。

容易忽略的是,各家控制台展示的上限通常是输入加输出的总和,遇到这类报错先看 usage 里的真实数字,再决定是切片还是换长上下文模型。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189