按句号切分法律条文,其中一条没有句号长达 9000 字,切片后仍报 context_length_exceeded,整批任务中断在第三十七条。
这类报错背后常见的原因有几处,逐个排除就行。分句后没有检查单片长度;长句里只有逗号与分号;切分逻辑假设句子必然短于上限;超限异常没有降级路径。
先找出最长的句子有多长
python -c "print(max(len(s) for s in open('t.txt').read().split('。')))"
超长句再按逗号与分号二次切
python split_soft.py --seps ',;' --max 4000
仍超限则定长硬切并加标记
python split_hard.py --max 4000 --mark
补一个无标点长文的单测
python -m pytest tests/test_split.py -q
改之前先确认了最近有没有人动过配置,避免白查一遍。
这次没动代码,只在配置和运行环境上找原因。
隔了一天再看,现象没变,说明不是偶发。
恢复的判定其实很直接。所有切片都低于模型上限,批任务完整跑完,切分结果拼回与原文一致。
提醒一点。分句之后必须再做一次长度兜底,无标点长文在国内法规里很常见。这类问题最好一次改到位,反复小改反而容易把原因搅混。
