中文 ▾
获取 API 密钥

如何使用 Ollama 配合图形界面(以及托管备用方案)

Ollama 本身在终端中运行,但任何支持 OpenAI 格式的聊天前端都可以覆盖在其之上。以下是如何设置一个,以及如何将同一窗口指向托管接口。

已更新

聊天窗口通过发光的线缆连接到本地计算机和云服务器

无需绑卡。注册后,一键领取 $0.50 免费试用额度(每人限领一次)。

获取 API 密钥

要点

  • Ollama 没有内置的聊天窗口;你需要添加如 Open WebUI 这样的前端。
  • 前端可以与 Ollama 或任何 OpenAI 兼容的 URL 通信,因此一个图形界面可以支持两个连接。
  • 对于托管连接,使用基础 URL https://api.ollamansfw.com/v1 和模型 ID uncensored。
  • 流式输出、函数调用和 JSON 模式都可以通过托管接口配合标准客户端设置使用。

为什么 Ollama 需要单独的图形界面

如果你想了解 如何使用 GUI 运行 ollama,首先要接受的事实是:Ollama 项目是一个服务器和命令行工具。它在本地端口上拉取模型并响应请求。聊天窗口是其他软件的工作,而且有几个不错的选择。

这种分离很有用。因为 Ollama 在你自己的机器上暴露了 OpenAI 风格的 API(默认在端口 11434 下的 /v1 路径),任何允许你设置自定义 OpenAI 基础 URL 的前端都可以使用它。同样的特性意味着你可以稍后将该前端指向其他地方。本文首先介绍本地设置,然后将托管接口作为第二个连接添加。

选择前端

三类工具涵盖了大多数人的需求。请查看每个项目的官方文档以获取最新的安装步骤,因为它们经常更改。

  • Open WebUI。 自托管的浏览器界面。它直接支持 Ollama,也接受任何 OpenAI 兼容的连接。通常使用 Docker 或 pip 安装。
  • 桌面客户端。 原生应用如 Chatbox 或 Msty 允许你通过设置界面添加 Ollama 服务器或 OpenAI 兼容提供商。无需运行服务器。
  • 角色扮演和写作前端。 SillyTavern 允许你添加一个兼容 OpenAI 的接口,类似的工具也适用于长篇小说和面向成人的伴侣角色。

如果你不想使用 Docker 容器,桌面客户端是最短的路径。如果你想要一个供网络上多个人使用的共享界面,Open WebUI 是通常的选择。

使用 Open WebUI 的分步指南

  1. 安装并启动 Ollama,然后使用 ollama pull 命令拉取模型。在继续之前,确认它在终端中响应。
  2. 启动 Open WebUI。使用 Docker 时,通常的模式是发布端口并挂载卷以保存其数据。
  3. 打开网页,创建第一个本地账户(将成为管理员),并在管理员设置中查找连接区域。
  4. 检查 Ollama URL 是否指向运行 Ollama 的机器。当两者在同一主机上时,这通常是端口 11434 上的本地地址。当 Open WebUI 在容器内运行时,localhost意味着容器本身,这是模型列表为空的最常见原因。
  5. 重新加载,从下拉菜单中选择模型,并发送消息。

这是一个完整的本地图形界面。数据不会离开你的计算机,速度取决于你的 GPU 或 CPU。

添加托管的 OpenAI 兼容连接

接下来是备用方案。假设你本地运行的模型对于长场景来说太小,或者你的 GPU 正忙于渲染。你可以向同一个 GUI 添加第二个连接。为此你需要一个 API 密钥,可以通过 Google 或邮箱和密码注册后在 API 密钥页面 领取。只需一键即可获得 $0.50 试用额度,无需付款,有效期为 7 天。

在 Open WebUI 中,使用以下值添加 OpenAI 连接:

  • 基础 URL:https://api.ollamansfw.com/v1
  • API 密钥:你的密钥,作为 Authorization: Bearer 发送
  • 模型:uncensored

如果在启动容器时更喜欢使用环境变量,Open WebUI 为此记录了 OPENAI_API_BASE_URL 和 OPENAI_API_KEY:

docker run -d -p 3000:8080 \
  -e OPENAI_API_BASE_URL=https://api.ollamansfw.com/v1 \
  -e OPENAI_API_KEY=YOUR_KEY \
  -v open-webui:/app/backend/data \
  --name open-webui ghcr.io/open-webui/open-webui:main
# model to pick in the UI: uncensored

重新加载后,uncensored 应出现在本地模型旁边的下拉菜单中。前端通过 GET /v1/models 找到它。你现在可以在同一对话列表中在本地模型和托管模型之间切换。

先在图形界面之外测试接口

当图形界面显示模糊错误时,最快的判断方法是进行直接调用,以确认问题是出在密钥还是接口上。以下是使用 curl 的流式请求:

