Skip to content

Code Block

在安全沙箱中执行 JavaScript / TypeScript 代码,可引用其他 Block 的变量进行数据处理。

功能说明

Code Block 允许用户在工作流中嵌入自定义代码并执行。代码在服务端的安全沙箱(sandbox)中运行,支持 JavaScript 和 TypeScript,并可通过 {{变量名}} 语法引用其他 Block 的输出变量。

Code Block 支持两种代码来源:

  • 编辑器模式(editor):代码直接在编辑器中编写,支持 mention 变量引用。
  • 变量模式(variable):代码从其他 Block 的变量中获取(如 Generation Block 生成的代码)。

使用场景

  1. 数据处理:对 AI 生成的结果进行过滤、排序、格式转换等自定义处理。
  2. 逻辑计算:执行数学计算、字符串处理、数组操作等逻辑运算,将结果传给后续 Block。
  3. API 调用:通过 fetch 调用外部 API,获取数据或推送结果。

配置参数

属性名类型说明默认值
idstring节点唯一标识(自动生成)
namestring节点名称(自动生成,可自定义)
languagestring编程语言(javascript / typescript'javascript'
executableboolean是否可执行(false 时仅做变量替换,不执行)true
continueOnErrorboolean代码出错时是否继续执行后续 Blockfalse
nodeModulesstring[]声明依赖的 Node.js 模块[]
appsstring[]声明依赖的应用程序[]
codeSource'editor' | 'variable'代码来源模式'editor'
codeVariableobject | null变量来源配置(仅 codeSource: 'variable' 时)null

可执行语言

仅以下语言的代码会被实际执行:

  • javascript / js
  • typescript / ts

其他语言(如 pythonhtml)的代码块仅做变量替换后原样返回,不会执行。

输出变量

变量名类型说明
outputany主输出变量,代码的返回值(最后一个表达式的值或显式 return)
__default__any等同于 output
metadataobject运行时元信息(如执行耗时等)
logsarray控制台日志记录(console.log 等输出)
errorsarray运行时错误记录

主输出变量名是 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 配置中声明后即可使用以下预装模块:

模块用途
axiosHTTP 请求(沙箱中唯一的网络请求方式
mcpMCP 集成调用
lodash通用工具函数库
uuidUUID 生成
dayjs轻量日期处理
moment日期处理
date-fns函数式日期工具
form-data构造 multipart/form-data 请求

沙箱网络限制

沙箱环境不支持原生 fetch 和其他网络 API。如需发起 HTTP 请求,必须在 nodeModules 中声明 axios 并通过它进行调用。

运行时约束

  • 适用文档类型:所有文档类型。
  • 可插入上下文:文档顶层及容器 Block 内部。
  • 执行超时:默认 10 秒。如果代码在超时内未完成,将被强制终止。
  • 沙箱环境:代码运行在 Node.js 沙箱中,无法直接访问文件系统或服务器进程。

注意事项

  • executablefalse 时,代码不会被执行,仅做变量替换后返回原始代码文本。此时不产出 outputlogserrors 等变量。
  • continueOnErrortrue 时,即使代码抛出异常,工作流也会继续执行后续 Block(错误信息记录在 errors 变量中)。
  • nodeModules 中声明的模块必须是平台预装的受支持模块。使用未受支持或未安装的模块将导致执行失败。
  • TypeScript 代码会在执行前自动转译为 JavaScript(ES2022 目标)。转译失败将记录错误。
  • 代码中的 {{变量名}} 会在执行前被替换为实际值的字面量。
  • 变量模式(codeSource: 'variable')下,代码从变量获取,不做 mention 变量替换,但仍可通过运行时环境访问上下文。
  • 用户代码错误会返回清洗后的错误信息(包含行号),系统内部错误只返回友好提示,不暴露服务器路径。

AI Workflow Editor