代码
代码节点是工作流中用于执行自定义代码逻辑的节点。当工作流中需要进行数据处理、格式转换、数学计算、逻辑判断等操作,而这些操作用其他节点难以实现或用大模型处理不够准确时,可以通过代码节点编写代码来完成。代码执行的结果是确定的,相同的输入必然得到相同的输出。对于计算、格式转换等任务,代码比大模型更准确、更快、且不消耗Token。
代码节点的典型使用场景如下:
|
场景 |
示例 |
|---|---|
|
数据格式转换 |
将上游节点返回的JSON数据提取、重组为下游节点需要的格式。 |
|
数学计算 |
价格计算、折扣计算、数据汇总统计等。 |
|
文本处理 |
正则匹配、字符串拼接、内容截取、编码转换等。 |
|
逻辑判断 |
复杂的条件判断、数据校验、规则匹配等。 |
|
数据清洗 |
去重、过滤、排序、字段映射等。 |
|
调用外部接口 |
需要自定义请求逻辑的HTTP调用(FunctionGraph模式)。 |
配置代码节点
代码节点的配置参数说明如下:
|
参数 |
说明 |
|---|---|
|
执行方式 |
本地执行:适用于高性能、低延迟的场景,主要用于执行简单的逻辑判断、文本处理以及JSON数据的封装与解析。该执行模式无需依赖远程服务,所有操作在本地完成,响应速度快,适合对实时性要求较高的任务。在该模式下,代码节点可高效处理数据转换、格式校验、字段提取等操作,确保数据在智能体内部快速流转和处理。 |
|
输入参数 |
输入参数用于声明代码中所适用的输入变量,每个输入参数需要和代码中定义的参数保持一致。 参数值可以直接填写一个固定的值,也可以选择引用工作流中上游节点的输出和全局配置的记忆变量。 |
|
输出参数 |
输出参数用于定义代码执行完成后向下游传递哪些数据,输出参数的名称和类型必须与代码中返回的键值对严格对应。 |
|
代码 |
编写代码时不要更改第一行函数定义。 编写Python代码片段,仅支持Python系统库;代码配置示例请参考Python 3.9代码要求。 在代码编辑器的顶部支持选择大模型,智能优化代码。同时支持自动折行、复制和全屏显示等功能。 |
|
异常处理 |
支持对节点的异常(如超时、调用失败等情况)进行处理,包括超时时间、重试次数、异常处理方式。 “超时时间”:支持用户配置超时时间,取值范围0.1~900,默认900s。 “重试次数”:支持配置重试次数(不重试、重试1次、重试2次、重试3次),系统默认不重试。
“异常处理方式”:配置异常处理方式。
|
Python 3.9代码要求
支持Python 3.9版本及其标准库,并支持如下的非标准库,可直接在Python函数代码中声明使用。
|
模块 |
功能 |
版本号 |
|---|---|---|
|
dateutil |
日期/时间处理 |
2.6.0 |
|
requests |
http库 |
2.7.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"}
常见问题
- 代码执行后报SyntaxError
Python代码的常见语法问题包括:缩进不统一(混用了空格和Tab)、括号或引号未成对闭合、中英文符号混用(如使用了中文冒号 : 或中文括号 ())。
- import第三方库报ModuleNotFoundError
默认情况下仅支持内置标准库,不支持安装和使用第三方库。如果需要第三方库,请单独上传依赖包。
- 使用requests等库发起HTTP请求失败
应使用平台内置的common模块发起HTTP请求,而非自行导入requests等第三方库。用法如下:
// Python示例 import common data = common.httpRequest("https://api.example.com/data", headers, body, "POST") if data.get("code") < 300: return data.get("body") - 下游节点获取不到代码节点的输出值
最常见的原因是输出区域配置的参数名与代码return中的key不一致。两者必须完全匹配,包括大小写。例如代码返回了totalPrice,输出区域配置成totalprice就会取不到值。
- 下游节点获取到的值类型与预期不符
检查输出区域配置的参数类型是否与代码实际返回的数据类型一致。例如代码返回了数字100,但输出参数类型配置为String,下游节点拿到的就是字符串"100"而非数字。