> 技术文档 > 用 Python 编写 Dify 工作流脚本(小技巧)_dify python

用 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”类型的技巧感兴趣,欢迎关注我后续的系列文章,也欢迎分享你的实践经验!