更新时间:2026-09-16 GMT+08:00
分享

代码

代码节点是工作流中用于执行自定义代码逻辑的节点。当工作流中需要进行数据处理、格式转换、数学计算、逻辑判断等操作,而这些操作用其他节点难以实现或用大模型处理不够准确时,可以通过代码节点编写代码来完成。代码执行的结果是确定的,相同的输入必然得到相同的输出。对于计算、格式转换等任务,代码比大模型更准确、更快、且不消耗Token。

代码节点在平台托管的沙箱环境中执行,代码运行时受到超时时间限制(默认900秒,最小0.1秒),且无法访问本地文件系统。支持的库范围见下方Python 3.9代码要求。

数据流转过程:上游节点输出 → 输入参数映射 → args字典传入main函数 → 代码处理 → return字典 → 输出参数映射 → 下游节点获取。

代码节点的典型使用场景如下:

表1 代码节点使用场景

场景

示例

数据格式转换

将上游节点返回的JSON数据提取、重组为下游节点需要的格式。

数学计算

价格计算、折扣计算、数据汇总统计等。

文本处理

正则匹配、字符串拼接、内容截取、编码转换等。

逻辑判断

复杂的条件判断、数据校验、规则匹配等。

数据清洗

去重、过滤、排序、字段映射等。

不推荐使用代码节点的场景:

  • 需要安装使用不支持的外部第三方库(详见Python 3.9代码要求)。
  • 需要长时间运行(超过900秒最大超时限制)。
  • 需要持久化存储状态或访问本地文件系统。

节点选型对比:

当工作流中存在多种节点可实现类似功能时,可参考以下对比进行选型:

表2 节点选型对比

决策维度

代码节点

大模型节点

条件判断节点

执行确定性

确定执行,相同输入相同输出

可能产生不同输出

确定执行

适合任务类型

数据处理、数学计算、格式转换

文本生成、语义理解、内容创作

简单条件分支

Token消耗

不消耗Token

消耗Token

不消耗Token

灵活性

高(可编写任意代码逻辑)

中(依赖Prompt设计)

低(仅支持条件分支)

选型建议:

  • 如果您的场景是精确的数学计算或数据格式转换,推荐使用代码节点。
  • 如果您的场景是需要语义理解或内容生成,推荐使用大模型节点。
  • 如果您的场景是简单的条件判断(如A>B),推荐使用条件判断节点;如果条件逻辑复杂(如多条件组合、正则匹配),推荐使用代码节点。

配置代码节点

代码节点的配置参数说明如下:

表3 代码节点配置参数

参数

说明

输入参数

输入参数用于声明代码中所使用的输入变量,每个输入参数需要和代码中定义的参数保持一致。

参数值可以直接填写一个固定的值,也可以选择引用工作流中上游节点的输出和全局配置的记忆变量。

描述:(可选)用于说明该输入参数的具体含义。

输出参数

输出参数用于定义代码执行完成后向下游传递哪些数据,输出参数的名称和类型必须与代码中返回的键值对严格对应,否则下游节点将无法获取到对应的值。

描述:(可选)用于说明该输出参数的具体含义。

代码

编写代码时不要更改第一行函数定义。

编写Python代码片段,仅支持Python系统库;代码配置示例请参考Python 3.9代码要求。

在代码编辑器的顶部支持选择大模型,智能优化代码。同时支持自动折行、复制和全屏显示、实时代码低错检测(如缺少冒号、多余逗号、缩进等)等功能。

异常处理

支持对节点的异常(如超时、调用失败等情况)进行处理,包括超时时间、重试次数、异常处理方式。

“超时时间”:支持用户配置超时时间,取值范围0.1~900,默认900s。

“重试次数”:支持配置重试次数(不重试、重试1次、重试2次、重试3次),系统默认不重试。

“异常处理方式”:配置异常处理方式。
  • 中断流程:节点发生异常后,直接中断流程,不再运行后续节点。
  • 返回设定内容:节点发生异常后,工作流不会中断,用户可自定义设置需要返回的输出字段内容,必须是输出参数中已定义的字段,且格式为合法的JSON格式。
  • 执行异常流程:节点发生异常后,工作流不会中断,而是会执行异常处理流程。用户可以在该运行异常的节点后新增节点,并为新增的异常分支配置相应的处理流程。

