本指南面向有权安装应用、并可使用自己拥有的非敏感测试文件的 Mac 用户。你将把一个模型下载到 Ollama,把可持久保存的 Open WebUI 浏览器聊天和 VS Code 的 Continue 扩展连接到同一个运行服务,再检查实际提出的修改建议,决定是否保留。以下命令和检查依据维护者的现行文档;BIG CHANGE 没有运行这套组合,也没有测量其速度、成本或网络流量。

主要变化

  • 发生了什么变化: 已下载的 Ollama 模型可通过本地 API 同时支持浏览器聊天和 VS Code 编辑助手。每个客户端仍需单独检查连接。
  • 为什么重要: 一次模型安装可以在同一台 Mac 上支持对话和经过检查的代码修改,文件所有者保留最终决定权。
  • 需要留意: 菜单中的模型名称不能证明是哪台服务器作答。请检查提供方连接及实际回复,尤其是在配置了其他提供方或云功能时。

1. 检查 Mac 并选择模型

你需要 Ollama 所需的 macOS 14 或更新版本、 Mac 版 Docker Desktop、配有 Continue 扩展的 VS Code,以及用于下方简短 JSON 和文件检查的 Python 3。Ollama 支持 Apple M 系列的 CPU 和 GPU 执行;其文档对 Intel Mac 仅列出 CPU。请从 Mac 下载页安装 Ollama,将应用移入 Applications,启动后按提示允许创建命令行链接。安装并启动 Docker Desktop,再从 VS Code 的 Extensions 视图安装 Continue。如果没有 Python 3,请从 Python.org 安装(当 python3 不可用时)。在 Mac 上,VS Code 不会自动把 code 加入 shell 路径。请遵循其 Mac 安装说明:按 Cmd+Shift+P打开 Command Palette,运行 Shell Command: Install 'code' command in PATH,然后重新启动 Terminal。确认所需工具均已可用:

Terminal
sw_vers -productVersion
ollama --version
docker version
code --version
python3 --version

记录已安装的版本。如果任一应用未运行,或 Mac 没有足够空间容纳模型和 Docker 数据,请先停止。 qwen2.5-coder:7b 模型页面 当前列出的下载大小为 4.7 GB,许可证为 Apache 2.0。下载大小不等于运行时所需的全部内存。这只是本指南的具体示例,并不代表适合每一台 Mac。必要时选择文档明确支持的较小本地模型标签,再将下方所有命令、浏览器选项和 YAML 字段中的 qwen2.5-coder:7b 替换为该准确标签。同时检查替代模型的许可证。

下载模型,并核实 Ollama 列出了准确标签:

Terminal
ollama pull qwen2.5-coder:7b
ollama list
curl --fail-with-body --silent --show-error http://127.0.0.1:11434/api/tags | python3 -c 'import json,sys; d=json.load(sys.stdin); print([m["name"] for m in d["models"]])'

列表应包含 qwen2.5-coder:7b。接着向 本地聊天 API 请求简短回复。遇到 HTTP 错误时命令会失败,并检查返回的模型及非空助手内容;回复的具体措辞并不重要。 Ollama 运行选项 num_predict 将此次检查限制为最多生成 64 个 token。句子即使被截断,也能表明收到了内容;空回复则意味着检查失败,需要排查。

Terminal
set -o pipefail
curl --fail-with-body --silent --show-error http://127.0.0.1:11434/api/chat \
  -H 'Content-Type: application/json' \
  -d '{"model":"qwen2.5-coder:7b","messages":[{"role":"user","content":"Reply with one short sentence about checking a local connection."}],"stream":false,"options":{"num_predict":64}}' \
  | python3 -c 'import json,sys; d=json.load(sys.stdin); assert d.get("model")=="qwen2.5-coder:7b",d.get("model"); assert d.get("message",{}).get("content","").strip(); print("Model:",d["model"],"Reply:",d["message"]["content"])'

如果没有该标签,请完成下载后重新查看列表。如果无法访问 API,请启动 Ollama,并检查其 Mac 服务器日志 ,位置为 ~/.ollama/logs/server.log。已下载的标签和成功的本地回复构成三项检查中的第一项。

2. 启动 Open WebUI,并持久保存本地数据

