作者:吴业亮
博客:wuyeliang.blog.csdn.net
Ollama 是一个开源的大型语言模型(LLM)平台,致力于让用户能够轻松在本地运行、管理和与大型语言模型进行交互。它提供了简单的方式加载和使用各类预训练语言模型,支持文本生成、翻译、代码编写、问答等多种自然语言处理任务。与其他 NLP 框架不同,Ollama 旨在简化用户工作流程,让机器学习不再是只有深度技术背景的开发者才能触及的领域。同时,它支持多种硬件加速选项,包括纯 CPU 推理和各类底层计算架构(如 Apple Silicon),能更好地利用不同类型的硬件资源。

一、核心功能与特点
1. 多种预训练语言模型支持
Ollama 提供了多种开箱即用的预训练模型,包括常见的 GPT、BERT 等大型语言模型。用户可轻松加载并使用这些模型进行文本生成、情感分析、问答等任务。
2. 易于集成和使用
Ollama 提供命令行工具(CLI)和 Python SDK,简化了与其他项目和服务的集成。开发者无需担心复杂的依赖或配置,可快速将 Ollama 集成到现有应用中。
3. 本地部署与离线使用
不同于一些基于云的 NLP 服务,Ollama 允许开发者在本地计算环境中运行模型。这意味着可以脱离对外部服务器的依赖,保证数据隐私,并且对于高并发的请求,离线部署能提供更低的延迟和更高的可控性。
4. 支持模型微调与自定义
用户不仅可以使用 Ollama 提供的预训练模型,还能在此基础上进行模型微调。根据自身特定需求,开发者可使用自己收集的数据对模型进行再训练,从而优化模型的性能和准确度。
5. 性能优化
Ollama 关注性能,提供高效的推理机制,支持批量处理,能够有效管理内存和计算资源,使其在处理大规模数据时依然保持高效。
6. 跨平台支持
Ollama 支持在多个操作系统上运行,包括 Windows、macOS 和 Linux。无论是开发者在本地环境调试,还是企业在生产环境部署,都能得到一致的体验。
7. 开放源码与社区支持
Ollama 是开源项目,开发者可以查看源代码,进行修改和优化,也可以参与到项目的贡献中。此外,Ollama 拥有活跃的社区,开发者可从中获取帮助并与其他人交流经验。
二、应用场景
1. 内容创作
帮助作家、记者、营销人员快速生成高质量的内容,例如博客文章、广告文案等。
2. 编程辅助
帮助开发者生成代码、调试程序或优化代码结构。
3. 教育和研究
辅助学生和研究人员进行学习、写作和研究,例如生成论文摘要或解答问题。
4. 跨语言交流
提供高质量的翻译功能,帮助用户打破语言障碍。
5. 个人助手
作为智能助手,帮助用户完成日常任务,例如撰写邮件、生成待办事项等。
三、Ollama 安装
Ollama 支持多种操作系统,包括 macOS、Windows、Linux 以及通过 Docker 容器运行,且对硬件要求不高。
(一)硬件与软件要求
1. 硬件要求
- CPU:多核处理器(推荐 4 核或以上)。
- GPU:如果计划运行大型模型或进行微调,推荐使用具有较高计算能力的 GPU(如 NVIDIA 的 CUDA 支持)。
- 内存:至少 8GB RAM,运行较大模型时推荐 16GB 或更高。
- 存储:需要足够的硬盘空间来存储预训练模型,通常需要 10GB 至数百 GB 的空间,具体取决于模型的大小。
2. 软件要求
确保系统上安装了最新版本的 Python(如果打算使用 Python SDK)。
(二)各系统安装步骤
1. Windows 系统安装
-
打开浏览器,访问 Ollama 官方网站:https://ollama.com/download,下载适用于 Windows 的安装程序,下载地址为:https://ollama.com/download/OllamaSetup.exe。
-
下载完成后,双击安装程序并按照提示完成安装。
-
验证安装:打开命令提示符或 PowerShell,输入以下命令验证安装是否成功:
ollama --version如果显示版本号,则说明安装成功。
-
更改安装路径(可选):如果需要将 Ollama 安装到非默认路径,可以在安装时通过命令行指定路径,例如:
OllamaSetup.exe /DIR="d:\some\location"这样可以将 Ollama 安装到指定的目录。
2. macOS 系统安装
-
打开浏览器,访问 Ollama 官方网站:https://ollama.com/download,下载适用于 macOS 的安装程序,下载地址为:https://ollama.com/download/Ollama-darwin.zip。
-
下载完成后,双击安装包并按照提示完成安装。
-
安装完成后,通过以下命令验证:
ollama --version如果显示版本号,则说明安装成功。
3. Linux 系统安装
Linux 下可以使用一键安装脚本,打开终端,运行以下命令:
curl -fsSL https://ollama.com/install.sh | bash
安装完成后,通过以下命令验证:
ollama --version
如果显示版本号,则说明安装成功。
4. Docker 安装
如果熟悉 Docker,也可以通过 Docker 安装 Ollama。
-
官方 Docker 镜像 ollama/ollama 可在 Docker Hub 上获取:https://hub.docker.com/r/ollama/ollama。
-
拉取 Docker 镜像:
docker pull ollama/ollama -
运行容器:
docker run -p 11434:11434 ollama/ollama -
访问 http://localhost:11434 即可使用 Ollama。
四、Ollama 运行模型
Ollama 运行模型使用 ollama run 命令。
1. 示例:运行 Llama 3.2 并对话
ollama run llama3.2
执行以上命令如果没有该模型会自动下载 llama3.2 模型:

