这个坑值得记一笔。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 里的真实数字,再决定是切片还是换长上下文模型。这类问题最好一次改到位,反复小改反而容易把原因搅混。
