跳到主要内容

代码执行

OPL 数据空间直接在聊天界面中提供强大的代码执行能力,让你无需离开平台就能把想法变成可执行结果。

核心特性

  • Code Interpreter 能力:允许模型在响应过程中自主编写并执行 Python 代码。在 Native(Agentic)Mode 下通过 execute_code 工具运行,这也是当前唯一受支持的工具调用模式。旧版 Default Mode 曾有基于 XML 的集成,但不再受支持,新部署应使用 Native Mode。
  • Python 代码执行:可通过 Pyodide 在浏览器中运行 Python,或通过 Jupyter 在服务器上执行。支持 pandasmatplotlib 等常用库,几乎无需额外准备。
  • MermaidJS 渲染:可以直接在聊天中生成并渲染流程图、关系图、饼图等 MermaidJS 图表。
  • Interactive Artifacts:可在对话中生成和交互 HTML 页面、SVG 图形、JavaScript 可视化等富内容。
  • Open Terminal:可把远程 shell 执行 API 作为工具接入,实现完整的系统级访问,例如执行任意命令、安装包、管理隔离容器中的文件。

这些能力把“对话”和“实现”之间的距离显著缩短,让你在和模型聊天时就能完成数据分析、可视化、原型生成和思路验证。

如何选择代码执行后端

OPL 数据空间支持多个代码执行后端,适合不同场景。你需要根据需求选择:轻量浏览器执行、完整 Python 环境,还是不受限的 shell 访问。

Pyodide(默认)

Pyodide 通过 WebAssembly 在浏览器中运行 Python。它具有沙箱隔离,适合多用户环境,但也存在一些约束:

  • 持久化文件存储:虚拟文件系统 /mnt/uploads/ 由 IndexedDB(IDBFS)支持,文件可在同一会话的多次执行间保留,也能在刷新页面后继续存在。
  • 内建文件浏览器:启用 Code Interpreter 后,聊天控制侧栏会出现文件浏览器面板,支持浏览、预览、上传、下载和删除文件。
  • 用户文件访问:聊天中上传的文件会在代码执行前自动放入 /mnt/uploads/,模型和你的代码都可直接读取。
  • 库支持有限:仅提供部分 Python 包。依赖 C 扩展或系统调用的库通常不可用。
  • 无 shell 访问:不能运行 shell 命令、安装额外系统包,也不能直接访问操作系统。
提示

Pyodide 很适合文本分析、哈希计算、图表生成、文件处理等自包含任务。像 matplotlib 这类图表库会输出 base64 编码图片, OPL 数据空间会自动捕获、上传并注入图片链接,因此模型无需额外配置就能在聊天中直接显示图表。

最适合基础分析

Pyodide 在浏览器中通过 WebAssembly 运行 Python。AI 无法安装超出内建清单之外的额外库,导入不受支持的包会直接失败。执行速度也明显慢于原生 Python,大数据集或高 CPU 任务可能触发浏览器内存限制。Pyodide 最适合基础文件分析、简单计算、文本处理和图表生成。如果任务更重,应改用 Open Terminal,它提供原生性能和不受限的包访问能力。

当前可用库包括:micropiprequestsbeautifulsoup4numpypandasmatplotlibseabornscikit-learnscipyregexsympytiktokenpytz,以及 Python 标准库。运行时不能安装其他库。

与 Open Terminal 互斥

Code Interpreter 开关和 Open Terminal 开关不能同时开启。启用其中一个会自动关闭另一个,因为它们承担的是相似职责,但使用的是不同执行后端。

Jupyter(旧版)

Legacy Engine

Jupyter 现已被视为旧版代码执行引擎。大多数场景推荐使用 Pyodide;需要完整服务端执行能力时推荐使用 Open Terminal。未来版本中 Jupyter 支持可能会被废弃。