这份 Open WebUI 快速入门指南 将账户、设置及聊天保存在 /app/backend/data ,并要求使用固定的 WEBUI_SECRET_KEY。这里使用稳定的 v0.12.3 版本 ,而不是滚动更新的 main 标签。Docker 会选择适合 Mac 架构的镜像;下载后请记录镜像标识。

先检查这里使用的名称。如果任一名称已存在,请检查对应容器或卷,确认它是否属于先前的设置。不要仅为让命令运行而替换现有容器或删除其卷。

Terminal
docker ps -a --filter name=^/bc-open-webui$ 
docker volume inspect bc-open-webui-data

首次设置时,第二条命令报告卷不存在是正常情况。以下步骤将生成的密钥保存在 Mac 账户下的私有文件中。请安全保留该文件,以便重建容器。不要把其内容提交到代码库、粘贴出去或共享。如果已有此实例的密钥,请继续使用原密钥。

Terminal
mkdir -p "$HOME/.config/bc-open-webui"
chmod 700 "$HOME/.config/bc-open-webui"
umask 077
if [ ! -s "$HOME/.config/bc-open-webui/webui-secret" ]; then
  openssl rand -hex 32 > "$HOME/.config/bc-open-webui/webui-secret"
fi
chmod 600 "$HOME/.config/bc-open-webui/webui-secret"
export WEBUI_SECRET_KEY="$(cat "$HOME/.config/bc-open-webui/webui-secret")"
docker pull ghcr.io/open-webui/open-webui:v0.12.3
docker image inspect ghcr.io/open-webui/open-webui:v0.12.3 --format '{{json .RepoDigests}}'
docker volume create bc-open-webui-data
docker run -d --name bc-open-webui --restart unless-stopped \
  -p 127.0.0.1:3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v bc-open-webui-data:/app/backend/data \
  -e WEBUI_SECRET_KEY \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  ghcr.io/open-webui/open-webui:v0.12.3
unset WEBUI_SECRET_KEY
docker ps --filter name=^/bc-open-webui$ --format 'table {{.Names}}\t{{.Image}}\t{{.Ports}}'

端口输出应显示 127.0.0.1:3000->8080/tcp。命名卷会在重建容器时保留聊天和设置。密钥用于维持会话连续性和保护应用的加密值,因此要保留其私有副本。拥有 Docker 访问权限的人可能从容器配置中查看环境变量;这是单用户本地设置,不是共享主机上的密钥保险库。

在浏览器中打开 http://127.0.0.1:3000 。首次启动时创建管理员账户。在头像菜单中打开 Settings → Admin → Connections。检查 Manage Ollama API Connections ,只保留一个指向 http://host.docker.internal:11434的已启用连接;移除或禁用不在本次检查范围内的提供方连接。Open WebUI 可以在多个 Ollama 连接之间分配请求,所以仅凭下拉菜单中名称一致并不足够。在新聊天中选择 qwen2.5-coder:7b ,然后询问:“如何验证本地模型确实作出了回复?”确认出现非空回复,再重新打开已保存的聊天。记录选定模型及连接 URL。这是浏览器检查;不要求特定答案。

如果页面无法加载,请检查 docker logs bc-open-webui 及端口绑定。如果模型列表为空,请确认 Ollama 仍能响应 /api/tags,检查已保存的 Open WebUI 连接,并测试该 Docker Desktop 版本能否访问 Mac 主机服务。 host.docker.internal 是 Docker Desktop 的主机地址,而 localhost 在容器内部指的是容器本身。Ollama 默认绑定到 127.0.0.1;主机与容器之间的转发方式可能因配置而异。不要把连接失败当作设置成功,也不要把 Ollama 暴露在 0.0.0.0 上作为常规修复。继续操作前,请按自己的安全策略解决本地网络路径问题。排查时保留现有卷和聊天。

3. 将 Continue 指向同一个 Ollama 标签

Continue 在 Mac 上的 VS Code 中运行,因此其 Ollama API 地址为 http://localhost:11434。打开 Continue,使用聊天输入框右上角的配置下拉菜单,点击 Local Config旁边的齿轮。这会打开 ~/.continue/config.yaml; Continue 当前参考文档 使用 YAML。先备份已有配置,并保留仍需要的模型或规则。对于新的本地配置,完整的最小内容如下:

YAML
name: Local Ollama check
version: 1.0.0
schema: v1
models:
  - name: Qwen2.5 Coder 7B local
    provider: ollama
    model: qwen2.5-coder:7b
    apiBase: http://localhost:11434
    roles:
      - chat
      - edit

