LangChat 代码执行引擎 (Sandbox) 设计文档
一、模块定位
Sandbox 模块为 LangChat 平台提供安全的代码执行能力,支持在工作流节点中运行用户编写的 JavaScript、Python、Shell、Go、Java、TypeScript 代码。模块位于langchat-common-ai 的 cn.langchat.common.ai.sandbox 包中,作为核心基础能力供上层业务(如工作流引擎)调用。
二、架构设计
2.1 分层架构
采用模板方法 + 工厂模式,将代码执行的调度层和执行层解耦。AbstractCodeExecutor 基类统一处理校验、计时和异常兜底,子类只关注实际执行逻辑。
2.2 目录结构
2.3 类层次关系
2.4 核心接口
2.5 模板方法流程 (AbstractCodeExecutor)
2.6 使用示例
三、执行器对比
| 特性 | GraalVM Polyglot | Local CommandLine | OpenSandbox |
|---|---|---|---|
| 支持语言 | JavaScript, Python | Shell | JS, Python, Shell, Go, Java, TypeScript |
| 隔离级别 | GraalVM 沙箱 | 无隔离 | Docker 容器级 |
| main 函数要求 | JS/Python 必须 | 无 | 无 |
| 第三方库支持 | 仅标准库 | 宿主机已安装的 | 支持 pip/npm/go get 等 |
| 超时控制 | Future + TimeoutException | Process.waitFor | 服务端控制 |
| 代码长度限制 | 100,000 字符 | 50,000 字符 | 100,000 字符 |
| 网络请求 | 不支持 | 完全支持 (curl) | 取决于容器配置 |
| 部署依赖 | GraalVM SDK (JVM 内嵌) | bash | 独立 OpenSandbox 服务 |
四、语言支持矩阵
| 语言 | 枚举值 | 标识/简称 | 默认引擎 | OpenSandbox |
|---|---|---|---|---|
| JavaScript | JAVASCRIPT | javascript / js | GraalVM | 可选 |
| Python | PYTHON | python / py | GraalVM | 可选 |
| Shell | SHELL | shell / sh | Local | 可选 |
| Go | GO | go / go | — | 必须 |
| Java | JAVA | java / java | — | 必须 |
| TypeScript | TYPESCRIPT | typescript / ts | — | 必须 |
五、核心依赖
5.1 GraalVM Polyglot 引擎
5.2 本地命令行引擎
5.3 阿里 OpenSandbox SDK
六、已知限制
6.1 GraalVM 引擎
- 不支持 C 扩展 Python 库(numpy、pandas 等)
- 首次执行冷启动需 1-3 秒
- 每个 Context 占用 50-100MB 内存
6.2 本地命令行
- 无沙箱隔离,可执行任意系统命令
- Shell 语法依赖宿主机平台
6.3 OpenSandbox
- 需要独立部署 OpenSandbox 服务
- 每次执行需创建/销毁容器,有额外延迟
- 依赖网络连通性

