做本地大模型(Local LLM)折腾久了,大家应该都绕不开 Ollama。东西是好东西,但天天对着黑底白字的命令行窗口(Terminal)聊天,体验确实差点意思,尤其是想发个图、传个文件的时候,命令行就捉襟见肘了。
最近在 云栈社区 有个项目被大家反复安利 —— Open WebUI(以前叫 Ollama WebUI)。
我也跟风部署了一套,用了几天,感觉这玩意儿确实有点东西。它不光是给 Ollama 套了个好看的壳,更重要的是,它把咱们本地玩 AI 的很多痛点给顺手解决了。
今天就从全栈的角度,聊聊这个项目到底好在哪,以及它的代码有什么值得咱们抄作业的地方。
01 为什么推荐它?
市面上给 LLM 做 UI 的项目很多,但 Open WebUI 胜在“完整”。
以前我想在本地搞个“知识库对话”,得自己写 Python 脚本,装 LangChain,配向量库,折腾半天环境。
但在 Open WebUI 里,这事儿变得异常简单:直接把 PDF 或者 Word 文档往聊天框里一拖,后台自动给你切片、存向量。下一秒,你就能针对这文档提问了。零代码,开箱即用,这点对非算法背景的开发者非常友好。
而且它支持 PWA。我在服务器上部署好,手机浏览器打开,添加到主屏幕,用起来跟原生 App 没啥区别,随时随地都能连回家里的 GPU 跑模型。
02 技术栈:SvelteKit + FastAPI
扒了一下源码,发现作者的技术选型挺有意思,也很务实。
前端没用 React,用了 Svelte
这其实是个很聪明的选择。咱们都知道,大模型吐字是流式(Streaming)的,一秒钟可能蹦出来几十个 Token。如果用 React,这种高频更新很容易触发大量的虚拟 DOM 对比,配置不好就容易卡顿。
而 前端框架 Svelte 是编译型的,没有虚拟 DOM 的包袱,处理这种实时数据流,性能优势很明显,打字机效果非常丝滑,风扇也不狂转。
后端就是标准的 Python 全家桶
后端用了 FastAPI。做 AI 应用,Python 是避不开的。FastAPI 原生支持异步(AsyncIO),正好对上 LLM 推理的异步特性。
我看代码里,作者处理 SSE(Server-Sent Events)推流的部分写得很规整,比 WebSocket 轻量,断线重连机制也做好了。如果你想学怎么用 Python 写流式接口,这项目的代码绝对值得读一读。
03 甚至还能“套娃”
Open WebUI 不仅支持本地的 Ollama,还能填 OpenAI 的 Key。
这意味着,你可以在一个界面里,左边选本地的 Llama 3 跑隐私数据,右边切 GPT-4 跑复杂逻辑。它甚至支持 Function Calling,能让模型去联网搜索或者画图。
这就很灵活了,相当于给自己搭了一个私有的、聚合版的 ChatGPT。
04 写在最后
总的来说,Open WebUI 是个完成度极高的开源项目。无论你是想自己在本地舒服地跑模型,还是想研究 人工智能 应用的全栈架构,它都是个极好的参考案例。
如果你手头有闲置的算力,强烈建议部署一个试试,体验绝对比命令行强太多了。
关注我,获取更多全栈与 AI 领域的硬核开源盘点。
标签:#OpenWebUI #本地大模型 #Svelte #FastAPI #Github
🔗 项目传送门
- GitHub 地址:
https://github.com/open-webui/open-webui
- 官方文档:
https://docs.openwebui.com/
- AI教程:
https://yunpan.plus/f/29