启用debug=true、log_level=debug、workflow_trace_enabled=true三环境变量可捕获dify工作流全链路执行快照与trace_id,结合api获取node_executions检查status及context,并在关键节点插入js日志校验上下文。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要快速定位Dify工作流中“输出正确但逻辑跑偏”“节点静默跳过”“条件分支始终不触发”这类隐蔽问题,必须绕过UI表层反馈,直接捕获执行时的上下文快照与链路轨迹。
启用全链路调试日志
在Dify服务启动前,向环境变量中写入三组关键配置:DEBUG=true、LOG_LEVEL=DEBUG、WORKFLOW_TRACE_ENABLED=true。这三者缺一不可,【缺少WORKFLOW_TRACE_ENABLED=true将导致trace_id不生成,后续所有跨节点追踪失效】。
若使用docker-compose部署,需在.env文件中添加,并执行docker-compose up -d --build使配置生效。
该配置会强制每个节点在执行前后记录input、output、duration_ms及完整error堆栈,同时为每次请求注入唯一trace_id。
通过API接口提取结构化执行轨迹
访问/api/v1/workflows/{workflow_id}/executions/{execution_id}可获取本次运行的完整节点序列。注意:workflow_id和execution_id均需从控制台“工作流执行历史”中点击具体实例后,在URL路径或详情页顶部复制,不可猜测或省略。
返回JSON中node_executions字段按实际执行顺序排列,不是流程图绘制顺序。重点检查status字段是否全为success——哪怕只有一个节点是failed或skipped,都可能引发下游变量缺失。
若发现某节点status为skipped,请立即展开其context字段,确认触发该节点的前置条件变量是否存在、类型是否为布尔值(如字符串"true"不会被识别为真)。
在关键节点插入JavaScript上下文快照
方法一:在「代码执行」节点中粘贴以下脚本(需开启JS沙箱):
Object.entries($context).filter(([_, v]) => typeof v !== 'function').forEach(([k, v]) => console.log(`[${k}]:${typeof v}=`, v));
方法二:对需要深度校验的变量单独打印,例如检查user_input是否被trim()预处理过:
console.log('raw user_input:', $inputs.user_input); console.log('length before trim:', $inputs.user_input.length);
【此操作必须放在变量首次被消费前的节点,否则快照捕获的是已被覆盖的值】
实时排查RAG与Agent异常行为
第一步:在向量检索节点后插入日志节点,输出retriever模块原始响应;
第二步:检查日志中是否含retriever: top_k=3, hits=0字样——若有,说明查询未命中任何文档,需比对query分词与向量库embedding模型的tokenizer是否一致;
第三步:若出现decision_loop: step=5, same_action_count=3,表明Agent陷入动作循环,应立刻审查system prompt中是否遗漏了明确的终止条件描述,例如“当已获得全部必要信息时,请直接输出最终答案,不要继续调用工具”。











