工作流/业务逻辑节点/代码节点
代码节点
更新于: 2026-06-24 15:44:40
代码节点支持通过编写代码来生成返回值。扣子编程支持在代码节点内使用 IDE 工具,编写自定义代码逻辑,来处理输入参数并返回响应结果。
说明
扣子编程于2025年9月16日对工作流的代码节点服务进行了升级,发布前请试运行进行验证。
代码节点的配置参数说明如下:
|
配置 |
说明 |
|---|---|
|
输入 |
声明代码中需要使用的变量。添加输入参数时需要设置参数名和变量值,其中变量值支持设置为固定值或引用上游节点的输出参数。 说明 在代码中引用输入参数时,直接通过 params[‘input’] 取值即可。 |
|
代码: |
代码节点中需要执行的代码片段,你可以直接编写。
支持 JavaScript 和 Python 两种语言。详细说明可参考开发语言。 |
|
输出 |
代码运行成功后,输出的参数。你可以根据实际需求,在输出结构中只保留必要的参数。 说明 确保此处定义的参数名、类型与代码的 return 对象完全一致。以代码节点默认提供的代码为例,输出的参数与代码中定义的 return 对象完全一致。 |
注意
默认情况下,节点运行超时、运行异常时,工作流会中断,工作流调试界面或 API 中会返回错误信息。你也可以手动设置节点运行超时等异常情况下的处理方式,例如超时时间、是否重试、是否跳转异常分支等。
|
异常处理设置 |
说明 |
|---|---|
|
超时时间 |
超时时间指节点运行的最大耗时,如果超过此时长,则判断为节点运行超时。 |
|
重试次数 |
节点运行超时或异常时,默认不重试,你也可以设置为重试 1 次。 |
|
异常处理方式 |
节点运行超时或异常时,默认中断工作流。你也可以手动修改此节点的异常处理方式:
|
代码节点支持 JavaScript 和 Python 两种语言。
支持 V8 引擎的 11.3.244.8 版本(对应 Node.js 20.3.1 版本),并兼容 ECMAScript 2022 语法。
代码 IDE 支持 TypeScript,提供静态语言的编码体验。
在 JavaScript 中,仅内置了两个三方依赖库:
dayjs(版本 1.8.36)lodash(版本 4.17.20) 。JavaScript 运行时遵循 WinterCG 规范,并支持一系列 Web API,包括:
atob()、btoa()、console、setTimeout()、clearTimeout()、structuredClone()、URL、URLSearchParams、AbortController、AbortSignal、TextEncoder、TextDecoderWebStreamsWebCrypto(算法仅支持 AES、HMAC、SHA)JavaScript 的三方依赖库示例代码如下:
//only dayjs and lodash are allowed
import dayjs from 'dayjs';
import _ from 'lodash';
async function main({ params }: Args): Promise<Output> {
// get input params by this way
return {
content: params.name
};
}
基于 Python 3.11.3 的标准库,大多数模块都能正常运行。不支持的模块包括 curses、dbm、ensurepip、fcntl、grp、idlelib、lib2to3、msvcrt、pwd、resource、syslog、termios、tkinter、turtle.py、turtledemo、venv、winreg、winsound、multiprocessing、threading、sockets、pty 和 tty。
在 Python 环境中,仅内置了两个第三方依赖库:requests_async 和 numpy。其中,requests_async 与 requests 类似,但在使用时需要搭配 await。
说明
requests_async 、numpy 以外的第三方依赖库。time.sleep() 方法由于是阻塞调用,会对代码执行性能产生影响,因此推荐使用异步版本的 asyncio.sleep() 来替代。示例如下:
import requests_async as requests
async def main(args: Args) -> Output:
# you can get url by this way
url = args.params['url']
response = await requests.get(url)
ret = {
'code': response.status_code,
'res': response.text,
}
return ret
扣子编程提供了网页版代码 IDE 环境供你使用,无需考虑代码部署等问题,只要关注代码逻辑即可。
在节点内的代码区域,单击在IDE中编辑,可通过代码 IDE 编辑和调试代码。
如果你已经为代码节点配置好了输入参数,编辑时支持自动补全参数。
试运行代码节点时,填写输入参数,并单击运行。平台会自动执行代码片段,并展示运行结果。运行结果中包括输入参数和输出内容,其中输出内容由原始输出和最终输出组成。
代码节点仅支持引用以下第三方依赖,引入其他依赖的语句不生效。
如果在代码节点中通过函数遍历所有变量,可能会识别到部分系统变量,例如系统变量 tako_bot_userhistory,导致代码节点运行报错。如果需要在代码中使用代码节点定义的输入变量,直接通过 params['input'] 取值即可,无需通过函数遍历。
tako_bot_userhistory 为 String 格式,表示会话中的上下文消息,例如 TAKO_BOT_HISTORY :[{"content":"早上好","name":"小张","role":"user"}]。此系统变量即将下线,如需获取会话中的上下文消息,推荐使用查询消息列表节点节点。
代码节点中,推荐使用 Python 标准库的 asyncio.sleep 函数,time.sleep 函数会阻塞工作流执行、导致触发限流。
asyncio.sleep 函数在异步编程中挂起当前任务、实现非阻塞的延迟,最长可延迟 1 分钟。此函数常用于需要在异步操作之间添加延迟的场景,例如在异步的数据处理中控制处理速率。目前工作流暂不支持异步插件节点,如果下游节点需要使用异步插件的执行结果,可以通过循环节点实现异步等待和结果轮询,其中异步等待由代码节点的 asyncio.sleep 函数实现。
例如以下示例代码表示等待 30 秒: