Dify 0.6.12 主流程调子流程,子流程里取会话 id 得到空字符串,主流程同一个变量正常,日志显示子流程入参里根本没有这个字段。
真正麻烦的地方在于,几个原因的现象几乎一样。子流程默认不透传系统变量,要用输入显式声明;会话变量的作用域只在应用层,流程节点不继承;变量键写成带点号的全名,实际存储用的是短名;子流程以独立应用身份运行,没有会话上下文。
第一件事是在主流程节点把需要的值显式传参
python -c "print({'conversation_id':'abc'})"
随后看子流程声明的输入定义
curl -s -H "Authorization: Bearer $DIFY_KEY" http://127.0.0.1/v1/parameters | jq '.user_input_form'
运行一次确认入参落到日志
curl -X POST http://127.0.0.1/v1/workflows/run -H "Authorization: Bearer $DIFY_KEY" -H "Content-Type: application/json" -d '{"inputs":{"conversation_id":"abc"},"response_mode":"blocking","user":"qa"}'
剩下的就是用会话接口再验一次变量可见性
curl -X POST http://127.0.0.1/v1/chat-messages -H "Authorization: Bearer $DIFY_KEY" -H "Content-Type: application/json" -d '{"inputs":{},"query":"hi","response_mode":"blocking","conversation_id":"","user":"qa"}'
恢复的判定其实很直接。子流程日志里 conversation_id 有值且与主流程一致,回复不再走未识别会话的兜底分支。
系统变量跨应用调用时一律当外部输入处理,别指望隐式继承,显式传参反而更好排查。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