验证代码节点配置

代码节点配置完成后,建议通过以下步骤验证配置是否正确:

单击节点中的测试图标,在测试面板中为每个输入参数填写测试值,单击“开始运行”。等待输出结果,确认各输出参数的值和类型与配置一致。

验证通过的标准:输出参数的名称、类型和值均与预期一致,且无语法错误或运行时异常。

图1 验证代码节点配置

相关操作

  • 单击节点名称,可修改节点名称。
  • 单击图标,可对节点进行重命名、复制、删除或更换节点;也可以将节点连接到结束节点。
  • 单击图标,可对节点进行测试。
  • 单击名称下面的节点说明,可修改节点的描述信息。
  • 单击图标,可查看文档信息。

Python 3.9代码要求

代码节点运行在平台托管的沙箱环境中。为保证沙箱安全与稳定,平台并非支持完整的Python标准库,而是对模块导入、内置函数、对象属性和动态执行能力做了严格限制。编写代码前请务必确认所用能力在允许范围内。

  • 支持的库

    支持Python 3.9标准库中未被禁用的部分,并额外支持以下非标准库,可直接在Python函数代码中声明使用。

    表4 支持的库

    模块

    功能

    版本号

    dateutil

    日期/时间处理

    2.6.0

    httplib2

    httpclient

    0.10.3

    numpy

    数学计算

    1.13.1

    redis

    redis客户端

    2.10.5

    obsclient

    OBS客户端

    -

    smnsdk

    访问SMN服务

    1.0.1

  • 禁止导入的模块

    以下模块在代码节点中禁止导入,导入时会报错(如 ModuleNotFoundError 或安全拦截)。

    表5 禁止导入的模块

    类别

    禁止导入的模块

    进程/系统执行

    subprocess、shutil

    网络请求

    socket、socks、urllib、requests、httpx、aiohttp

    内省/执行逃逸

    importlib、sys、builtins、inspect、types、operator、functools、ctypes、signal、gc、code、codeop、dis、pdb、bdb、traceback

    序列化

    pickle、marshal、shelve、yaml、torch

    文件系统

    tempfile、glob、pathlib

    上述限制用于防止代码访问系统资源、发起网络请求、读写文件或绕过沙箱执行任意代码。如果业务逻辑依赖这些模块,请改用其他节点或调整实现方式。

  • 禁止使用的内置函数

    以下Python内置函数在代码节点中不可调用,调用时会触发安全拦截。

    表6 禁止使用的内置函数

    类别

    禁止使用的内置函数

    内省/执行原语

    getattr、setattr、delattr、hasattr、vars、dir、type、globals、locals、eval、exec、compile、memoryview、breakpoint、exit、quit、input、open、help、build_class

    这些函数可用于动态访问对象属性、执行字符串代码或读写文件,存在逃逸沙箱的风险,因此被统一禁用。请使用明确的属性访问(如obj.attr)和静态代码逻辑替代。

  • 禁止访问的危险属性

    即使通过合法对象,也不允许访问以下属性,访问时会触发安全拦截。

    表7 禁止访问的危险属性

    类别

    禁止访问的属性名

    帧/代码跳板

    gi_frame、gi_code、gi_yieldfrom、gi_running、cr_frame、cr_code、cr_origin、cr_await、cr_running、f_locals、f_globals、f_builtins、f_code、f_back、f_lineno、f_lasti、f_trace、co_consts、co_names、co_code、co_varnames、co_freevars、co_cellvars、co_filename、co_firstlineno、tb_frame、tb_next、tb_lineno、tb_lasti、func_globals、func_code、func_closure、func_defaults、func_dict、func_name、self

    系统调用/进程执行

    system、popen、startfile、execfile、execl、execle、execlp、execlpe、execv、execve、execvp、execvpe、spawnl、spawnle、spawnv、spawnve、fork、kill、waitpid、nice

    文件系统操作

    listdir、remove、rename、unlink、rmdir、mkdir、makedirs、chmod、chown、chdir、chroot、umask、replace、symlink、link

    文件/管道

    open、fdopen、pipe、dup、dup2

    环境变量

    environ

    内省原语(属性访问层)

    getattr、setattr、delattr、hasattr、vars、dir、type、globals、locals、eval、exec、compile、memoryview、breakpoint、exit、quit、input、help

    operator/functools 代理

    attrgetter、itemgetter、partial

    pathlib 文件读取

    read_text、read_bytes、glob、rglob

    os 目录遍历

    walk、scandir

    字符串格式化内省

    format、format_map

    这些属性通常被用于从对象反向获取帧、代码对象、模块全局变量或系统调用入口,进而绕过沙箱限制。代码节点中应完全避免使用。

  • 禁止动态导入

    在AST(抽象语法树)层面,代码节点禁止直接调用__import__,即不能通过__import__('os') 这类方式动态导入模块。所有模块导入必须使用标准的import语句,且只能导入本文档允许的模块。

  • 不支持的命令

    除上述模块、内置函数和属性限制外,以下命令同样不支持:

    • 系统命令执行:system、popen、subprocess、startfile、execl、spawn。
    • 网络请求命令:requests、urllib、httpx、aiohttp、socket、socks。
    • 动态代码执行:eval、exec、compile、importlib、import、execfile。
    • 序列化/反序列化:pickle、marshal、yaml、shelve。
    • 文件操作:open、remove、rename、shutil、listdir、tempfile、glob、unlink。
    • 其他:torch、environ、functools、ast。

    说明:本节与上文“禁止导入的模块”“禁止使用的内置函数”“禁止访问的危险属性”“禁止动态导入”相互补充。若某项能力在上文已列出,以更严格的限制为准。

  • 编写约束
    • 入口函数名必须是 main,接收一个 dict 参数,返回一个 dict。
    • 直接返回字典即可,无需 json.dumps() 转换。
    • 即使只有一个输出字段,也必须以字典形式返回:
      • × return "hello"
      • √ return {"message": "hello"}
    • 返回字典中的 key 必须与代码节点界面配置的“输出参数”名称完全一致(区分大小写),否则下游节点将无法获取到对应的值。
  • 示例
    def main(args: dict) -> dict:
        """
        运行代码节点会调用此函数,请勿对下面的函数名做修改
        :param args: 输入固定为args字典类型,kv为输入参数键值对
        :return: 输出参数为字典类型,kv为输出参数键值对
        """
        ret = {
            "key0": args.get('input', 'default'),
            "key1": "hi"
        }
        return ret
    • 平台通过固定的main函数触发代码执行,函数名不可修改。
    • 输入参数args是一个字典(dict),包含了在代码节点界面配置的所有输入参数,以参数名为key、参数值为value的键值对形式传入。通过 args.get('参数名', '默认值') 读取,建议始终设置默认值,避免参数缺失时报错。
    • 返回值是一个字典(dict),直接return即可,无需做JSON转换。返回字典中的key必须与代码节点界面配置的“输出参数”名称完全一致(区分大小写),否则下游节点将无法获取到对应的值。在代码节点界面的“输出参数”区域配置的参数名,必须与代码return字典中的key对应。

常见问题

  • 代码执行后报SyntaxError

    Python代码的常见语法问题包括:缩进不统一(混用了空格和Tab)、括号或引号未成对闭合、中英文符号混用(如使用了中文冒号 : 或中文括号 ())。

  • import第三方库报ModuleNotFoundError

    默认情况下仅支持内置标准库,不支持安装和使用第三方库。

  • 下游节点获取不到代码节点的输出值

    最常见的原因是输出区域配置的参数名与代码return中的key不一致。两者必须完全匹配,包括大小写。例如代码返回了totalPrice,输出区域配置成totalprice就会取不到值。

  • 下游节点获取到的值类型与预期不符

    检查输出区域配置的参数类型是否与代码实际返回的数据类型一致。例如代码返回了数字100,但输出参数类型配置为String,下游节点拿到的就是字符串"100"而非数字。

相关文档