Open WebUI: Ollama/OpenAI 兼容的本地 ChatGPT 界面¶
为什么要学 Open WebUI¶
Ollama 让本地运行大语言模型变得简单,但它只提供命令行界面和 API。如果你想要一个类似 ChatGPT 的网页聊天界面来使用本地模型,Open WebUI(原名 Ollama WebUI)是最成熟的开源选择。
| 需求 | 原有方案 | Open WebUI |
|---|---|---|
| 本地模型 Web 界面 | 无 / text-generation-webui | 功能完整的 ChatGPT 风格 UI |
| 多模型切换 | 手动 API 调用 | 下拉选择模型 |
| 对话历史 | 终端记录 | 持久化存储 + 搜索 |
| RAG 知识库 | 自行实现 | 内置文档上传 + RAG |
| 多用户管理 | 无 | 用户注册 + 角色管理 |
| 工具/函数调用 | 自行实现 | 内置 Tools/Functions |
| API 兼容 | 仅 Ollama API | Ollama + OpenAI + 其他 |
Open WebUI 本质上是一个自托管的 ChatGPT 替代品,可以连接本地模型(Ollama)和云端模型(OpenAI/Anthropic 等)。
核心概念¶
白话解释¶
Open WebUI 就是你自己的 ChatGPT 网站。安装后你会得到一个网页: - 左侧是对话列表(类似 ChatGPT 的聊天历史) - 右侧是聊天区域 - 顶部可以选择模型 - 可以上传文件进行 RAG 检索 - 管理员可以管理用户和配置
所有数据都存储在你自己的服务器上,不会发送到任何第三方。
核心概念表¶
| 概念 | 说明 | ChatGPT 等价物 |
|---|---|---|
| Chat | 一次对话会话 | ChatGPT 对话 |
| Model | 可选择的 AI 模型 | GPT-4/GPT-3.5 选择 |
| Modelfile | 自定义模型配置(系统提示词等) | Custom GPT |
| Workspace | 工作区(知识库 + 提示词 + 工具) | ChatGPT 工作区 |
| Document/Collection | 上传的文档和知识库 | ChatGPT 文件上传 |
| RAG | 检索增强生成 | ChatGPT 文件搜索 |
| Tools | 模型可调用的工具/函数 | ChatGPT Actions |
| Functions | 自定义 Python 函数 | ChatGPT Plugins |
| Pipe | 自定义模型管道 | 无 |
| Arena | 模型对比评测 | ChatGPT 模型切换 |
架构¶
┌────────────────────────────────┐
│ 用户浏览器 │
│ (Open WebUI 前端) │
└────────────┬───────────────────┘
│ HTTP
┌────────────▼───────────────────┐
│ Open WebUI 后端 │
│ (Python/FastAPI) │
│ ┌─────────┬──────────┐ │
│ │ SQLite │ ChromaDB │ │
│ │(对话/用户)│ (RAG向量)│ │
│ └─────────┴──────────┘ │
└─────┬──────────────┬──────────┘
│ │
┌─────▼─────┐ ┌─────▼──────────┐
│ Ollama │ │ OpenAI API │
│ (本地模型) │ │ (云端模型) │
│ llama3 │ │ gpt-4o │
│ codellama │ │ claude-3.5 │
│ mistral │ │ (通过兼容API) │
└───────────┘ └────────────────┘
安装配置¶
前置条件¶
- Docker(推荐)或 Python 3.11+
- Ollama(如果要使用本地模型)
方式一:Docker(推荐)¶
# 如果 Ollama 在同一台机器上
docker run -d \
--name open-webui \
-p 3000:8080 \
-v open-webui:/app/backend/data \
--add-host=host.docker.internal:host-gateway \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
--restart always \
ghcr.io/open-webui/open-webui:main
# 访问 http://localhost:3000
# 如果只使用 OpenAI API(不需要 Ollama)
docker run -d \
--name open-webui \
-p 3000:8080 \
-v open-webui:/app/backend/data \
-e OPENAI_API_KEY=sk-... \
--restart always \
ghcr.io/open-webui/open-webui:main
方式二:Docker Compose¶
# docker-compose.yml
version: '3'
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
volumes:
- ollama-data:/root/.ollama
ports:
- '11434:11434'
# GPU 支持 (NVIDIA)
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
restart: unless-stopped
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- '3000:8080'
volumes:
- open-webui:/app/backend/data
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
- WEBUI_AUTH=true
depends_on:
- ollama
restart: unless-stopped
volumes:
ollama-data:
open-webui:
docker compose up -d
# 拉取模型
docker exec ollama ollama pull llama3
docker exec ollama ollama pull codellama
方式三:pip 安装¶
首次配置¶
- 访问
http://localhost:3000 - 注册第一个账户(自动成为管理员)
- 设置中配置模型连接:
- Ollama URL:
http://host.docker.internal:11434(Docker)或http://localhost:11434 - OpenAI API Key(可选)
快速上手¶
基本对话¶
- 登录 Open WebUI
- 点击 "New Chat"
- 在顶部选择模型(如
llama3) - 在输入框中输入消息
- 按 Enter 或点击发送
管理模型¶
# 通过 Ollama 下载模型
ollama pull llama3
ollama pull codellama
ollama pull mistral
ollama pull llama3:70b # 大模型(需要足够 VRAM)
ollama pull nomic-embed-text # 嵌入模型(RAG 用)
# 模型会自动出现在 Open WebUI 的模型选择列表中
对话管理¶
| 操作 | 方法 |
|---|---|
| 新建对话 | 点击 "New Chat" |
| 重命名对话 | 点击对话标题编辑 |
| 删除对话 | 对话上右键菜单 → Delete |
| 搜索历史对话 | 左侧搜索框 |
| 导出对话 | 对话菜单 → Export |
| 分享对话 | 对话菜单 → Share(生成链接) |
文件上传¶
Open WebUI 支持在对话中上传文件:
- 点击输入框左侧的附件图标
- 选择文件(PDF、TXT、Markdown、CSV、DOCX 等)
- 文件内容会被提取并作为上下文提供给模型
- 你可以针对文件内容提问
自定义模型(Modelfile)¶
在 Open WebUI 中创建自定义模型角色:
- 进入 Workspace → Models
- 点击 "Create a Model"
- 设置:
| 字段 | 说明 | 示例 |
|---|---|---|
| Name | 模型显示名称 | "生信助手" |
| Base Model | 基础模型 | llama3 |
| System Prompt | 系统提示词 | "你是一个生物信息学专家..." |
| Temperature | 创造性参数 | 0.7 |
| Context Length | 上下文长度 | 8192 |
进阶用法¶
RAG 知识库¶
Open WebUI 内置了 RAG(检索增强生成)功能:
创建知识库
- 进入 Workspace → Knowledge
- 点击 "Create a Knowledge Collection"
- 命名知识库(如"公司文档"、"论文库")
- 上传文档到知识库
在对话中使用
配置嵌入模型
# 下载嵌入模型(用于 RAG 向量化)
ollama pull nomic-embed-text
# 在 Admin → Settings → Documents 中配置
# Embedding Model: nomic-embed-text
# Chunk Size: 1000
# Chunk Overlap: 200
Tools(工具)¶
Open WebUI 支持为模型添加可调用的工具:
内置工具 - Web 搜索 - 代码执行 - 图片生成(对接 DALL-E/Stable Diffusion)
自定义 Tool
# 在 Workspace → Tools 中创建
class Tools:
def __init__(self):
pass
async def get_weather(self, city: str) -> str:
"""Get current weather for a city.
:param city: City name
:return: Weather information
"""
# 实现天气查询逻辑
import requests
response = requests.get(f"https://wttr.in/{city}?format=3")
return response.text
Functions(管道函数)¶
Functions 允许你自定义模型的输入/输出处理:
# Filter Function — 处理输入/输出
class Filter:
def inlet(self, body, user):
"""处理用户输入(发送给模型前)"""
# 添加系统上下文
body["messages"].insert(0, {
"role": "system",
"content": "当前时间: " + str(datetime.now())
})
return body
def outlet(self, body, user):
"""处理模型输出(返回给用户前)"""
# 添加免责声明
for message in body["messages"]:
if message["role"] == "assistant":
message["content"] += "\n\n---\n*此回答由 AI 生成,仅供参考*"
return body
多用户管理¶
| 角色 | 权限 |
|---|---|
| Admin | 全部权限(用户管理、系统设置) |
| User | 创建对话、使用模型、上传文件 |
| Pending | 待审批用户 |
# 环境变量配置
# 启用注册
WEBUI_AUTH=true
# 禁用注册(仅管理员创建用户)
ENABLE_SIGNUP=false
# 默认用户角色
DEFAULT_USER_ROLE=pending # 新用户需要管理员审批
连接多个 API¶
# 在 Admin → Settings → Connections 中配置
# Ollama(本地模型)
# URL: http://localhost:11434
# OpenAI
# API Key: sk-...
# URL: https://api.openai.com/v1
# OpenRouter(多模型聚合)
# API Key: sk-or-...
# URL: https://openrouter.ai/api/v1
# 本地 vLLM/llama.cpp 服务
# URL: http://localhost:8000/v1
# API Key: (任意值,如 "not-used")
外观自定义¶
# 环境变量
WEBUI_NAME="我的 AI 助手"
DEFAULT_LOCALE="zh-CN"
# 在 Admin → Settings → General 中设置:
# - 站点名称
# - 默认语言
# - 主题(浅色/深色/自动)
API 访问¶
Open WebUI 自身提供了 OpenAI 兼容的 API:
# 获取 API Key(在 Settings → Account → API Keys)
# 使用 Open WebUI 作为 API 网关
curl http://localhost:3000/api/chat/completions \
-H "Authorization: Bearer YOUR_OPEN_WEBUI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "llama3",
"messages": [{"role": "user", "content": "Hello!"}]
}'
# 这意味着你可以用任何 OpenAI 客户端库连接 Open WebUI
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:3000/api",
api_key="YOUR_OPEN_WEBUI_API_KEY"
)
response = client.chat.completions.create(
model="llama3",
messages=[{"role": "user", "content": "你好!"}]
)
print(response.choices[0].message.content)
常见问题¶
Q1: Open WebUI 和 Ollama 是什么关系?¶
- Ollama:下载和运行本地大模型的工具(提供 API)
- Open WebUI:连接 Ollama(或 OpenAI)的 Web 前端界面
- 两者独立,Open WebUI 不仅可以连接 Ollama,还可以连接任何 OpenAI 兼容的 API
Q2: 需要什么配置才能流畅运行?¶
| 模型大小 | VRAM 需求 | 适合的 GPU |
|---|---|---|
| 7B | 4-6 GB | RTX 3060+ |
| 13B | 8-10 GB | RTX 3080+ |
| 34B | 20+ GB | RTX 4090 / A100 |
| 70B | 40+ GB | 2x RTX 4090 / A100 |
Open WebUI 本身资源消耗很小(<500MB 内存),瓶颈在 Ollama 运行模型。
Q3: 如何备份数据?¶
# Docker 方式
docker cp open-webui:/app/backend/data ./backup
# 或直接备份 volume
docker run --rm -v open-webui:/data -v $(pwd):/backup \
busybox tar czf /backup/open-webui-backup.tar.gz /data
Q4: 多人同时使用会影响性能吗?¶
Ollama 会排队处理请求。多人同时使用时,后来的请求会等待前一个完成。解决方案: - 使用更强的 GPU - 使用支持并发的推理后端(如 vLLM) - 部署多个 Ollama 实例
Q5: 如何让局域网内其他设备访问?¶
# Docker 方式已经监听 0.0.0.0
# 其他设备通过 http://服务器IP:3000 访问
# 如果需要 HTTPS,前面加 Caddy
# Caddyfile:
# chat.local {
# reverse_proxy localhost:3000
# tls internal
# }
Q6: 中文支持怎么样?¶
- UI 界面支持中文(在设置中切换语言)
- 模型的中文能力取决于模型本身
- 推荐中文模型:Qwen2.5、ChatGLM、Yi
参考资源¶
| 资源 | 链接 |
|---|---|
| 官方网站 | https://openwebui.com |
| GitHub 仓库 | https://github.com/open-webui/open-webui |
| 官方文档 | https://docs.openwebui.com |
| Ollama 官网 | https://ollama.com |
| 模型库 | https://ollama.com/library |
| Open WebUI Pipelines | https://github.com/open-webui/pipelines |
| 社区插件/工具 | https://openwebui.com/tools |
总结:Open WebUI 是本地 AI 体验的"最后一公里"。Ollama 负责运行模型,Open WebUI 负责提供交互界面。两者配合,你就拥有了一个完全私有的、功能接近 ChatGPT 的 AI 助手。内置的 RAG、多用户管理、工具系统让它不仅适合个人使用,也适合小团队内部部署。