执行代码(Python/JS)
执行代码 用于在工作流中执行一段自定义代码,处理标准节点难以覆盖的复杂逻辑或数据转换。它的定位是「兜底处理」,不建议把过重的业务逻辑都堆进代码节点,否则工作流本身就失去了编排意义。节点的输出需按平台规范以 JSON 形式返回,且字段名要与节点输出配置一致,否则无法正确解析到对应变量。
指令标识:Code
指令类型:执行代码指令
指令描述:执行用户输入的代码,实现复杂的逻辑和数据处理
先选使用方式
Section titled “先选使用方式”工作流支持「可视化编排」和「代码编排」两种创建方式。执行代码 节点本身就是写脚本的入口:在可视化里通过表单设置输入/输出参数并粘贴脚本,也可以在代码编排中按相同规范编写。
| 方式 | 怎么用 | 适合人群 |
|---|---|---|
| 可视化编排(推荐先学) | 拖入「执行代码」节点,配置输入参数、粘贴脚本、定义输出参数 | 大多数用户,零代码搭建流程、只在节点内写少量脚本 |
| 代码编排(Python) | 按 def main(params) 规范编写脚本,通过 params 取入参、返回字典作为输出 | 熟悉 Python、需要处理复杂逻辑的用户 |
什么时候用?
Section titled “什么时候用?”- 标准节点无法覆盖的特殊业务逻辑,需要用代码兜底实现。
- 对输入数据做复杂的转换、清洗、格式化(如日期计算、字符串处理)。
- 实现特定的算法或数值计算。
- 对参数做预处理、格式校验、数据验证等前置操作。
- 入口函数固定为
main,且必须含有一个形参(通常命名为params)。 - 通过
params.get("参数名")获取节点配置的输入参数。 - 返回值必须是字典(对象),键名要与「输出参数」配置完全一致。
- 仅能使用平台预置的 Python 包(见下方列表),未列出的包会导致执行失败。
- 避免编写耗时过长或死循环的代码,否则会因超时导致节点失败。
可视化编排:从 0 到跑通
Section titled “可视化编排:从 0 到跑通”下面用一个常见场景演示:计算两个整数的最大公约数并输出 result。按 4 步即可跑起来:
- 在工作流画布中添加 执行代码 指令。
- 在 输入参数 中声明
a、b两个参数,并设置其值(可引用上游节点变量)。 - 在脚本编辑区填写入口函数:
def main(params): a = int(params.get("a")) b = int(params.get("b")) while b != 0: a, b = b, a % b return {"result": a}- 在 输出参数 中添加
result,运行后即可在后续节点引用result。
输入参数用于向脚本传递动态数据,在节点表单中声明后,脚本里通过 params.get("参数名") 读取。
| 界面名称 | 代码属性名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
| 输入参数 | inputList | Array | 否 | - | 传递给脚本的输入参数列表,每项包含名称、类型、值(值可为固定值或引用上游变量)。 |
| 脚本 | script | String | 是 | - | 自定义代码内容,入口函数必须为 main(params),并以字典形式返回结果。 |
输出参数由开发者自行定义,脚本需以字典形式返回,一级字段名要与节点配置保持一致。
| 界面名称 | 代码属性名 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| 将结果保存至 | outKey | JSON | 否 | 脚本返回的结果对象,按返回字典的字段映射到输出变量。 |
平台预置的 Python 包
指令并不支持所有的 Python 包,以下是目前支持的部分常用包和对应版本号:
| 包名 | 版本号 |
|---|---|
| requests | 2.32.3 |
| pathlib | 1.0.1 |
| pandas | 2.0.3 |
| beautifulsoup4 | 4.13.3 |
| urllib3 | 1.26.20 |
| werkzeug | 3.0.6 |
| jinja2 | 3.0.3 |
| jsonschema | 4.23.0 |
| numpy | 1.24.4 |
| matplotlib | 3.7.5 |
| seaborn | 0.13.2 |
| scikit-learn | 1.3.2 |
| flask | 3.0.3 |
| qrcode | 8.2 |
- 节点运行状态为成功,未触发超时或未捕获异常。
- 脚本返回的字典字段名与「输出参数」配置一致。
- 后续节点能正确引用脚本输出的变量。
| 现象 / 报错原文 | 可能原因 | 处理建议 |
|---|---|---|
| 提示找不到入口函数 | 未使用 def main(params) 作为入口 | 确认入口函数名为 main 且含一个形参 |
| 输出变量取不到值 | 返回字典的键名与输出参数不一致 | 让返回字典的一级字段名与输出参数配置完全一致 |
| 报缺少模块 / 导入失败 | 使用了未预置的 Python 包 | 仅使用平台预置包,替换或移除未支持的依赖 |
| 节点执行超时 | 代码耗时过长或存在死循环 | 优化算法、避免死循环,控制单次执行时长 |
| 节点报未捕获异常 | 代码内部抛出异常未处理 | 在脚本中做好 try/except 异常处理 |
Python 代码编排
Section titled “Python 代码编排”代码编排以 Python 为主。运行上下文由代码编排模板创建,脚本只需关注 main(params) 入口与返回结果本身。
入口函数固定为 main(params),通过 params 读取入参,返回字典作为输出:
def main(params): obj = { "a": params.get("a"), "b": params.get("b"), } return obj也可以在脚本里完成更复杂的处理后返回结果:
def main(params): a = int(params.get("a")) b = int(params.get("b")) while b != 0: a, b = b, a % b # 返回字典的键名需与输出参数配置一致 return {"result": a}可视化表单里的「输入参数」「脚本」「将结果保存至」分别对应 inputList、script、outKey。
Q1:入口函数必须怎么写?
Section titled “Q1:入口函数必须怎么写?”A: 入口函数必须是 def main(params),且含有一个形参,平台从该函数取得执行结果。
Q2:如何获取入参、如何返回输出?
Section titled “Q2:如何获取入参、如何返回输出?”A: 用 params.get("参数名") 获取入参;必须返回字典,如 {"result": value},且键名要与输出参数配置完全一致。
Q3:可以用哪些 Python 包?
Section titled “Q3:可以用哪些 Python 包?”A: 仅支持平台预置的包及版本,使用未列出的包会导致执行失败。
Q4:代码执行有时间限制吗?
Section titled “Q4:代码执行有时间限制吗?”A: 有。请避免耗时过长或死循环的代码,否则会因超时导致节点失败;建议在代码中做好异常处理。