等待下载完成后,在终端中输入以下命令来加载 LLama3.2 模型并进行交互:
writing manifest
success >>> 你好Hello
>>> 能讲中文吗是的,我可以在 Chinese 中对話。哪些话题或问题想要了解我呢?
结束对话可以输入 /bye 或按 Ctrl+d 按键来结束。
2. 查看已安装的模型
使用 ollama list 命令,示例如下:
NAME ID SIZE MODIFIED
llama3.2 baf6a787fdff 1.3 GB 4 minutes ago
3. 支持的模型与下载命令
Ollama 支持的模型可访问:https://ollama.com/library

下表列出一些模型的下载命令:
| 模型 | 参数 | 大小 | 下载命令 |
|---|---|---|---|
| Llama 3.3 | 70B | 43GB | ollama run llama3.3 |
| Llama 3.2 | 3B | 2.0GB | ollama run llama3.2 |
| Llama 3.2 | 1B | 1.3GB | ollama run llama3.2:1b |
| Llama 3.2 Vision | 11B | 7.9GB | ollama run llama3.2-vision |
| Llama 3.2 Vision | 90B | 55GB | ollama run llama3.2-vision:90b |
| Llama 3.1 | 8B | 4.7GB | ollama run llama3.1 |
| Llama 3.1 | 405B | 231GB | ollama run llama3.1:405b |
| Phi 4 | 14B | 9.1GB | ollama run phi4 |
| Phi 3 Mini | 3.8B | 2.3GB | ollama run phi3 |
| Gemma 2 | 2B | 1.6GB | ollama run gemma2:2b |
| Gemma 2 | 9B | 5.5GB | ollama run gemma2 |
| Gemma 2 | 27B | 16GB | ollama run gemma2:27b |
| Mistral | 7B | 4.1GB | ollama run mistral |
| Moondream 2 | 1.4B | 829MB | ollama run moondream |
| Neural Chat | 7B | 4.1GB | ollama run neural-chat |
| Starling | 7B | 4.1GB | ollama run starling-lm |
| Code Llama | 7B | 3.8GB | ollama run codellama |
| Llama 2 Uncensored | 7B | 3.8GB | ollama run llama2-uncensored |
| LLaVA | 7B | 4.5GB | ollama run llava |
| Solar | 10.7B | 6.1GB | ollama run solar |
五、Ollama 相关命令
Ollama 提供了多种命令行工具(CLI)供用户与本地运行的模型进行交互。
基本格式:
ollama <command> [args]
使用 ollama --help 查看包含的命令:
Large language model runner
Usage:
ollama [flags]
ollama [command]
Available Commands:
serve Start ollama
create Create a model from a Modelfile
show Show information for a model
run Run a model
stop Stop a running model
pull Pull a model from a registry
push Push a model to a registry
list List models
ps List running models
cp Copy a model
rm Remove a model
help Help about any command
Flags:
-h, --help help for ollama
-v, --version Show version information
1. 使用方法
ollama [flags]:使用标志(flags)运行 ollama。ollama [command]:运行 ollama 的某个具体命令。
2. 可用命令详情
| 命令 (Command) | 说明 (Description) | 示例 (Example) |
|---|---|---|
| ollama run | 运行模型。如果不存在则自动拉取。 | ollama run llama3 |
| ollama pull | 拉取模型。从库中下载模型但不运行。 | ollama pull mistral |
| ollama list | 列出模型。显示本地所有已下载的模型。 | ollama list |
| ollama rm | 删除模型。移除本地模型释放空间。 | ollama rm llama3 |
| ollama cp | 复制模型。将现有模型复制为新名称(用于测试)。 | ollama cp llama3 my-model |
| ollama create | 创建模型。根据 Modelfile 创建自定义模型(高级)。 | ollama create my-bot -f ./Modelfile |
| ollama show | 显示信息。查看模型的元数据、参数或 Modelfile。 | ollama show --modelfile llama3 |
| ollama ps | 查看进程。显示当前正在运行的模型及显存占用。 | ollama ps |
| ollama push | 推送模型。将你自定义的模型上传到 ollama.com。 | ollama push my-username/my-model |
| ollama serve | 启动服务。启动 Ollama 的 API 服务(通常后台自动运行)。 | ollama serve |
| ollama help | 帮助。查看任何命令的帮助信息。 | ollama help run |
3. 标志(Flags)
-h, --help:显示 ollama 的帮助信息。-v, --version:显示版本信息。
4. 常用命令分类详解
(1)拉取与删除模型
- pull:拉取远端模型到本地,命令:
ollama pull <model> - rm / remove:删除本地模型,命令:
ollama rm <model> - list / ls:列出所有本地模型,命令:
ollama list
(2)运行模型
- run:交互模式运行模型,不退出,命令:
ollama run <model>- 可带系统信息与 prompt:
ollama run <model> -s "<system>" -p "<prompt>" - 从文件读取 prompt:
ollama run <model> < input.txt
- 可带系统信息与 prompt:
- 聊天界面快捷指令(输入
ollama run进入聊天界面后):/bye或/exit:退出聊天界面,返回命令行。/clear:清空当前的上下文记忆(开启一段新的对话)。/show info:查看当前模型的详细参数信息。/set parameter seed 123:设置随机种子(高级玩法,用于复现结果)。/help:在聊天中查看所有可用的快捷键。
(3)推理接口(一次性执行)
- generate:执行单次推理,输出文本,命令:
ollama generate <model> -p "<prompt>"
(4)创建与修改模型
- create:用 Modelfile 创建本地模型,命令:
ollama create <model-name> -f Modelfile - cp:复制一个模型为新名字,命令:
ollama cp <src> <dst>
(5)服务器相关
- serve:启动 Ollama 本地服务(默认 11434),命令:
ollama serve - run serverless:当
ollama run时会自动拉起后台服务,不需单独执行。
(6)模型信息
- show:查看模型元数据、参数、模板,命令:
ollama show <model>
(7)专用参数
这些参数多数可用于 run/generate:
--num-predict <number> 限制输出 token 数
--temperature <float> 控制随机性
--top-k <<int> 采样范围
--top-p <float> 核采样
--seed <<int> 固定随机性
--format json 输出 JSON
--keepalive <seconds> 会话保持时间
(8)Modelfile 指令(构建模型时使用)
FROM <model>:基础模型SYSTEM "xxx":设定系统提示PARAMETER key=value:设定默认参数TEMPLATE "xxx":自定义 Chat 模板LICENSE "xxx":设置 LicenseADAPTER <file>/WEIGHTS <file>:加载 LoRA 或额外权重
(9)API(当 serve 运行时)
REST 端点(默认 http://localhost:11434/api):
/api/generate:文本生成/api/chat:对话流式接口/api/pull:远程拉取/api/tags:本地模型列表
调用示例(curl):
curl http://localhost:11434/api/generate \
-d '{"model":"qwen2.5","prompt":"hello"}'
(10)进阶用法
- 自定义参数运行:
ollama run <model> --temperature 0.2 --top-p 0.9 - 持久会话(保留上下文):会话由模型内部缓存自动管理,无需额外命令。
六、Ollama API 交互
Ollama 提供了基于 HTTP 的 API,允许开发者通过编程方式与模型进行交互。以下详细介绍 Ollama API 的使用方法,包括请求格式、响应格式以及示例代码。
1. 启动 Ollama 服务
在使用 API 之前,需要确保 Ollama 服务正在运行。可以通过以下命令启动服务:
ollama serve
默认情况下,服务会运行在 http://localhost:11434。
2. API 端点
(1)生成文本(Generate Text)
-
端点:
POST /api/generate -
功能:向模型发送提示词(prompt),并获取生成的文本。
-
请求格式:
json{ "model": "<model-name>", // 模型名称 "prompt": "<input-text>", // 输入的提示词 "stream": false, // 是否启用流式响应(默认 false) "options": { // 可选参数 "temperature": 0.7, // 温度参数 "max_tokens": 100 // 最大 token 数 } } -
响应格式:
json{ "response": "<generated-text>", // 生成的文本 "done": true // 是否完成 }
(2)聊天(Chat)
-
端点:
POST /api/chat -
功能:支持多轮对话,模型会记住上下文。
-
请求格式:
json{ "model": "<model-name>", // 模型名称 "messages": [ // 消息列表 { "role": "user", // 用户角色 "content": "<input-text>" // 用户输入 } ], "stream": false, // 是否启用流式响应 "options": { // 可选参数 "temperature": 0.7, "max_tokens": 100 } } -
响应格式:
json{ "message": { "role": "assistant", // 助手角色 "content": "<generated-text>" // 生成的文本 }, "done": true }
(3)列出本地模型(List Models)
-
端点:
GET /api/tags -
功能:列出本地已下载的模型。
-
响应格式:
json{ "models": [ { "name": "<model-name>", // 模型名称 "size": "<model-size>", // 模型大小 "modified_at": "<timestamp>" // 修改时间 } ] }
(4)拉取模型(Pull Model)
-
端点:
POST /api/pull -
功能:从模型库中拉取模型。
-
请求格式:
json{ "name": "<model-name>" // 模型名称 } -
响应格式:
json{ "status": "downloading", // 下载状态 "digest": "<model-digest>" // 模型摘要 }
3. 使用示例
(1)生成文本(curl)
bash
curl http://localhost:11434/api/generate -d '{
"model": "deepseek-coder",
"prompt": "你好,你能帮我写一段代码吗?",
"stream": false
}'
(2)多轮对话(curl)
bash
curl http://localhost:11434/api/chat -d '{
"model": "deepseek-coder",
"messages": [
{
"role": "user",
"content": "你好,你能帮我写一段 Python 代码吗?"
}
],
"stream": false
}'
(3)列出本地模型(curl)
bash
curl http://localhost:11434/api/tags
(4)拉取模型(curl)
bash
curl http://localhost:11434/api/pull -d '{
"name": "deepseek-coder"
}'
4. 流式响应
Ollama 支持流式响应(streaming response),适用于实时生成文本的场景。
(1)启用流式响应
在请求中设置 "stream": true,API 会逐行返回生成的文本。
(2)示例(curl)
bash
curl http://localhost:11434/api/generate -d '{
"model": "deepseek-coder",
"prompt": "你好,你能帮我写一段代码吗?",
"stream": true
}'
(3)响应格式
每行返回一个 JSON 对象:
json
{
"response": "<partial-text>", // 部分生成的文本
"done": false // 是否完成
}
5. 编程语言示例
(1)Python(使用 requests 库)
-
生成文本:
pythonimport requests response = requests.post( "http://localhost:11434/api/generate", json={ "model": "deepseek-coder", "prompt": "你好,你能帮我写一段代码吗?", "stream": False } ) print(response.json()) -
多轮对话:
pythonimport requests response = requests.post( "http://localhost:11434/api/chat", json={ "model": "deepseek-coder", "messages": [ { "role": "user", "content": "你好,你能帮我写一段 Python 代码吗?" } ], "stream": False } ) print(response.json())
(2)JavaScript(使用 fetch API)
-
生成文本:
javascriptfetch("http://localhost:11434/api/generate", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ model: "deepseek-coder", prompt: "你好,你能帮我写一段代码吗?", stream: false }) }) .then(response => response.json()) .then(data => console.log(data)); -
多轮对话:
javascriptfetch("http://localhost:11434/api/chat", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ model: "deepseek-coder", messages: [ { role: "user", content: "你好,你能帮我写一段 Python 代码吗?" } ], stream: false }) }) .then(response => response.json()) .then(data => console.log(data));
七、Ollama Python SDK 使用
Ollama 提供了 Python SDK,可让开发者在 Python 环境中与本地运行的模型进行交互。通过该 SDK 能够轻松地将自然语言处理任务集成到 Python 项目中,执行文本生成、对话生成、模型管理等操作,且不需要手动调用命令行。
1. 安装 Python SDK
使用 pip 安装:
bash
pip install ollama
确保环境中已安装 Python 3.x,并且网络环境能够访问 Ollama 本地服务。
2. 启动本地服务
在使用 Python SDK 之前,确保 Ollama 本地服务已经启动,可通过以下命令启动:
bash
ollama serve
启动后,Python SDK 会与本地服务进行通信,执行模型推理等任务。
3. 基本使用示例
(1)简单对话
python
from ollama import chat
from ollama import ChatResponse
response: ChatResponse = chat(model='deepseek-coder', messages=[
{
'role': 'user',
'content': '你是谁?',
},
])
# 打印响应内容
print(response['message']['content'])
# 或者直接访问响应对象的字段
# print(response.message.content)
执行以上代码,输出结果为:
我是由中国的深度求索(DeepSeek)公司开发的编程智能助手,名为DeepCoder。我可以帮助你解答与计算机科学相关的问题和任务。如果你有任何关于这方面的话题或者需要在某个领域进行学习或查询信息时请随时提问!
(2)流式响应
python
from ollama import chat
stream = chat(
model='deepseek-coder',
messages=[{'role': 'user', 'content': '你是谁?'}],
stream=True,
)
# 逐块打印响应内容
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
4. 高级用法
(1)自定义客户端
通过 Client 可自定义请求的设置(如请求头、URL 等),并发送请求:
python
from ollama import Client
client = Client(
host='http://localhost:11434',
headers={'x-some-header': 'some-value'}
)
response = client.chat(model='deepseek-coder', messages=[
{
'role': 'user',
'content': '你是谁?',
},
])
print(response['message']['content'])
(2)异步客户端
适用于需要并发的场景,使用 AsyncClient 类:
python
import asyncio
from ollama import AsyncClient
async def chat():
message = {'role': 'user', 'content': '你是谁?'}
response = await AsyncClient().chat(model='deepseek-coder', messages=[message])
print(response['message']['content'])
asyncio.run(chat())
(3)异步流式响应
python
import asyncio
from ollama import AsyncClient
async def chat():
message = {'role': 'user', 'content': '你是谁?'}
async for part in await AsyncClient().chat(model='deepseek-coder', messages=[message], stream=True):
print(part['message']['content'], end='', flush=True)
asyncio.run(chat())
5. 常用 API 方法
| 方法 | 功能 | 示例 |
|---|---|---|
| chat | 与模型进行对话生成,发送用户消息并获取模型响应 | ollama.chat(model='llama3.2', messages=[{'role': 'user', 'content': 'Why is the sky blue?'}]) |
| generate | 用于文本生成任务,只需一个 prompt 参数 | ollama.generate(model='llama3.2', prompt='Why is the sky blue?') |
| list | 列出所有可用的模型 | ollama.list() |
| show | 显示指定模型的详细信息 | ollama.show('llama3.2') |
| create | 从现有模型创建新的模型 | ollama.create(model='example', from_='llama3.2', system="You are Mario from Super Mario Bros.") |
| copy | 复制模型到另一个位置 | ollama.copy('llama3.2', 'user/llama3.2') |
| delete | 删除指定模型 | ollama.delete('llama3.2') |
| pull | 从远程仓库拉取模型 | ollama.pull('llama3.2') |
| push | 将本地模型推送到远程仓库 | ollama.push('user/llama3.2') |
| embed | 生成文本嵌入 | ollama.embed(model='llama3.2', input='The sky is blue because of rayleigh scattering') |
| ps | 查看正在运行的模型列表 | ollama.ps() |
6. 错误处理
Ollama SDK 会在请求失败或响应流式传输出现问题时抛出错误。可使用 try-except 语句来捕获这些错误,并根据需要进行处理:
python
import ollama
model = 'does-not-yet-exist'
try:
response = ollama.chat(model=model, messages=[{'role': 'user', 'content': 'Hello'}])
except ollama.ResponseError as e:
print('Error:', e.error)
if e.status_code == 404:
ollama.pull(model)
八、Ollama Open WebUI
Open WebUI 是用户友好的 AI 界面(支持 Ollama、OpenAI API 等)。它支持多种语言模型运行器(如 Ollama 和 OpenAI 兼容 API),并内置了用于检索增强生成(RAG)的推理引擎,使其成为强大的 AI 部署解决方案。Open WebUI 可自定义 OpenAI API URL,连接 LMStudio、GroqCloud、Mistral、OpenRouter 等。管理员可创建详细的用户角色和权限,确保安全的用户环境,同时提供定制化的用户体验。它支持桌面、笔记本电脑和移动设备,并提供移动设备上的渐进式 Web 应用(PWA),支持离线访问。

1. 安装方式
Open WebUI 提供多种安装方式,包括通过 Python pip 安装、Docker 安装、Docker Compose、Kustomize 和 Helm 等。
(1)使用 Docker 快速开始
-
若 Ollama 已安装在本地电脑上,使用以下命令:
bashdocker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main -
使用 Nvidia GPU 支持运行 Open WebUI:
bashdocker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda
(2)Open WebUI 与 Ollama 捆绑安装
此方法使用单一容器镜像,将 Open WebUI 与 Ollama 捆绑在一起,可通过一个命令轻松设置。
-
启用 GPU 支持:
bashdocker run -d -p 3000:8080 --gpus=all -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama -
仅使用 CPU:
bashdocker run -d -p 3000:8080 -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama
安装完成后,可通过访问 http://localhost:3000 使用 Open WebUI。
(3)更新 Open WebUI
-
手动更新:使用 Watchtower 手动更新 Docker 容器
bashdocker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once open-webui -
自动更新:每 5 分钟自动更新容器
bashdocker run -d --name watchtower --restart unless-stopped -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --interval 300 open-webui注意:如果容器名不同,请将 open-webui 替换为实际容器名。
(4)手动安装
Open WebUI 的手动安装有两种主要方法:使用 uv runtime manager 或 Python 的 pip。推荐使用 uv,因为它简化了环境管理,减少了潜在的冲突。
① 使用 uv 安装(推荐)
-
macOS/Linux:
bashcurl -LsSf https://astral.sh/uv/install.sh | sh -
Windows:
powershellpowershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
运行 Open WebUI:
安装 UV 后,运行以下命令,确保设置 DATA_DIR 环境变量,以避免数据丢失。
-
macOS/Linux:
bashDATA_DIR=~/.open-webui uvx --python 3.11 open-webui@latest serve -
Windows:
powershell$env:DATA_DIR="C:\open-webui\data"; uvx --python 3.11 open-webui@latest serve
② 通过 pip 安装
在开始安装之前,请确保使用的是 Python 3.11,以避免可能出现的兼容性问题。
-
安装命令:
bashpip install open-webui -
启动命令:
bashopen-webui serve
启动后,Open WebUI 服务器将运行在 http://localhost:8080,可通过浏览器访问该地址使用 Open WebUI。