跳到主要内容

代码执行

Open WebUI 在您的对话界面中直接提供了强大的代码执行功能,使您无需离开平台即可将想法转化为切实可行的结果。

核心功能

  • 代码解释器(Code Interpreter)能力:允许模型自主编写并执行 Python 代码,并将其作为回复的一部分。该功能通过 Native (Agentic) 模式中的 execute_code 工具运行 —— 这是目前唯一支持的工具调用模式。虽然针对老旧的 Default 模式存在一个基于 XML 的遗留集成,但不被推荐;新部署均应使用 Native 模式。

  • Python 代码执行:使用 Pyodide 直接在您的浏览器中运行 Python 脚本,或使用 Jupyter 在服务器上运行。无需任何配置即可支持 pandas 和 matplotlib 等流行库。

  • MermaidJS 渲染:使用 MermaidJS 语法创建并可视化流程图、架构图和其他视觉表示,系统会在对话中自动对其进行渲染。

  • 交互式 Artifacts:在对话中直接生成 HTML 网站、SVG 图形和 JavaScript 可视化等丰富内容并进行交互。

  • Open Terminal(开放终端):连接远程 Shell 执行 API 作为工具,以获得完整的系统级访问权限 —— 在隔离的 Docker 容器中运行任意命令、安装软件包以及管理文件。

这些执行能力消除了对话与落地实现之间的鸿沟,让您在与 AI 模型聊天时能够无缝地探索想法、分析数据并创建可视化内容。

选择代码执行后端

Open WebUI 支持多种代码执行后端,每种都适用于不同的使用场景。正确的选择取决于您的实际需求 —— 是轻量级的浏览器端执行、完整的 Python 环境,还是无限制的 Shell 访问。

Pyodide(默认)

Pyodide 通过 WebAssembly 在浏览器中运行 Python。它具有沙箱隔离特性,对多用户环境非常安全,但也有一些限制:

  • 持久化文件存储 —— /mnt/uploads/ 下的虚拟文件系统由 IndexedDB (IDBFS) 提供支持。文件在同一会话的多次代码执行之间持久保存,并在页面重新加载后依然存在。
  • 内置文件浏览器 —— 启用代码解释器(Code Interpreter)后,侧边栏的对话控制面板中会出现一个文件浏览器面板。您可以浏览、预览、上传、下载和删除 Pyodide 文件系统中的文件 —— 无需终端命令行。
  • 用户文件访问 —— 附加到消息的文件在执行代码前会自动放置在 /mnt/uploads/ 中,因此模型(和您的代码)可以直接读取它们。
  • 受限的库支持 —— 仅提供 Python 软件包的一个子集。依赖 C 语言扩展或系统调用的库可能无法运行。
  • 无 Shell 访问 —— 无法运行 Shell 命令、安装软件包或与操作系统(OS)交互。
提示

Pyodide 非常适合用于 文本分析、哈希计算、图表生成、文件处理 以及其他自包含的任务。像 matplotlib 这样的图表库生成 base64 编码的图像,Open WebUI 会自动捕获、作为文件上传,并直接在输出中注入图像链接 —— 因此模型可以直接在对话中显示图表,无需任何额外配置。

仅适用于基础分析

Pyodide 通过 WebAssembly 在浏览器内部运行 Python。AI 无法安装 除了下面列出的少量固定软件包之外的其他第三方库 —— 任何导入了不支持的包的代码都会运行失败。此外,其执行速度也 显著慢于 原生 Python,大型数据集或 CPU 密集型任务可能会触及浏览器内存上限。Pyodide 最适合用于 基础文件分析、简单计算、文本处理和图表生成。对于任何更具挑战性的任务,请改用 Open Terminal,它在 Docker 容器内部提供完整的原生性能和无限制的软件包访问权限。

可用库:micropip, requests, beautifulsoup4, numpy, pandas, matplotlib, seaborn, scikit-learn, scipy, regex, sympy, tiktoken, pytz 以及 Python 标准库。在运行时无法安装其他任何库。

与 Open Terminal 互斥

代码解释器(Code Interpreter)开关与 Open Terminal 开关不能同时激活。激活其中一个将自动关闭另一个 —— 它们的用途相似,但使用不同的执行后端。

Jupyter(遗留)

遗留引擎

Jupyter 现在被视为一个 遗留(Legacy) 的代码执行引擎。对于大多数使用场景,推荐使用 Pyodide 引擎;当您需要完整的服务器端执行时,推荐使用 Open Terminal。Jupyter 支持可能会在未来的版本中弃用。

Jupyter 提供了完整的 Python 环境,几乎可以处理任何任务 —— 文件创建、软件包安装以及复杂的库调用。然而,它在共享部署中存在明显的弊端:

  • 共享环境 —— 所有用户共享同一个 Python 运行时和文件系统。
  • 默认不带沙箱隔离 —— 如果不进行仔细配置,用户可以访问系统资源或读取其他用户的数据。
  • 并非专为多租户设计 —— Jupyter 是为单用户工作流构建的。
注意