如果文件已存在,请把该模型条目添加到其 models: 列表下,并保留现有顶层配置。保存后选择 Local Config 和已命名的本地模型,再在 Continue Chat 中提出简短问题。确认收到内容。这可以检查扩展连接,但聊天回复不等于文件修改。 chat 和 edit 角色启用了这里使用的两项操作;本流程不承诺 Agent 或自动补全功能。

创建自己拥有的测试目录和文件,并使用可独立检查的简单行为。命令会保留已有文件或原始副本;如果任一文件名已被使用,请先检查或另选测试目录:

Terminal
mkdir -p "$HOME/continue-local-check"
if [ -e "$HOME/continue-local-check/greeting.py" ] || [ -e "$HOME/continue-local-check/greeting.original.py" ]; then
  printf '%s\n' 'Scratch file already exists; inspect it or choose a new directory.'
else
  cat > "$HOME/continue-local-check/greeting.py" <<'PY'
def greeting(name):
    return "Hello, " + name

if __name__ == "__main__":
    assert greeting("Ada") == "Hello, Ada"
    print(greeting("Ada"))
PY
  if python3 "$HOME/continue-local-check/greeting.py"; then
    cp "$HOME/continue-local-check/greeting.py" "$HOME/continue-local-check/greeting.original.py"
  else
    printf '%s\n' 'Original check failed; inspect the file before requesting an edit.'
  fi
fi

原始检查应在断言通过后输出 Hello, Ada 。打开 greeting.py 所在文件到 VS Code,仅选中函数,再按 Cmd+I 使用 Continue Edit。请它添加简短的文档字符串,同时保持返回文本不变。将流式显示的行内 diff 与 greeting.original.py比较;针对选中代码使用 Edit 时,可能把整个文件带入上下文,因此只能使用自己拥有的非敏感文件。模型可能修改超出要求的内容。检查每个变更行,用 Cmd+Opt+Y接受合适建议,或用 Cmd+Opt+N拒绝。Continue 也提供全部接受和全部拒绝的控件,但较小的 diff 更便于逐项检查。

接受后保存文件,然后运行:

Terminal
diff -u "$HOME/continue-local-check/greeting.original.py" "$HOME/continue-local-check/greeting.py" || true
python3 "$HOME/continue-local-check/greeting.py"

检查 diff 是否仅包含预期修改,并确认原始断言仍通过。如果拒绝建议,请核实文件与原件一致并记录拒绝;不要报告已完成修改。文件、diff 及独立 Python 检查,比模型对自身工作的描述更可靠。

4. 明确各项边界

Ollama、Open WebUI 和 Continue 各有独立设置。若只想禁用 Ollama 云功能,请在运行 Ollama 服务器的账户下,将以下字段加入 ~/.ollama/server.json,同时保留已有 JSON 字段。如果新建文件,完整内容如下:

JSON
{
  "disable_ollama_cloud": true
}

重启 Ollama 应用,然后检查其服务器日志:

Terminal
grep 'Ollama cloud disabled: true' "$HOME/.ollama/logs/server.log"

这份 Ollama FAQ 说明了该日志行。如果找不到,请先重新检查哪个 Mac 账户运行 Ollama、JSON 内容以及是否重启,再宣称云功能已禁用。此设置不会检查 Open WebUI 的其他提供方、可选在线功能或 Continue 的流量。Continue 的 离线指南 要求关闭 Allow Anonymous Telemetry,使用本地模型并重启 VS Code。使用敏感资料前,检查每个应用的连接。单凭回环 URL 不构成网络审计。

请按实际用途检查 Docker Desktop 许可证 。个人、教育、非商业开源用途,以及满足以下条件的小企业可免费使用: 员工少于 250 人,并且年收入低于 1,000 万美元。较大组织和政府机构的专业用途需要付费订阅。模型的 Apache 2.0 许可证是独立的。磁盘空间、内存、下载带宽和电力仍需考虑;本指南没有测量任何成本或性能结果。

若只需较简短的 Ollama 终端及 API 流程,请参阅 运行本地 Ollama 模型并检查其聊天 API。 用本地 Ollama 模型完成一次经过检查的 Claude Code 修改 介绍另一种编程客户端。

来源与延伸阅读