游乐游手机版
首页/AI热点日报/热点详情

Dify代码执行节点实战编写技巧详解

类型:热点整理2026-06-12
Dify代码节点运行在沙箱环境,仅支持Python3 11,禁止系统调用及本地文件操作,仅开放numpy、pandas、requests库。必须根据Inputs面板确认上游数据类型,最终返回标准Python字典。处理文本或解析JSON时需用try-except包裹,调试时通过Test按钮验证输出为纯字典。

在Dify工作流中配置代码执行节点时,很多人习惯直接编写Python脚本,结果流程运行到一半就卡住了。其实核心要点只有一个:你的代码必须适应沙箱环境,并且最终返回的必须是一个标准的Python字典。听起来简单,但实际踩坑的人可不少。

Dify中代码执行(Code)节点编写实战

先明确一个前提:Dify的代码节点并非让你随意编写Python脚本。它运行在沙箱中,拥有诸多限制。但这并非坏事,恰恰保证了流程的稳定性与安全性。关键在于把规则理解透彻。

先弄清楚上游究竟传递了什么数据

打开工作流编辑器,点击你要配置的那个Code节点。右侧的「Inputs」面板会清晰显示上游传入的变量名和类型。例如,user_input是一个字符串,files是一个文件列表,每个文件又包含urlname字段。

这里有个常见的翻车场景:如果上游连接的是「知识库检索」节点,它传递过来的实际上是一个documents数组,其中每个元素都包含contentmetadata。你不经过检查就直接写input['text']?等着KeyError吧。所以第一步,老老实实查看Inputs面板,确认数据类型。

沙箱中写代码,这些红线不能碰

把Python代码粘贴进编辑器之前,先记住几个硬性条件:只支持Python 3.11,os.systemsubprocessopen读写本地文件等操作统统不允许。第三方库也只开放了numpypandasrequests这几个,其他的一律报错。

回到正题,怎么写才安全?这里有最常用的两种场景。

场景一:直接处理文本,返回加工后的结果。
直接上手:result = {"summary": input['user_input'][:50] + "...", "length": len(input['user_input'])}。注意,最后一行的变量名必须叫result,不要写printreturn,沙箱不认这些。

场景二:上游传入一段JSON字符串,你需要解析它。
比如{"score": 87, "tags": ["A", "B"]}。那就先import json,再data = json.loads(input['user_input']),最后拼出result = {"level": "high" if data["score"] > 80 else "low"}。这里必须强调一句:一定要用try-except把json.loads包裹起来,否则上游提供的JSON稍微不规范,整个节点就会直接崩溃,后续流程什么都拿不到。

调试这一步,帮你省掉八成的返工

代码写完后不要急着连接下游,先自己测试一遍。

第一步:点击右上角的「Test」按钮,手动填入一组测试数据,比如{"user_input": "hello world"}。然后查看右侧的「Output」面板,确认它返回的是一个合法的JSON对象。

第二步:仔细检查返回值,必须是纯字典——不能是None,不能是嵌套的类实例,不能包含函数对象。因为下游无论是「LLM」节点还是「条件分支」节点,只认dict类型,其他类型统统不兼容。

第三步:如果你打算向下游传递多个字段,那就全部塞进result字典里。例如result = {"answer": "yes", "confidence": 0.92, "source": "rule_based"}。少写一个key,下游节点就无法获取对应值,到时候排查起来可够你费一番功夫的。

来源:https://www.php.cn/faq/2632659.html?uid=1589237

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。