近日听闻 Dify 这款工具,刚好有使用 AI 工作流的需求,就搭了一个社区版来体验一下。自己建了几个工作流,用了一段时间。可以明显感觉到一些功能的缺失以及设计的不合理之处,即使现在已经是 1.0 版本了。并且如果你打算很正经的用于工作或是自己项目中,只能购买企业版,他们提供的社区版有诸多限制,感觉有点像是购买企业版之前的“试用版”。
网上的文章,几乎都是 Dify 的介绍,或者是部署,很少有人讲使用体验。这里我就来说说我使用 Dify 的体验吧(除了工作流应用之外,其它应用都只是轻度体验)!
其实说是 1.0 的体验,但是我这篇文章写得比较慢,写的过程中持续体验了 1.0.0 到 1.1.3 版本。
Dify#
Dify 是苏州语灵人工智能科技有限公司推出的产品,它可以做这些东西:
看起来很有趣的样子!那么直接开始测评正文吧!
界面#
Dify 的主要界面按照功能划分为探索、工作室、知识库、工具和插件 5 个。
探索界面提供一些模板应用程序,大家刚开始用的时候,可能都是进到探索界面,选几个看起来很酷炫很多功能的应用,自己用一下看看效果。
将鼠标移到一个项目上,鼠标会变成手指,并且会弹出添加到工作区按钮。
其实我以为鼠标是手指的话,点击项目之后是弹出展示详细信息的小窗口,展示这个应用的截图、介绍等,而点击“添加到工作区”按钮的话,就是直接添加到工作区。没想到点击项目之后其实是没有反应的,只能点添加到工作区。这个的设计有点不太合理了,如果不能点击的话,应该仍然保持指针的样子。当然,希望以后也可以做到真的可以点开先查看一下这个应用的详细信息,毕竟目前这个版本,在添加到工作区之前,仅有几行文字介绍。
工作室的编辑应用的界面整体设计得还算可以,我作为一个从未接触过这些东西的人也很容易上手。但是会有一些小缺点:
-
看上图,菜单中存在拷贝和复制两个选项,会让没用过苹果产品的人感到困惑。换成英文版本就会发现,其实“拷贝 (Copy)”对应的是需要“贴上/粘贴”的“拷贝/复制”;而“复制 (Duplicate)”的行为实际上是“制作副本”。这个菜单在英文的环境下是没有问题的,但是换成中文就容易引起误会,尤其是大部分人都是常用 Windows 系统,其实我认为只要将“复制”改为“制作副本”或者“克隆”即可让人更容易理解。这个问题同样也出现在了应用的复制按钮中。
-
编辑应用界面在自动保存的时候会卡死,直到保存完毕,网络条件不好时,保存耗时也会更久,有时候卡着好久都没有响应。
-
测试运行追踪面板,这里有几串超长 Json,为了方便查看,贴心的在右上角提供了展开按钮,结果一点展开,竟然是纵向展开,横向的宽度没有变化!这个窄窄的,一行显示不了多少内容,最终还是要复制到其它地方查看。
知识库的这几个页面看起来都很好看的,主要是丰富的功能可以支撑起有内容,看起来就很专业的 UI。
Dify 的工具现在已经升级为了插件,所以以后可能会移除工具这一页,就不说这个工具页了。至于插件页,也没什么好说的,一切正常。
应用#
Dify 有五种应用,分别是聊天助手、Agent、文本生成应用、聊天流和工作流。
聊天助手#
就一个普通的聊天助手,可以提前写好提示词,并且支持知识库功能,Dify 与其它专注于聊天助手的项目拉开差距的功能就是提供 API,在其它功能上,Dify 与其它聊天助手项目并没有太大的差别。
Agent#
Agent 才是聊天助手的完全体,有工具调用功能,可以添加搜索、网页爬取工具等等,这里 Agent 相对于其他开源聊天助手项目的最大优势有:
-
支持 ReAct 模式。 这一点可以让不支持函数调用的模型也可以调用工具,并且我使用下来,ReAct 模式下,模型可以判断当前是否已经达成目的,如果还未达成就会多次调用合适的工具,直到达成目的或者达到最大次数。这一点在其它支持函数调用的模型上是基本不会触发或者根本不支持的,目前我看到可以直接实现这种效果的只有 Anthropic 的 Claude 3.7 Sonnet。
-
工具中支持添加工作流。 这一点就只有 Dify 可以做到了,与其他应用联动的功能。可以编辑工作流快速做好一个使用大语言模型的工具,并且提供给自身的 Agent 使用。换成是其它平台,只能从无到有写一个程序,然后再自己编写让 Agent 调用的工具接口。
文本生成应用#
写好提示词,然后让用户输入一些指定格式的参数,就可以生成一些文本。这个应用的功能也就这些,和聊天助手一样,玩不出太多的花样了。
聊天流#
这个聊天流感觉只能做一些有限范围的针对性场景的聊天应用,我还没用过,就不做评价了。
工作流#
工作流是 Dify 的核心应用,我也是主要体验了这个应用。这里简单说说我对 Dify 工作流的理解。如果你有很多相同类型的数据,要做一些重复性的工作得到一些输出,并且这个工作普通的程序做不到,必须要大模型的帮助,那么就可以用工作流来做这个事情。
以我最近的一个需求来举例子:我搭了一个 new-api 用于将我的所有 AI 渠道转为 OpenAI 格式,new-api 在非自建模式下,模型必须填入倍率才可以使用,倍率是由模型的价格决定的,我有很多模型,每个模型都由不同的提供商提供,价格也都不一样。如果我想知道每个模型的价格情况,就需要一个一个的去查,写普通程序是不行的,因为不同模型提供商的价格页面结构不一样,针对页面一个一个写适配的话,还不如手动查。目前比较好的做法就是是在程序中调用 AI,让 AI在页面上找到价格。那既然要写程序,假如没有会写程序的人、或者写程序太笨重太麻烦,现在要立即出结果的话,这时候就要用到 Dify 了。
上图是我写得查找模型价格的工作流编排的一部分的截图,可以看得出来,这个节点图实际上运作起来更像是流程图。
依靠以上的节点、安装的插件(网页搜索、网页抓取等)、其它工作流(可以作为节点加入)以及知识库,基本上可以完成一些实用的 AI 程序的制作。代码执行插件可以执行自定义的 Python 或 NodeJS 代码,为 Dify 工作流应用提供了极高的上限。
不过我体验下来,还是发现了很多大大小小的缺点,虽然或许都有方法绕开这些问题,但是这些问题的存在,还是很影响使用者的体验的:
- 没有模型调用速率限制功能。工作流执行过快可能会超出 API 的调用速率限制,Dify 提供类似功能但是是多个 Key 的负载均衡,且为付费的企业版特性。如果是个人用户使用速率限制要求较高的免费 API 的话,经常会出错,感觉个人用户或者小团队单个 Key 使用的话,也是很需要这个功能的。我能想到的唯一办法,就是在一些调用比较快的节点之间加入“延时节点”,“延时节点”实际上就是代码执行节点,代码内容是
time.sleep
之类的延时函数。这样当工作流执行到这里的时候就会等待一段时间再进行下一步。 - 变量赋值功能不能在工作流中使用。变量赋值功能好像仅限于对话流,在工作流里面是不能添加任何变量的,感觉这一点不太应该啊,变量功能在聊天流里面充当的是记忆功能,而在工作流里面,其实是可以用作流程控制的,本来编辑节点图方式的灵活性就已经落后于代码了,如果连变量都不能用的话,那么整个工作流的流程控制的灵活性也降低了好多。
- 循环节点像是个半成品。循环节点和非并行的迭代节点很像,其是就是普通 for 循环和基于范围的 for 循环的区别。但是迭代可以输出一个数组,而循环什么都不能输出,然后上一点也提到了,不能设置变量,也就没有设置变量提前跳出循环的可能了,循环和变量功能的缺失,让我目前体验做的这个工作流的功能受到了很大的限制,很难做到一些复杂的功能。补充说明:我吐槽循环的时候,官方甚至连循环的文档都是 404 的状态,而目前已有循环文档,并且 Dify 认为的循环和我认为的循环是有一点小出入的,以后也会提供循环变量和
break
节点的功能。
其实这些问题都是可以解决的,比如针对第一点加入真正的“延时节点”,或者说可以针对某个工作流限制调用模型的速率,这样用量小的用户就不容易触发 API 速率限制了,而用量大的用户会有多个工作流,工作流的速率限制独立但加起来可能会超出限制,还是会买企业版,也不影响 Dify 赚钱。第三点就不说了,以后的路线确实是有在解决问题的,而第二点的话基本上是没有希望能做了,但是想要做也很简单。
再总的来说一下 Dify 这几种应用的共同点吧。所有应用都提供了网页和 API 两种对外的交互方式,既可以兼容人,也可以兼容其它程序。但用户的每次使用,都会记录于管理页面的日志中,没有说默认提醒用户注意会搜集输入信息。也没有网页访问凭据、网页以及 API 的调用次数限制的功能(也有可能企业版会有?),就这点注定了 Dify 的应用,只能供自己、信任的朋友或者团队内部使用。
总结#
先把优缺点列出来吧,优点是:
- 多种应用,功能丰富,上手简单
- 工作流应用很强大,可能(我没用过的)聊天流也很强大,无需编程即可完成一个可以处理复杂任务的 AI 应用
- 提供网页以及 API 两种对外的格式,可以方便的与人或其它应用联动
缺点:
- 应用中的部分功能缺失以及界面设计有微小的不合理
- 社区版的限制太多,感觉像是购买企业版之前的“试用版”
- 一些界面用起来就不舒服,比如测试运行追踪的展开功能的界面
其实你不付费的话,还有一点要注意的地方就是不能有多个工作区。Dify 的协议说明了不能使用开源的版本来提供多租户服务,而且定义了每个工作区就是一个租户,所以如果你修改了代码,使 Dify 支持多个工作区的话,其实是违反了协议的。这一点确实也是砍到了大动脉,如果你有一个小团队或者就是想要提供一个这样的平台给你的朋友使用(因为我朋友们都不是做 IT 的没有模型 API Key 也不会搭 Dify,我就想分享我自己搭的给他们体验,但不能自己改代码做多个工作区的话,真的会很混乱大家都不是干同一件事情的),没有私人工作空间的话,只能多个人忍受同一份混乱的工作区了。
对于我来说,如果要做利用 AI 的小项目的话,可以使用 Dify 直接制作出来,提供给其它人或程序使用。而要做中型的 AI 项目的话,也可以先使用 Dify 来快速搭建好原型,验证可行性,然后再根据工作流编排,使用代码重写,这样做出来的程序灵活性以及性能都会更好。
我估计以后的 AI 很快就可以使用浏览器甚至操作电脑替代用户进行操作了(现在就已经有了 OpenAI 的 Operator 以及 browser use 这类项目了),可能会干掉很多一次性的小批量的流水线处理的程序,写这些程序的时间,别人可能一句话命令 AI,让 AI 来进行操作,不用动脑就可以完成任务。但 Dify 的工作流这种,编辑节点图的方式本身就比写程序要快,而且设计出来就是支持大批量调用的(网页界面支持 csv 批量输入以及支持 API),人工编辑的流程也相比于自由发挥的 AI 有更高的确定性,就是与 AI 操作电脑的短期小批量任务错开,专注于长期的大批量任务。同时还提供网页界面,可以交由其他人使用,这一点也是与很私人化的操作电脑的 AI 不一样的地方。Dify 的竞争力,在以后其实还是很强的。