Dify长文本分割教程:用户输入内容拆分全攻略
如果你是 Dify 的重度用户,或者频繁搭建自动化工作流,肯定遇到过这个棘手场景:用户提交一段超长文本,工作流要么直接崩溃,要么处理结果粗糙。这类问题其实很普遍——比如我在做长文本翻译工作流时发现,大模型面对一次性输入的过长内容,往往会截断响应,翻译质量也因此大幅缩水。
如何解决?一个直觉方案:既然一次消化不了,就切分成小段分批处理。具体说,在“开始节点”后面接一个“代码执行”节点,用极简脚本将长文本拆成多个短片段,再通过迭代节点逐个加工,最后合并结果。这样大模型拥有充分的“咀嚼空间”,处理精度自然提升。
实现起来并不复杂。代码执行节点只需编写最基础的切分逻辑,无需引入复杂算法。下面是一段可用的 Python 示例:
def main(input_text: str) -> str:
token_limit = 1000
overlap = 100
chunk_size = int(token_limit * 6 * (4/3))
# 初始化变量
chunks = []
start_index = 0
text_length = len(input_text)
# 循环直到文本末尾
while start_index < text_length:
# 若非起始位置,回退实现重叠
if start_index > 0:
start_index -= overlap
# 计算当前块的结束索引
end_index = start_index + chunk_size
if end_index > text_length:
end_index = text_length
# 将当前块加入列表
chunks.append(input_text[start_index:end_index])
# 更新下一次起始索引
start_index += chunk_size
return {
"chunks": chunks,
}
一个关键细节:chunks 输出变量的类型必须选择 array[string],切勿选错。
代码节点的核心逻辑十分直观:将 input_text 按固定长度切块,每块间设置重叠区域(overlap)以保证上下文连贯,避免断句导致语义断裂。最终输出一个分段文本数组 chunks,后续直接接入迭代节点即可逐块处理。
切分完成后,迭代节点负责按实际需求处理每个文本块——翻译、摘要、格式化,均可胜任。迭代结束后,需要将结果拼装并展示。有两种方式:一是直接用“模板转换”节点拼接,简单高效;二是用代码执行节点手写拼接逻辑,灵活度更高,具体取决于你的编程习惯与能力。
整个流程仅三步:切分 → 迭代处理 → 拼接。核心在于代码节点内的切分逻辑,只要把 chunk_size 和 overlap 调优,绝大多数场景都能完美覆盖。若你正面临长文本处理瓶颈,不妨试试这个方案,低成本、高回报。