如果您正在运行多用户或企业级部署,不推荐使用 Jupyter 作为代码执行后端。Open WebUI 的 Jupyter 集成连接到单个共享实例,没有用户间的隔离。Jupyter 仅最适合用于 单用户、开发或受信用户 的设置。

Open Terminal

Open Terminal 是一个轻量级的 API,用于在 Docker 容器内部远程运行 Shell 命令。它提供了完整的 OS 级访问权限 —— 支持任何语言、任何工具、任何 Shell 命令 —— 并具有容器级的安全隔离。

  • 完整的 Shell 访问 —— 模型可以安装软件包、运行任何语言的脚本、使用系统工具(如 ffmpeg, git, curl 等)。
  • 容器级隔离 —— 在其专属的 Docker 容器中运行,与 Open WebUI 和其他服务隔离。
  • 丰富的预装工具集 —— 官方 Docker 镜像预装了 Python 3.12、数据科学库、构建工具、网络实用工具等。
  • 内置文件浏览器 —— 直接从对话控制面板中浏览、预览、创建、删除、上传和下载文件。
  • 内置多用户模式 —— 单个容器可以通过用户级 Linux 账户隔离服务于多位用户(适用于小团队,不适用于大规模部署)。

有关完整文档,请参阅 Open Terminal 集成指南

Terminals(多租户编排器)

Terminals 是一个多租户编排器,用于为 每位用户预置和管理隔离的 Open Terminal 容器。与 Open Terminal 的单一实例不同,Terminals 是其上的扩展层,负责处理完整的生命周期:容器预置、流量路由、空闲清理和销毁。它需要 企业授权(Enterprise License)

  • 一人一容器 —— 每位用户获得自己专属且隔离的 Open Terminal 容器,拥有独立的文件系统、进程和资源。用户之间不共享内核或进程空间。
  • 自动生命周期管理 —— 容器在首次请求时预置,在配置的空闲超时后停止,并自动被清理。
  • 多种后端支持 —— Docker(每个用户一个容器)、Kubernetes(每个用户一个 Pod + PVC + Service)、Kubernetes Operator(基于 CRD)、本地(开发用的子进程)或静态(代理到单个实例)。
  • 透明路由 —— 所有 Open Terminal API 端点都可在 /terminals/ 下访问。Terminals 根据 X-User-Id 标头将请求路由到正确的用户容器。
  • 企业级支持 —— 支持 PostgreSQL 存储租户状态、针对 Open WebUI 的 JWT 身份验证、审计日志、SIEM Webhook 集成以及加密的 API 密钥存储。
  • 管理仪表板 —— 内置前端,用于管理租户和监控实例。
Alpha 测试软件

Terminals 正在积极开发中,尚未准备好用于生产环境。API、配置和功能可能会在不经通知的情况下发生更改。

授权协议

Terminals 采用的是 Open WebUI 企业授权协议(Open WebUI Enterprise License),而非 MIT 协议。

对比表格

考量因素PyodideJupyter(遗留)Open TerminalTerminals
运行于浏览器(WebAssembly)服务器(Python 内核)服务器(Docker 容器)服务器(编排的容器)
库支持受限的子集完整 Python 生态完整 OS —— 任何语言、工具完整 OS —— 任何语言、工具
Shell 访问❌ 无⚠️ 受限✅ 完整 Shell✅ 完整 Shell
文件持久化✅ IDBFS(在执行和重新加载间保留)✅ 共享文件系统✅ 容器文件系统(直至容器移除)✅ 每位用户的持久卷(Persistent Volumes)
文件浏览器✅ 内置侧边栏面板❌ 无✅ 内置侧边栏面板✅ 内置侧边栏面板
用户文件访问✅ 附件自动放在 /mnt/uploads/❌ 需要手动处理✅ 附件可用✅ 附件可用
隔离性✅ 浏览器沙箱❌ 共享环境✅ 容器级隔离(使用 Docker 时)✅ 完整的“一人一容器”隔离
多用户安全✅ 专为多用户设计⚠️ 未隔离ℹ️ 内置多用户模式(适用于小团队)✅ 每位用户专属容器,带生命周期管理
文件生成✅ 写入 /mnt/uploads/,通过文件浏览器下载✅ 完整支持✅ 完整支持,带上传/下载✅ 完整支持,带上传/下载
配置设置无需(内置)管理员全局配置通过 设置 → 集成 进行原生集成独立服务 + Docker Socket 或 K8s 集群
企业推荐✅ 安全的默认选择❌ 除非进行隔离ℹ️ 最适合小团队✅ 专为多租户企业设计
企业可扩展性✅ 客户端执行,零服务器负载❌ 单个共享实例ℹ️ 单个容器,资源共享✅ 水平可扩展(Docker 或 Kubernetes)
空闲管理不适用不适用不适用(始终运行)✅ 配置超时后自动停止
授权协议MITMITMIT企业协议
This content is for informational purposes only and does not constitute a warranty, guarantee, or contractual commitment. Open WebUI is provided "as is." See your license for applicable terms.