Jupyter 提供完整 Python 环境,几乎可以处理所有任务,包括创建文件、安装包和使用复杂库。但它在共享部署中存在明显问题:

  • 共享环境:所有用户共享同一 Python runtime 和文件系统。
  • 默认不隔离:如果没有谨慎配置,用户可能访问系统资源或其他用户数据。
  • 并非为多租户设计:Jupyter 原本更适合单用户工作流。
注意

如果你运行的是多用户或组织化部署,不推荐把 Jupyter 作为代码执行后端。 OPL 数据空间的 Jupyter 集成连接到的是单个共享实例,没有按用户隔离。Jupyter 更适合单用户、开发环境或受信任用户场景。

Open Terminal

Open Terminal 是一个轻量 API,用于在 Docker 容器中远程执行 shell 命令。它提供完整的系统级访问能力,可以运行任意语言、任意工具和 shell 命令,并通过容器实现隔离。

  • 完整 shell 访问:模型可以安装包、执行任意语言脚本,使用 ffmpeggitcurl 等系统工具。
  • 容器级隔离:运行在独立 Docker 容器中,与 OPL 数据空间和其他服务隔离。
  • 丰富的预装工具:镜像通常自带 Python 3.12、数据科学库、构建工具、网络工具等。
  • 内建文件浏览器:可在聊天控制面板中浏览、预览、创建、删除、上传和下载文件。
  • 内建多用户模式:单个容器可服务多个用户,并通过 Linux 账户实现隔离;适合小团队,不太适合大规模部署。

完整文档见 Open Terminal integration guide

Terminals(多租户编排层)

Terminals 是一层多租户编排器,用于按用户创建和管理隔离的 Open Terminal 容器。如果说 Open Terminal 是单实例执行层,那么 Terminals 则是面向规模化的生命周期管理层,负责创建、路由、空闲清理和回收。它需要 enterprise license

  • 每用户一个容器:每位用户拥有独立容器、文件系统、进程和资源,不共享 kernel 或进程空间。
  • 自动生命周期管理:首次请求时创建容器,空闲超时后自动停止和清理。
  • 多后端支持:可运行在 Docker、Kubernetes、本地 subprocess,或 static 代理模式。
  • 透明路由:所有 Open Terminal API 都可从 /terminals/ 访问,系统会根据 X-User-Id 路由到正确用户容器。
  • 面向企业:支持 PostgreSQL 保存租户状态、JWT 鉴权、审计日志、SIEM webhook 和加密 API key 存储。
  • 管理面板:提供用于租户管理和实例监控的内建前端。
Alpha Software

Terminals 仍在积极开发中,还不适合生产环境。API、配置和功能都可能随时变化。

License

Terminals 使用的是 OPL 数据空间 Enterprise License,并非 MIT。

对比

考量PyodideJupyter(旧版)Open TerminalTerminals
运行位置浏览器(WebAssembly)服务器(Python kernel)服务器(Docker 容器)服务器(编排容器)
库支持有限子集完整 Python 生态完整 OS 级能力完整 OS 级能力
Shell 访问❌ 无⚠️ 有限✅ 完整✅ 完整
文件持久化✅ IDBFS✅ 共享文件系统✅ 容器文件系统✅ 每用户持久卷
文件浏览器✅ 内建❌ 无✅ 内建✅ 内建
用户文件访问✅ 自动挂载到 /mnt/uploads/❌ 需手动处理✅ 可直接访问✅ 可直接访问
隔离性✅ 浏览器沙箱❌ 共享环境✅ 容器级✅ 每用户容器级
多用户安全性✅ 天然按用户隔离⚠️ 不隔离ℹ️ 小团队可用✅ 真正多租户
文件生成能力✅ 写入 /mnt/uploads/✅ 完整支持✅ 完整支持✅ 完整支持
部署复杂度管理员全局配置原生集成独立服务
组织部署推荐度✅ 安全默认❌ 不推荐ℹ️ 适合小团队✅ 为多租户设计
企业扩展性✅ 客户端侧,无服务端负载❌ 单共享实例ℹ️ 单容器共享资源✅ 可水平扩展
空闲管理N/AN/AN/A✅ 自动停止
许可证MITMITMITEnterprise