Code Block
在安全沙箱中执行 JavaScript / TypeScript 代码,可引用其他 Block 的变量进行数据处理。
功能说明
Code Block 允许用户在工作流中嵌入自定义代码并执行。代码在服务端的安全沙箱(sandbox)中运行,支持 JavaScript 和 TypeScript,并可通过 {{变量名}} 语法引用其他 Block 的输出变量。
Code Block 支持两种代码来源:
- 编辑器模式(editor):代码直接在编辑器中编写,支持 mention 变量引用。
- 变量模式(variable):代码从其他 Block 的变量中获取(如 Generation Block 生成的代码)。
使用场景
- 数据处理:对 AI 生成的结果进行过滤、排序、格式转换等自定义处理。
- 逻辑计算:执行数学计算、字符串处理、数组操作等逻辑运算,将结果传给后续 Block。
- API 调用:通过
fetch调用外部 API,获取数据或推送结果。
配置参数
| 属性名 | 类型 | 说明 | 默认值 |
|---|---|---|---|
id | string | 节点唯一标识(自动生成) | — |
name | string | 节点名称(自动生成,可自定义) | — |
language | string | 编程语言(javascript / typescript) | 'javascript' |
executable | boolean | 是否可执行(false 时仅做变量替换,不执行) | true |
continueOnError | boolean | 代码出错时是否继续执行后续 Block | false |
nodeModules | string[] | 声明依赖的 Node.js 模块 | [] |
apps | string[] | 声明依赖的应用程序 | [] |
codeSource | 'editor' | 'variable' | 代码来源模式 | 'editor' |
codeVariable | object | null | 变量来源配置(仅 codeSource: 'variable' 时) | null |
可执行语言
仅以下语言的代码会被实际执行:
javascript/jstypescript/ts
其他语言(如 python、html)的代码块仅做变量替换后原样返回,不会执行。
输出变量
| 变量名 | 类型 | 说明 |
|---|---|---|
output | any | 主输出变量,代码的返回值(最后一个表达式的值或显式 return) |
__default__ | any | 等同于 output |
metadata | object | 运行时元信息(如执行耗时等) |
logs | array | 控制台日志记录(console.log 等输出) |
errors | array | 运行时错误记录 |
主输出变量名是 output
Code Block 是唯一一个主输出变量名不是 __default__ 的数据 Block。引用代码执行结果时,请使用 {{code_1.output}} 而非 {{code_1}}。
变量仅在代码可执行(executable: true 且为可执行语言)时产出。
引用语法示例:
代码结果:{{code_1.output}}
日志内容:{{code_1.logs}}
错误信息:{{code_1.errors}}logs 和 errors 格式
typescript
// logs 数组中每项的结构
{
level: string // 'log' | 'warn' | 'info' | 'debug'
message: string // 日志内容
timestamp: string // ISO 时间戳
}
// errors 数组中每项的结构
{
level: string // 'error' | 'exception'
message: string // 错误信息
timestamp: string // ISO 时间戳
}使用示例
示例 1:处理 AI 生成的数据
javascript
// 假设 gen_1 输出了一段 CSV 格式的文本
const csv = {{gen_1}}
const rows = csv.split('\n').map(row => row.split(','))
const headers = rows[0]
const data = rows.slice(1).map(row => {
const obj = {}
headers.forEach((h, i) => obj[h.trim()] = row[i]?.trim())
return obj
})
return data示例 2:调用外部 API
javascript
// 注意:沙箱中需使用 axios 模块,不支持原生 fetch
const axios = require('axios')
const response = await axios.post('https://api.example.com/data', {
query: {{ask_1.answer}}
})
return response.data可用模块
在 nodeModules 配置中声明后即可使用以下预装模块:
| 模块 | 用途 |
|---|---|
axios | HTTP 请求(沙箱中唯一的网络请求方式) |
mcp | MCP 集成调用 |
lodash | 通用工具函数库 |
uuid | UUID 生成 |
dayjs | 轻量日期处理 |
moment | 日期处理 |
date-fns | 函数式日期工具 |
form-data | 构造 multipart/form-data 请求 |
沙箱网络限制
沙箱环境不支持原生 fetch 和其他网络 API。如需发起 HTTP 请求,必须在 nodeModules 中声明 axios 并通过它进行调用。
运行时约束
- 适用文档类型:所有文档类型。
- 可插入上下文:文档顶层及容器 Block 内部。
- 执行超时:默认 10 秒。如果代码在超时内未完成,将被强制终止。
- 沙箱环境:代码运行在 Node.js 沙箱中,无法直接访问文件系统或服务器进程。
注意事项
executable为false时,代码不会被执行,仅做变量替换后返回原始代码文本。此时不产出output、logs、errors等变量。continueOnError为true时,即使代码抛出异常,工作流也会继续执行后续 Block(错误信息记录在errors变量中)。nodeModules中声明的模块必须是平台预装的受支持模块。使用未受支持或未安装的模块将导致执行失败。- TypeScript 代码会在执行前自动转译为 JavaScript(ES2022 目标)。转译失败将记录错误。
- 代码中的
{{变量名}}会在执行前被替换为实际值的字面量。 - 变量模式(
codeSource: 'variable')下,代码从变量获取,不做 mention 变量替换,但仍可通过运行时环境访问上下文。 - 用户代码错误会返回清洗后的错误信息(包含行号),系统内部错误只返回友好提示,不暴露服务器路径。