curl -N https://api.ollamansfw.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "stream": true,
    "messages": [{"role": "user", "content": "Write two sentences about a lighthouse keeper."}]
  }'

你应该看到一系列以使用信息结尾的 data: 行。如果这有效,则密钥和 URL 没问题,问题出在前端。故障排除页面 涵盖了典型的错误,如缺少 /v1 或密钥中的尾随空格。

你用于本地模型的客户端设置大多可以沿用。温度、top_p、停止序列、种子以及惩罚参数都会传递给模型。

在你的代码中使用托管接口

图形界面只是一个客户端。脚本和小应用是另一种客户端,托管接口与标准 OpenAI SDK 兼容。支持函数调用和 JSON 模式,如果你的图形界面或代理使用它们,这很重要。

from openai import OpenAI

client = OpenAI(base_url="https://api.ollamansfw.com/v1", api_key="YOUR_KEY")

resp = client.chat.completions.create(
    model="uncensored",
    response_format={"type": "json_object"},
    messages=[
        {"role": "system", "content": "Reply with a JSON object with keys title and summary."},
        {"role": "user", "content": "A short story about a lighthouse keeper."},
    ],
)
print(resp.choices[0].message.content)

Node.js 中的模式相同:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.ollamansfw.com/v1",
  apiKey: process.env.API_KEY,
});

const stream = await client.chat.completions.create({
  model: "uncensored",
  stream: true,
  messages: [{ role: "user", content: "Name three sailing knots." }],
});
for await (const part of stream) {
  process.stdout.write(part.choices[0]?.delta?.content ?? "");
}

快速入门 有更多示例,包括使用 tool_choice 的工具调用。

常见问题及解决方法

图形界面设置中的大多数故障来自简短的原因列表。

  • 本地连接的模型列表为空。 前端无法连接到 Ollama。检查地址,并记住容器化的图形界面看不到你的主机作为 localhost。
  • 托管端点返回 401。 密钥缺失或错误。再次粘贴它,不要带空格,并确保图形界面将其作为 bearer token 发送。
  • 每个请求都返回 404。 base URL 可能缺少 /v1,或者包含了两次。
  • 回复停止或界面挂起。 一些前端通过代理缓冲流式输出。尝试上面的直接 curl 测试,如果它流式传输,请检查你的图形界面前面的代理设置。
  • 本地回复缓慢。 模型对于你的 VRAM 来说太大,正在溢出到系统内存。选择较小的量化,或将该聊天切换到托管连接。

对于小说和成人伴侣应用,请牢记一条规则:托管模型在合法成人使用时不会拒绝内容,但涉及未成年人的性内容永远不允许,服务将其作为硬性限制执行。

图形界面中需要注意的限制和费用

前端可以同时发送多个请求,例如当它们在后台生成聊天标题时,主回复正在流式传输。完整密钥允许 8 个并发请求和每分钟 300 个请求。试用密钥允许 2 个并发和每分钟 60 个。流式请求在其流结束之前保持其槽位。如果你超过限制,你会得到带有代码 rate_limited 或 concurrency 的 HTTP 429,以及在临时过载时带有 Retry-After: 5 的 429。在试用密钥上关闭后台标题生成是一个简单的修复方法。

费用按 token 计算:每 1M 输入 0.15 美元,每 1M 输出 0.50 美元。包含 2,000 个 token 历史记录和 500 个 token 回复的聊天回合成本为 0.0003 美元加 0.00025 美元,即 0.00055 美元。响应头包括 X-Balance-USD,因此你可以观察你的信用额度减少。充值详情见 定价页面。该站点仅支持加密货币:TRC20 上的 USDT 或 Base 上的 USDC,任何整金额从 $20 到 $500。

上下文窗口为 100,000 token,所以非常长的聊天随着历史记录的增长,每次转动的成本会更高,因为每次都会发送整个历史记录。大多数图形界面都有一个设置来修剪或总结旧消息。

问答

Ollama 有自己的图形界面吗?

Ollama 主要是一个服务器和命令行工具。聊天窗口来自独立的项目,例如 Open WebUI 或你连接到的桌面客户端。

一个 GUI 能同时使用本地模型和托管模型吗?

可以,如果前端支持多个连接。将 Ollama 添加为一个连接,将 OpenAI 兼容的 URL 添加为另一个连接,然后为每个聊天选择模型。

为什么我的 GUI 在托管接口上没有显示模型?

检查 base URL 是否以 /v1 结尾,密钥没有多余空格,并且 GUI 被允许调用 GET /v1/models。如果仍然失败,请手动输入模型 ID uncensored。

如果我收到 HTTP 429 该怎么办?

你触发了速率或并发限制。减少并行请求,等待 Retry-After 中指定的秒数,然后重试。