
# 代码
代码节点是工作流中用于执行自定义代码逻辑的节点。当工作流中需要进行**数据处理、格式转换、数学计算、逻辑判断**等操作，而这些操作用其他节点难以实现或用大模型处理不够准确时，可以通过代码节点编写代码来完成。代码执行的结果是确定的，相同的输入必然得到相同的输出。对于计算、格式转换等任务，代码比大模型更准确、更快、且不消耗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格式。  - 执行异常流程：节点发生异常后，工作流不会中断，而是会执行异常处理流程。用户可以在该运行异常的节点后新增节点，并为新增的异常分支配置相应的处理流程。   |
   
 #### Python 3.9代码要求
支持Python 3.9版本及其标准库，并支持如下的非标准库，可直接在Python函数代码中声明使用。
表4Python运行时集成的非标准库 
| 模块        | 功能         | 版本号    |
|:---|:---|:---|
| 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  |
   
示例如下：
```
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对应。
  
- 编写约束：
  ```
  入口函数名必须是main，接收一个dict参数，返回一个dict
  直接返回字典即可，无需json.dumps()转换
  即使只有一个输出字段，也必须以字典形式返回
   ×  return "hello"
   √  return {"message": "hello"}
  ```
  
- **不支持的命令：**
  系统命令执行：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。
  
#### 验证代码节点配置
代码节点配置完成后，建议通过以下步骤验证配置是否正确：
单击节点中的测试图标，在测试面板中为每个输入参数填写测试值，单击"开始运行"。等待输出结果，确认各输出参数的值和类型与配置一致。
验证通过的标准：输出参数的名称、类型和值均与预期一致，且无语法错误或运行时异常。
图1验证代码节点配置   
![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002717390173.png "点击放大")
#### 相关操作
- 单击节点名称，可修改节点名称。
- 单击![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002717549909.png)图标，可对节点进行重命名、复制、删除或更换节点；也可以将节点连接到结束节点。
- 单击![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002687790412.png)图标，可对节点进行测试。
- 单击名称下面的节点说明，可修改节点的描述信息。
- 单击![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002717549911.png)图标，可查看文档信息。
 
#### 常见问题
- **代码执行后报SyntaxError**
  Python代码的常见语法问题包括：缩进不统一（混用了空格和Tab）、括号或引号未成对闭合、中英文符号混用（如使用了中文冒号 ： 或中文括号 （））。
  
- **import第三方库报ModuleNotFoundError**
  默认情况下仅支持内置标准库，不支持安装和使用第三方库。
  
- **下游节点获取不到代码节点的输出值**
  最常见的原因是输出区域配置的参数名与代码return中的key不一致。两者必须完全匹配，包括大小写。例如代码返回了totalPrice，输出区域配置成totalprice就会取不到值。
  
- **下游节点获取到的值类型与预期不符**
  检查输出区域配置的参数类型是否与代码实际返回的数据类型一致。例如代码返回了数字100，但输出参数类型配置为String，下游节点拿到的就是字符串"100"而非数字。
  
 
