快速结论:该问题通常出现在 Dify 工作流中的 Agent 节点调用推理模型(如 GLM-5.3)且涉及工具调用时,模型输出的 <think> 标签未正确闭合,导致后续内容全部被渲染为“思考中”而不可见。优先检查 Agent 节点是否已正确关闭 </think> 标签,并考虑在节点后添加 Code 节点做兜底清理。
适用环境:Dify 1.17(Self Hosted,Docker 部署),工作流中使用 Agent 节点并配置带工具调用的推理模型。
最快修复方案:暂无确认的一步修复方案。Dify 核心代码中 Agent 节点的 AgentMessageTransformer.transform() 方法目前没有对 <think> 标签的跨片段状态追踪与强制闭合逻辑。可优先尝试在 Agent 节点后添加 Code 节点,通过正则清理未闭合标签作为临时方案。
注意事项:该问题并非 GLM-5.3 特有,任何在 Agent 节点中调用带推理能力且涉及工具调用的模型均可能触发。Dify 官方此前有修复 PR(#38506),但仅针对 Agent v2 应用运行器,工作流中 Agent 节点的 message_transformer.py 尚无对应保护逻辑。
问题场景
用户在 Dify 1.17 自托管(Docker)环境中,于工作流内使用 Agent 节点,配置 GLM-5.3 模型并开启工具调用。模型输出预期包含 <think>...</think> 与正常回复两部分,但实际执行时,工具调用边界处 <think> 标签未被闭合,导致后续所有内容(包括对用户可见的回复)都被包裹在思考标签之内,无法正常显示。
报错原文
Workflow miss
<think>
prefill 配置:seq_len=4096, cache_len=0(纯 causal,mask_ratio=0.5),tp=1, ep=8, ranks=8, gbs=64。dp_size 在 prefill 时 = num_ranks // (cp*ulysses*pp*tp) = 8 → bs=8。
先快速读 prefill/simulate.py 的 build_graph 与 check(尤其 cache_kv=None 的 prefill 处理与 prune 列表),再跑。
<think>
prefill simulate.py 检查:
从输出可见,第一个 <think> 之后没有出现 </think>,紧接着又出现了第二个 <think>。因思考标签未闭合,用户无法看到实际回复内容。
原因分析
该问题属于 Dify 在处理 <think> 推理标签时的结构性缺陷,而非偶发异常。核心原因如下:
Dify 的“启用推理标签分离”功能(将 <think>…</think> 内容单独提取并展示)目前仅实现于 LLM 节点(详见 PR #23313),Agent 节点没有对应逻辑。Agent 节点的 AgentMessageTransformer.transform() 方法仅将每个 TEXT 消息块拼接到 text 字段后输出为 StreamChunkEvent,代码中没有跨片段的状态解析器来追踪 <think> 标签是否未闭合,也没有在工具调用事件中断输出流时强制关闭悬空的 <think> 块。
当 GLM 在工具调用边界输出未闭合的 <think> 标签后,后续所有流式内容都会被渲染在仍处于打开状态的标签内,最终表现为全部内容进入“思考中”区域。旧版 Agent 运行器(FunctionCallAgentRunner)同样存在该问题——它按文本片段累加原始响应字符,没有跨工具调用轮次维护 think 标签状态。
环境排查
- 确认 Dify 版本是否为 1.17(或更高版本中是否已更新相关代码)。
- 确认 Agent 节点中配置的模型是否为带推理标签输出的模型(如 GLM-5.3 或其他推理模型)。
- 确认 Agent 节点已启用工具调用功能,即是否为 Agent with tools 工作流。
- 查看用例通过时,问题是否在特定模型提供方或插件版本下出现。
解决步骤
- 临时兜底方案(可优先尝试):在 Agent 节点后添加 Code 节点,通过正则清理未闭合的
<think>标签:import re # 删除所有 <think>...</think> 块(包括未闭合的) result = re.sub(r'<think>.*?</think>', '', agent_output, flags=re.DOTALL) result = re.sub(r'<think>.*', '', result, flags=re.DOTALL) # 捕获未闭合标签 - 建议追踪修复进展:Dify 官方此前有 PR #38055 尝试增加 Agent 推理标签分离,但已关闭(维护者表示修复应放在独立的 Agent strategy 插件中,而非 Dify 核心)。请关注 Dify 仓库中关于 Agent 节点推理标签处理的相关 Issue 与 PR。
- 为维护者提供信息:如问题持续出现,请反馈准确的模型提供方/插件版本,以及工具调用边界的原始执行追踪记录,帮助确认修复应在核心代码(
message_transformer.py)还是模型提供方插件中实现。 - 改用 Agent v2 应用运行器:Dify 已对 Agent v2 应用运行器合入修复(PR #38506),该修复会在每个工具事件中显式关闭当前 thinking 段落。如可行,可考虑使用 Agent v2 而非工作流中的 Agent 节点。
验证方法
执行一次带工具调用的长工作流,观察模型输出:确认在工具调用边界后,思考内容与回复内容的分隔是否正确,用户能否正常看到最终回复。若添加了 Code 节点作为临时方案,验证正则清理后输出是否正常展示,且不影响正常闭合标签时的反向内容显示。
参考来源
langgenius/dify #41558 Workflow miss
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。

![Misc. bug: [Fix provided] --fit on + --sleep-idle-seconds: failed to fit params to free device memory: model_params::tensor_buft_overrides a](https://www.chat-gpts.plus/wp-content/uploads/2026/09/24684-be7abf56-768x403.jpg)
![[Bug] Service API / console segment update clears attachments when attachment_ids is omitted](https://www.chat-gpts.plus/wp-content/uploads/2026/09/41774-dd68358e-768x403.jpg)