Dify工作流需通过条件分支节点判断文本长度并分路径处理,超长文本用代码节点语义分块,动态生成summary_length变量注入LLM提示词,并设置max_tokens≥1024防二次截断。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当原始文本超过模型上下文窗口限制时,Dify工作流若未做处理,会直接触发截断或报错,导致摘要丢失关键段落、输出不完整甚至中断运行。
识别超长文本并触发截断逻辑
在工作流开始节点后,添加一个「条件分支节点」→ 将输入变量 text 的 length 与阈值(如 6000)比较 → 大于阈值则走「超长路径」,否则走「常规路径」。
这个判断必须放在LLM节点之前,否则模型调用失败后无法捕获错误,【条件分支节点不支持对LLM节点的运行时异常做兜底】。
对超长文本执行语义分块
方法一:使用「代码节点」调用Python内置切分逻辑
在代码节点中填入以下逻辑:
chunks = []
for i in range(0, len(text), 4000):
chunk = text[i:i+4000]
if i + 4000 last_period = chunk.rfind('。')
chunk = chunk[:last_period + 1]
chunks.append(chunk)
这段代码确保每块以句号结尾,避免在句子中间硬切;4000是为预留系统提示词和输出空间所设的安全上限,不是模型最大token数。
方法二:用Dify原生「模板节点」+ 循环语法自动分块
启用模板节点的循环功能,将 text 按正则 r'([^\n。!?;]+[。!?;\n]|[^。\n!?;]{300,}?)' 切分为列表 → 每次循环传入一个片段给LLM节点 → 最终用「聚合节点」合并结果。
动态压缩提示词长度
第一步:在LLM节点的系统提示词中,用双大括号引用变量 {{summary_length}},该变量由前序节点根据原文长度计算得出。
第二步:在「代码节点」中写判断逻辑——若原文长度 > 8000,则设 summary_length = "50字以内";若原文长度 ∈ [4000, 8000),则设 summary_length = "120字以内";其余情况设为 "200字以内"。
第三步:将该变量通过连线绑定到LLM节点的「用户提示词」中,例如:“请用{{summary_length}}概括以下内容:{{text}}”。
这一步不能靠人工在提示词里写死长度要求,否则面对不同长度输入时,模型容易忽略指令或生成失控;【变量必须在LLM节点调用前实时生成并注入,不可在提示词中静态写死】。
防止输出二次截断
进入LLM节点配置页 → 展开「高级参数」→ 找到 max_tokens 输入框 → 填入数值 1024。
若留空或填过小(如256),即使输入已分块、提示词已压缩,模型仍会在生成中途被强制终止,返回半截句子。
这一步操作起来很简单,直接把数字填进去就行。











