现象
用户反馈执行完所有配置的分段策略后,拆分得到的分段未达到预期要求。在使用强制拆分功能时,若存在未处理的lastText片段,会直接导致该片段丢失,可通过配套日志截图观察该异常。
可能原因
现有分段逻辑在递归终止步骤(即step >= stepReges.length时),未正确处理lastText与当前待拆分text的组合,未将lastText纳入合并或拆分流程,最终造成该文本片段丢失。
排查步骤
- 查看已生成的分段结果,核对是否存在未被包含的剩余文本片段。
- 检索强制拆分环节的控制台日志,确认是否存在lastText未被合并或处理的记录。
- 确认分段相关配置参数,包括maxSize、chunkSize、overlapLen的设置是否符合业务需求。
- 复现强制拆分流程,观察是否触发lastText丢失的异常。
解决与验证
可通过调整分段逻辑修复该问题,具体代码修改如下:
// 执行完所有分片策略,校验文本大小,超出再做拆分
if (step >= stepReges.length) {
// 合并lastText和当前text
const combinedText = lastText + text;
const combinedLength = getTextValidLength(combinedText);
console.log(`递归终止: step=${step}, lastText长度=${getTextValidLength(lastText)},
text长度=${getTextValidLength(text)}, 合并后长度=${combinedLength}`);
if (combinedLength < maxSize) {
return [combinedText]; // 返回合并后的完整文本
}
// 对合并后的文本进行固定大小分割
const chunks: string[] = [];
for (let i = 0; i < combinedLength; i += chunkSize - overlapLen) {
chunks.push(combinedText.slice(i, i + chunkSize));
}
return chunks;
}验证流程如下:
- 将修复后的分段逻辑应用到系统中。
- 重新执行分段策略并触发强制拆分操作。
- 检查生成的所有分段,确认lastText已被正确包含在分段结果中。
- 核对每个分段的长度,确认均符合配置的大小要求。