跳到主要内容

脚本执行节点

脚本执行节点用于在工作流中运行自定义脚本,支持使用 Python、JavaScript 等语言来处理、转换或生成流程变量,从而实现灵活的数据处理能力。

节点示意图

一、应用场景

脚本执行节点可广泛应用于以下场景:

  • 数据解析:解析复杂嵌套结构的 JSON,对结构化或非结构化数据进行清洗和抽取。
  • 计算统计:实现自定义逻辑的数值计算、统计汇总等。
  • 变量处理:合并多个变量,或将变量进行统一格式化处理。

二、添加脚本执行节点

点击前一节点的,选中脚本执行节点,添加即可

三、节点配置详解

选中添加的脚本执行节点,即可详细配置此节点

1. 输入变量配置

在节点右侧配置面板中,可以设置该脚本节点的输入变量:

  • 左侧输入框:填写变量名;
  • 右侧下拉框:选择变量来源节点,变量必须来自当前节点之前的节点,不能引用后续或并行节点。
输入变量配置示意

2. 选择与编写脚本

脚本节点支持多种脚本语言,包括:

  • JavaScript(JS)
  • Python
  • Groovy
  • Kotlin(暂不支持)
  • Aviator
脚本语言选择

脚本格式要求:

  • JS/Groovy/Kotlin:需实现一个名为 main(params) 的主函数,返回一个对象;
  • Python/Aviator:可直接书写代码,通过设置变量 resp = {...} 来返回结果。

3. 输出变量配置

脚本节点返回的结果为一个对象,其中每个字段都可以作为输出变量使用。

例如:若返回结果为:{"result": "处理后的文本"}

则在输出变量中配置变量名 result,即可获取对应值用于下游节点使用。

四、脚本示例

脚本会接收一个输入对象,该对象包含了所有输入变量,处理完成后返回一个对象,该对象包含了所有输出变量.

1. JavaScript 示例

function main(params) {
if (params.llmRes) {
let resLength = params.llmRes.length;
params.llmRes = params.llmRes + '\n字数:' + resLength;
}
return {
result: params.llmRes,
};
}

2. Groovy 示例

def main(params) {
if (params.llmRes) {
def resLength = params.llmRes.length()
params.llmRes += "\n字数:" + resLength
}
return [result: params.llmRes]
}

3. Kotlin 示例(暂不支持)

fun main(params: MutableMap<String, Any?>): Map<String, Any?> {
if (params["llmRes"] is String) {
val llmRes = params["llmRes"] as String
val resLength = llmRes.length
params["llmRes"] = "$llmRes\n字数1:$resLength"
}
return mapOf("result" to params["llmRes"])
}

4. Aviator 示例

let llmRes = params.llmRes;
let resLength = length(llmRes);
let res = llmRes + "\n字数1:" + resLength;
let resp = seq.map("result", res);

5. Python 示例

if isinstance(params.get("llmRes"), basestring):
llm_res = params["llmRes"]
res_length = len(llm_res)
params["llmRes"] = u"{}\n字数1:{}".format(llm_res, res_length)

resp = {"result": params["llmRes"]}

注意 python解析执行依赖Jython环境,不安装部署启动会报错(IDEA里不会报错),环境安装说明如下

一、下载安装Jython Installer

https://www.jython.org/download(opens new window)

二、Springboot启动类添加代码

Properties props = new Properties();
Properties preprops = System.getProperties();
props.put("python.home", "jython安装目录");
PythonInterpreter.initialize (preprops, props, new String[]{});

四、注意事项

由于jskotlin脚本的执行环境依赖比较大,默认不会引入依赖包; 当流程中使用了上述两个脚本节点时系统会提示引入依赖包。 请按需手动引入: js:

<dependency>
<groupId>com.yomahub</groupId>
<artifactId>liteflow-script-graaljs</artifactId>
<version>2.12.4.1</version>
</dependency>

kotlin:

<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-scripting-jsr223</artifactId>
<version>1.6.21</version>
</dependency>