前几天我把公司的Dify从0.8.x升级到0.10.1版本后,发现了一个问题:工作流Start Node中对inputs的空字段处理方式发生了变化。在旧版本中,当一个可选字段为空时,会将其处理为空字符串(“”),但升级后这些空字段全都变成了null。
这个变化直接影响了我们现在使用中的工作流程,导致了后续的node会出现变量无法找到的异常。反正我先修改工作流利用变量赋值节点解决了这个问题。
但是非常在意到底是什么修改引起了这个变化。这几天百思不得其解,昨天注意到#9584的修改中,移除了一个被标记为deprecated的get_any方法,使用新的get方法替代。
关键的区别在于:
1 | # 老的get_any方法 |
我感觉问题是在这里,但是我代码能力有限,还好现在又AI,我先把这部分代码扔给perplexity让他帮分析,他又告诉我需要深入查看了segment的实现后。再把segments的代码扔进去之后,感觉搞清楚了问题所在。
旧版本中,空输入会被转换为StringSegment并包含一个空字符串,而to_object()方法会直接返回这个空字符串。但在新版本中,空输入被转换成了NoneSegment,当它被使用时,to_object()返回的是None而不是空字符串。
在Github,我看到也有其他用户相同的问题,但是他被影响了大量工作流,不知道有没有什么快速解决这个问题的办法啊。
https://github.com/langgenius/dify/discussions/9782。
后续这次修改肯定是没有问题的,但是造成这样的结果是Dify这边也没有预料到的,目前已经在处理中了。
https://github.com/langgenius/dify/discussions/9782#discussioncomment-11081805