故障排查GitHub issue3 分钟阅读排错/错误码

解决FastGPT强制拆分时lastText丢失的分段问题

用户反馈执行完所有配置的分段策略后,拆分得到的分段未达到预期要求。在使用强制拆分功能时,若存在未处理的lastText片段,会直接导致该片段丢失,可通过配套日志截图观察该异常。

现象

用户反馈执行完所有配置的分段策略后,拆分得到的分段未达到预期要求。在使用强制拆分功能时,若存在未处理的lastText片段,会直接导致该片段丢失,可通过配套日志截图观察该异常。

可能原因

现有分段逻辑在递归终止步骤(即step >= stepReges.length时),未正确处理lastText与当前待拆分text的组合,未将lastText纳入合并或拆分流程,最终造成该文本片段丢失。

排查步骤

  1. 查看已生成的分段结果,核对是否存在未被包含的剩余文本片段。
  2. 检索强制拆分环节的控制台日志,确认是否存在lastText未被合并或处理的记录。
  3. 确认分段相关配置参数,包括maxSize、chunkSize、overlapLen的设置是否符合业务需求。
  4. 复现强制拆分流程,观察是否触发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;
}

验证流程如下:

  1. 将修复后的分段逻辑应用到系统中。
  2. 重新执行分段策略并触发强制拆分操作。
  3. 检查生成的所有分段,确认lastText已被正确包含在分段结果中。
  4. 核对每个分段的长度,确认均符合配置的大小要求。

来源:FastGPT GitHub issue