1. WSL2 里跑 open-web UI,Key 散落一地怎么收场
如果你在 WSL2 里装了 Ollama,又用 pip 把 open-web UI 拉起来,大概率会遇到一个很现实的问题:模型服务、语音服务、图像生成、代码助手,每个工具都要单独配一遍地址和密钥。Ollama 本身不校验身份,端口一旦暴露就裸奔;Continue.dev 想接本地模型,又得在 config.json 里硬编码一个假 Key;ComfyUI 的 workflow 节点 ID 对不上,图像生成按钮点了没反应。这些坑我基本都踩过一遍。
这篇内容聚焦一个具体场景:WSL2 下 open-web UI 对接 Ollama 的本地部署,用 TaoToken 的统一 Key 把多工具认证收口,同时给出可复制的 config.toml 与 settings.json 骨架、连通性验证动作和报错排查清单。适合已经在 WSL2 里跑通 Ollama、想进一步把 open-web UI 用起来的人,也适合被多套 Key 搞烦、想统一管理的开发者。Python 3.11 是 open-web UI 的硬性前提,ComfyUI 和 Continue.dev 作为扩展能力一并覆盖。
核心检索词先摆出来:open-web UI 是什么?它是一个可私有化部署的 AI 交互界面,能聊天、翻译、联网搜索、语音转文字、文本转语音、文生图、接代码助手。能做什么?把本地 Ollama 模型包装成类 ChatGPT 的体验。适合谁?有 WSL2 环境、想本地跑模型、又不想每个工具单独配认证的人。
2. TaoToken 前置:统一 Key 的接入位置
TaoToken 在这里扮演的角色是统一认证入口。官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点是 https://taotoken.net/api ,注意 API 地址不加 UTM 参数。你需要先去控制台生成一个 Key,控制台入口在 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,API Keys 管理页在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。生成后复制以 sk- 开头的字符串,后面所有工具都复用这一个 Key。
接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,模型对话入口在 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 。如果你长期做编码或 Agent 类任务,Coding Plan 页面在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,ClaudeCodeAnthropic 相关在 https://taotoken.net/claudecode-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claudecode-anthropic&utm_campaign=rewrite 。
注意:Ollama 默认不校验身份,所以不要把 11434 端口直接暴露到公网。统一 Key 的意义在于,让 open-web UI 作为中间层做认证,下游工具通过 open-web UI 的 OpenAI 兼容端点访问模型,而不是直连 Ollama。
3. 可复制配置:config.toml 与 settings.json 骨架
3.1 WSL2 环境准备与 open-web UI 安装
先确认 WSL2 里 Python 版本。open-web UI 需要 Python 3.11,低于这个版本会在依赖解析阶段报错。
python3 --version # 如果不是 3.11,用 deadsnakes 或 pyenv 装一个 sudo apt update sudo apt install python3.11 python3.11-venv python3.11-dev -y创建虚拟环境并安装:
python3.11 -m venv ~/owui-venv source ~/owui-venv/bin/activate pip install --upgrade pip pip install open-webui启动服务:
open-webui serve --host 0.0.0.0 --port 8080浏览器访问 http://localhost:8080 。如果 WSL2 的端口转发没生效,在 Windows PowerShell 里执行wsl hostname -I拿到 WSL2 IP,用那个 IP 加 8080 访问。
3.2 config.toml 骨架
open-web UI 的配置文件默认在~/.open-webui/config.toml,没有就手动建。下面这份骨架把 Ollama 地址、统一 Key、联网搜索、语音服务都收在一起:
[ollama] base_url = "http://127.0.0.1:11434" api_key = "sk-你的TaoToken统一Key" [openai] base_url = "https://taotoken.net/api" api_key = "sk-你的TaoToken统一Key" [web_search] enabled = true engine = "searxng" searxng_url = "http://127.0.0.1:8082/search?q=<query>" result_count = 5 concurrent_requests = 2 [audio] stt_engine = "openai" stt_base_url = "http://127.0.0.1:8000/v1" stt_api_key = "sk-你的TaoToken统一Key" stt_model = "deepdml/faster-whisper-large-v3-turbo-ct2" tts_engine = "openai" tts_base_url = "http://127.0.0.1:8001/v1" tts_api_key = "sk-你的TaoToken统一Key" tts_model = "tts-1" tts_voice = "alloy" [image_generation] enabled = true engine = "comfyui" comfyui_base_url = "http://127.0.0.1:8188"3.3 settings.json 骨架(Continue.dev 用)
Continue.dev 的 config.json 在 VSCode 里通过设置图标打开。核心是把 provider 改成 openai,apiBase 指向 open-web UI 的/ollama/v1端点,apiKey 填统一 Key:
{ "models": [ { "title": "qwen2.5 on WSL2", "provider": "openai", "model": "AUTODETECT", "useLegacyCompletionsEndpoint": false, "apiBase": "http://127.0.0.1:8080/ollama/v1", "apiKey": "sk-你的TaoToken统一Key" } ], "tabAutocompleteModel": { "title": "Starcoder 3b", "provider": "openai", "model": "starcoder2:3b", "useLegacyCompletionsEndpoint": false, "apiBase": "http://127.0.0.1:8080/ollama/v1", "apiKey": "sk-你的TaoToken统一Key" } }提示:open-web UI 的 API Key 在「设置 -> 账户 -> API 密钥」里生成,以 sk- 开头。如果你用 TaoToken 统一 Key,这里填同一个即可,下游工具不用再各自维护。
4. 验证请求与成功结果
4.1 验证 Ollama 连通性
在 WSL2 终端里先确认 Ollama 活着:
curl http://127.0.0.1:11434/api/tags返回 JSON 里能看到模型列表,说明 Ollama 正常。如果连接被拒,检查ollama serve是否在跑。
4.2 验证 open-web UI 的 OpenAI 兼容端点
open-web UI 暴露了/ollama/v1路径,兼容 OpenAI 规范。用 curl 测一下:
curl http://127.0.0.1:8080/ollama/v1/models \ -H "Authorization: Bearer sk-你的TaoToken统一Key"返回模型列表 JSON,说明认证和路由都通了。再测一次对话补全:
curl http://127.0.0.1:8080/ollama/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-你的TaoToken统一Key" \ -d '{ "model": "qwen2.5:7b", "messages": [{"role": "user", "content": "用一句话说明WSL2是什么"}], "stream": false }'返回里有choices[0].message.content,说明整条链路通了。
4.3 验证联网搜索
SearXNG 用 docker 起在 8082 端口后,浏览器打开 http://localhost:8082 确认能搜。然后在 open-web UI 的「管理员面板 -> 设置 -> 联网搜索」里启用,引擎选 searxng,URL 填http://127.0.0.1:8082/search?q=<query>。新开对话,点加号启用联网搜索,问一个时效性问题,比如「今天有什么 AI 新闻」,看回复里是否带引用来源。
4.4 验证语音与图像
语音转文本用 faster-whisper-serve,docker 起在 8000 端口。open-web UI 的「设置 -> 语音」里,STT 模型填deepdml/faster-whisper-large-v3-turbo-ct2,API Key 随便填(该服务不校验)。文本转语音用 openedai-speech,端口从 8000 改到 8001 避免冲突,TTS 模型填tts-1。设置好后点右下角呼叫按钮,带麦克风就能对话。
图像生成需要 ComfyUI 开启 DEV Mode,导出 API Format 的 workflow JSON,在 open-web UI 的「设置 -> 图像」里上传,填好节点 ID。对话里输入提示词,点图像生成按钮,ComfyUI 开始出图。
5. 本篇常见错排查清单
5.1 open-web UI 启动报 Python 版本错误
报错关键词:Requires-Python >=3.11。原因是你用系统默认 Python 3.10 或更低。解决:显式用python3.11 -m venv建环境,激活后再 pip install。
5.2 WSL2 里 localhost 在 Windows 浏览器打不开
WSL2 的网络是 NAT 模式,Windows 的 localhost 不一定转发到 WSL2。解决:在 PowerShell 里跑wsl hostname -I拿 IP,用http://<WSL2_IP>:8080访问。或者用netsh interface portproxy做端口转发。
5.3 Ollama 连接测试失败
open-web UI 里「设置 -> 外部连接」填 Ollama 地址后点测试,报连接失败。检查三点:Ollama 是否在 WSL2 里跑(ps aux | grep ollama);地址是否用127.0.0.1而不是localhost(WSL2 里 localhost 解析有时出问题);防火墙是否拦了 11434。
5.4 Continue.dev 模型列表为空
config.json 里 apiBase 写成http://localhost:8080/ollama/v1,但 Continue 跑在 Windows 侧,localhost 指向 Windows 而非 WSL2。解决:改成 WSL2 的 IP,或者确认 VSCode 是连在 WSL2 远程窗口里跑的。另外model字段填AUTODETECT让 open-web UI 自动选,别硬编码一个 Ollama 里不存在的模型名。
5.5 ComfyUI 图像生成按钮无反应
最常见原因是 workflow JSON 不是 API Format。必须在 ComfyUI 设置里开启 DEV Mode,才会出现「Save (API Format)」选项。另外节点 ID 要和 open-web UI 里填的对应,改过 workflow 后节点 ID 会变,需要重新导出并更新。
5.6 SearXNG 搜索返回空
检查settings.yml里formats是否包含json,open-web UI 需要 JSON 格式。另外limiter设为 false,否则会限流。docker compose 里端口映射8082:8080,确认没被占用。
6. 把 Key 收口之后,日常怎么用
统一 Key 的价值在长期使用里才体现出来。你可以在 open-web UI 里把 Ollama 模型、TaoToken 的模型对话、语音、图像全部挂上,Continue.dev 通过/ollama/v1复用同一个 Key,不用在四五个配置文件里来回改。模型对话入口在 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,API Keys 在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。长期编码任务可以看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。
一个实用技巧:把~/.open-webui/config.toml和 Continue 的 config.json 用 git 管起来,换机器时直接 clone,Key 用环境变量注入,避免明文写死在文件里。WSL2 重启后 Ollama 和 open-web UI 不会自动起,写个 systemd user service 或者简单的启动脚本,省得每次手动敲命令。