字符估算失准,批量提示词遭静默截断
作者排查批处理回答中途截断的问题,发现按字符数估算 token 的预算检查随语料变化失效。任务正常退出且没有警告,使长度计算错误难以从日志中发现。
原文暂未完整获取,基于公开信息的快读
一篇 dev.to 排障记录提到,作者的批处理任务正常退出,没有异常或警告,部分回答却在话说到一半时结束。作者追查后发现,发送前的 token 预算检查依赖固定字符比例,语料变化后仍然放行了超出估算预算的输入。下游校验又把残缺回答归为格式错误,让排查一度偏向了 schema 代码。
目前能确认什么
作者最初把字符数除以 3.6,估算提示词的 token 数,并设置了 800 token 的检查阈值。这个比例根据英文文本调整,却被用于中文、base64 和含大量 emoji 的日志。
Token 是模型处理文本的单位,与字符数没有固定换算关系。分词器不同、文本内容不同,相同字符数对应的 token 数也可能不同。
作者构造了四类可重复生成的测试语料。其中,中文用例通过了预算检查,但这个测试只证明估算结果低于阈值,没有验证实际 token 数。
作者后来对未知语料改用每字符一个 token 的保守估算,超限后按边界拆分,或明确截断并记录丢弃位置。这仍是估算策略,不能当作所有分词器下都成立的安全上界。
我的判断
对批量推理程序,退出码为零只能说明程序执行结束,不能证明回答完整。预算检查之外,还需要单独识别输出缺损;接口若提供结束原因和用量信息,应把它们与任务 ID、重试次数一起记录,才能区分首次失败和重复失败。
这段材料还不足以确认生成提前停止的具体机制:输入预算、输出额度、上下文限制分别如何配置,接口返回了什么结束状态,都没有交代清楚。因此,不能直接认定字符估算错误就必然触发服务端静默截断。
我更看重这里暴露的测试盲区:验证估算函数按预期运行,不等于验证预算判断正确。 更有价值的回归检查,是用目标模型对应的分词器核对边界,并检查拆分后的输入是否满足实际限制。