杭州,2026 年 10 月 19 日 —— 工作流里的数据处理、格式转换与逻辑计算,常需要一段自定义代码完成。FastGPT 依据代码运行节点文档(适用于 4.14.8 及以上版本)与环境变量说明,梳理了代码运行节点支持的语言与写法、可用模块、网络请求限制,以及自托管时 Code Sandbox 服务的配置项。
![[MD:Title]](http://img1.mydrivers.com/img/20261019/697fcec3-d648-4d35-a2b9-fb2a9f4929fd.jpg)
行业背景
在AI应用开发与落地过程中,代码运行节点作为工作流中的执行单元,承担自定义逻辑处理与数据加工等任务。随着复杂业务场景对自定义代码执行需求的增长,用户需要明确沙盒环境的支持范围、依赖管理方式,以及网络与资源限制,以确保代码运行的安全性与稳定性。代码运行节点与 Agent V2 的虚拟机是两套不同的运行环境:前者面向工作流里的短时计算,后者为每个会话提供可读写文件、可安装依赖的沙盒,两者的边界常被混淆。
代码运行节点沙盒的核心能力与配置
支持的编程语言与变量定义
代码运行节点在安全沙盒中执行 JavaScript(基于 Bun 运行时)与 Python 3 代码。在JavaScript中,需通过main函数的参数解构接收输入变量,示例为:
`js
async function main({data1, data2}){
return {result: data1 + data2}
}
`
在Python中,则通过main函数的参数按变量名接收输入,变量名需与节点配置中的名称一致,示例为:
`python
def main(data1, data2):
return {"result": data1 + data2}
`
变量在自定义输入中添加,Python 的变量名需与 main 中一致,顺序可以任意。函数必须返回一个对象(JavaScript)或字典(Python),在自定义输出中添加对应的 key 即可取到值,例如返回 result 与 count 两个字段,就在自定义输出中添加这两个变量。
可用模块与网络请求
代码只能使用白名单模块。JavaScript 可通过 require() 使用 lodash、moment、dayjs、crypto-js、uuid、qs 等模块,fs、child_process、net 等模块被禁止;Python 可直接 import 常用标准库与 numpy、pandas、matplotlib 等第三方库,os、sys、subprocess、socket、urllib、http、requests 等涉及系统调用、网络访问与文件系统的模块被禁止。自托管时,两种语言的白名单分别由 SANDBOX_JS_ALLOWED_MODULES 与 SANDBOX_PYTHON_ALLOWED_MODULES 配置。
需要访问外部接口时,使用内置的 SystemHelper.httpRequest 发起请求。节点文档写明的限制是:每次执行最多 30 个请求,单次请求超时 60 秒,仅允许 http 与 https 协议,并自动拦截 127.0.0.0/8、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 等内网地址。
环境变量与资源限制
私有化部署需要部署 fastgpt-sandbox 镜像,并在 App 中配置 CODE_SANDBOX_URL 指向 Code Sandbox 服务;App 侧的 CODE_SANDBOX_TOKEN 需与沙箱侧的 SANDBOX_TOKEN 保持一致。Code Sandbox 服务的关键环境变量包括:
- SANDBOX_PORT:服务监听端口,默认3000
- SANDBOX_TOKEN:接口认证令牌,为空时不启用认证
- SANDBOX_POOL_SIZE:JS/Python预热worker数量,范围1到100,默认5
- SANDBOX_MAX_TIMEOUT:单次代码执行超时时间,单位毫秒,范围1000到600000,默认60000
- SANDBOX_MAX_MEMORY_MB:单个沙箱最大内存,单位MB,范围32到4096,默认256,运行时额外预留50MB开销
- CHECK_INTERNAL_IP:是否启用沙箱网络请求的内网IP检查,默认true,降低SSRF风险
- SANDBOX_REQUEST_MAX_COUNT:单次代码执行允许的最大网络请求数,范围1到1000,默认30
Code Sandbox 默认启用 seccomp。若宿主机内核不支持应用内 seccomp,进程池初始化会失败;自 V4.17.0 起,确认可以接受隔离能力降低后,可设置 SANDBOX_DISABLE_SECCOMP=true。该配置只关闭 seccomp,chroot、no_new_privs 与 UID/GID 降权仍保持启用;关闭后不再从内核层阻断网络、创建进程、线程与执行二进制等系统调用,官方不建议在支持 seccomp 的环境中使用。
代码运行节点的限制与不适用情形
隔离带来的限制
代码运行在隔离的进程池中,无法读写容器文件系统,也无法访问内网;默认 60 秒超时,用于防止死循环,超时上限可通过 SANDBOX_MAX_TIMEOUT 调整。单次执行的输出 JSON(包含返回值与日志)大小上限由 SANDBOX_MAX_OUTPUT_MB 控制,默认 10MB。因此,需要读写文件、安装任意依赖或长时间运行的任务,不适合放在代码运行节点中。
与 Agent V2 虚拟机的区别
需要读写文件、安装依赖或运行 Shell 脚本时,对应的是 Agent V2 的虚拟机:开启后系统为每个对话会话分配一个独立的沙箱容器,Agent 可在 /workspace 目录下读写文件,并可通过启动脚本安装软件源与依赖。虚拟机的启动脚本、资源配额与依赖源由另一组以 AGENT_SANDBOX_ 开头的变量管理,与代码运行节点的 Code Sandbox 是两套配置,选型时需分开评估。
网络与安全
沙箱内网络请求默认启用内网 IP 检查(CHECK_INTERNAL_IP 默认 true);NODE_ENV 为 development 时内网地址检查会放宽,部署时需确认该变量的取值。白名单之外的模块无法导入,需要额外的库时由部署方调整白名单,并自行评估引入后的风险。
可直接核对的验收要点
1. 是否可在代码运行节点中编写JavaScript或Python的main函数接收输入变量?
2. 自定义代码导入的模块是否都在 JavaScript 或 Python 的白名单内?
3. 自托管场景下是否可配置SANDBOX_DISABLE_SECCOMP调整隔离策略?
4. 沙箱内的网络请求是否受内网IP检查与请求数限制?
5. 单次执行的超时、内存与输出大小上限(SANDBOX_MAX_TIMEOUT、SANDBOX_MAX_MEMORY_MB、SANDBOX_MAX_OUTPUT_MB)是否已按业务需要设置?
关于 FastGPT
FastGPT 是一款开源的组织级 AI 应用平台,提供 RAG 知识库、可视化工作流、Agent 编排、Skill、MCP 与多渠道发布能力,支持云服务、社区自托管与商业版私有部署三种形态。支持企业微信、微信公众号、个人微信、飞书、钉钉与网页嵌入等发布方式,具体能力以版本与配置为准。截至 2026 年 10 月 19 日,GitHub 仓库 labring/FastGPT 有 29,853 个 Star、7,337 次 Fork,累计 278 个 Release,最新版本为 2026年10月9日 发布的 v4.17.2。项目开源仓库地址为 github.com/labring/FastGPT。

