用 Python 编写 Dify 工作流脚本(小技巧)_dify python
Dify 作为一个支持自定义 Python 工作流的智能体平台,给了我们极大的灵活性。但很多人在写 Dify 脚本时,常常忽略了其中最常用、最实用的一些 Python 技巧。本文从我实际使用的几个脚本中,提炼出一些非常值得掌握的核心知识点。
1. json.loads与嵌套结构提取
Dify1.6 中传入的参数很多都是 JSON 字符串(不是Object,因为输入不支持),需要先用 json.loads() 解析:
import jsondef main(request: str) -> dict: data = json.loads(request) value = data.get(\'some_field\', \'default\') sublist = data.get(\'nested\', {}).get(\'list\', []) return {\"value\": value, \"sublist\": sublist}
技巧点:
-
dict.get() 支持默认值,避免 KeyError;
-
嵌套访问时用 .get(..., {}) 链式访问更安全;
-
字段缺失时自动降级为默认值,是写健壮代码的基本功。
2. 批量提取列表中的字段
当传入参数是一个包含多个对象的列表时,通常我们只关心每个对象中的一个字段。这时可以用一个简单的 for 循环快速提取:
def main(arg1: str, arg2: list) -> dict: arg1 = json.loads(arg1).get(\"output\") token_list = [item.get(\"output\") for item in json.loads(arg2)] return { \"result\": { \"text\": arg1, \"tokens\": token_list } }
技巧点:
-
使用列表推导式比传统 for 更简洁;
-
处理 Dify 中多个节点输出(如 list[{\"output\":...}])时非常高效。
3. 多个 dict 合并的常见做法
你可能需要把多个字典合并成一个结构统一的输出,比如不同规则的匹配结果。用 {**a, **b, **c} 的形式可以快速实现:
def main(a, b, c) -> dict: a = json.loads(a) b = json.loads(b) c = json.loads(c) result = {**a, **b, **c} return {\"merged\": result}
或者更实际一点:
rule_a = {\"rule_a\": [1, 2]}rule_b = {\"rule_b\": [3, 4]}rule_c = {\"rule_c\": [5]}merged = {**rule_a, **rule_b, **rule_c}
技巧点:
-
{**dict1, **dict2} 是 3.5+ 的语法,比 update() 更干净;
-
适合结构扁平的场景,不建议用于深层嵌套的 merge。
4. 从多个输入中整理成统一结构
当你处理多个输入对象,每个都返回结构类似的内容时,可以统一封装成一个最终结果:
def main(text, rule1, rule2, vec_result) -> dict: rule_matches = { \"rule1\": json.loads(rule1).get(\"match\", []), \"rule2\": json.loads(rule2).get(\"match\", []) } result = { \"text\": text, \"rules\": rule_matches, \"vector\": json.loads(vec_result).get(\"similar\", []) } return {\"result\": result}
技巧点:
-
用 .get(..., []) 处理可能缺失字段;
-
返回结构清晰、有层次,有助于调试和前端渲染。
总结
在 Dify 或任何支持 Python 的工作流平台中,掌握以下基础技能尤为重要:
技巧
示例
用途
json.loads
json.loads(str)
解析传入字符串参数
.get()
dict.get(\"key\", default)
安全提取字段
列表推导
[x.get(\"a\") for x in list]
从列表中批量提取字段
多 dict 合并
{**a, **b}
聚合结果
结构清晰的 return
return {\"result\": ...}
提高可读性
这些技巧虽然基础,但在构建实际智能体时非常常用,建议每位使用 Dify 或编写轻量脚本的人都熟练掌握。
如果你对这类“工作流+Python”类型的技巧感兴趣,欢迎关注我后续的系列文章,也欢迎分享你的实践经验!


