nextjs-ollama-llm-ui
为 Ollama 打造的类 ChatGPT Web UI,支持本地部署、离线使用、模型管理和对话历史
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
为 Ollama 打造的类 ChatGPT Web UI,支持本地部署、离线使用、模型管理和对话历史
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
在本地跑大语言模型,命令行交互体验往往令人沮丧。你可能在终端里对着 ollama run llama3 敲字,输出的 JSON 格式化混乱,复制代码块还要手动处理缩进,换个模型要从零重新开始对话。这种体验对于想要快速实验 prompt 的开发者、或希望有个干净界面与 AI 聊天的普通用户来说,都是一道门槛。
jakobhoeg/nextjs-ollama-llm-ui 的出现,就是为了彻底解决这个问题。它的核心理念是:让本地大模型拥有和 ChatGPT 一模一样的 Web 交互体验,无需任何云端 API,无需互联网连接,数据完全留在本地。

图1:项目运行效果演示,支持深色/浅色模式切换
这是一个个人 hobby 项目,作者是 jakobhoeg,目前 GitHub 累计获得 1,415 Stars,330 次 Fork,社区活跃度相当不错。项目明确声明:「如果你追求更完整的产品级体验,建议去看 Open WebUI」——这种坦诚的定位反而让用户能更准确地判断它是否适合自己的场景。
项目基于 Ollama(本地 LLM 运行框架)和 Next.js 14 构建,官方自称的目标是成为「最简单上手的本地大模型界面」,不需要繁琐的配置,clone 下来就能用。
项目采用 localStorage 存储所有对话记录,无需额外部署数据库。聊过的内容关闭浏览器后依然在,切换设备需要手动导出。侧边栏展示历史会话列表,点击即可无缝恢复对话。
Ollama 支持海量本地模型(Llama 3、Mistral、Gemma、Codellama 等),项目提供下拉菜单一键切换,切换后自动带上系统 prompt 的上下文切换,不需要用户手动管理。
支持在对话中上传图片,调用支持视觉的模型(如 llava、bakllava)进行多模态理解。这意味着可以在本地跑一个「看图回答」的功能,不依赖任何云端 API。
对话中遇到代码块时,项目使用 react-code-blocks 渲染高亮配色,并提供一键复制按钮——这对于调试 prompt、分享代码片段来说非常实用。
内置 Pull/Delete 模型表单,用户可以直接在 Web UI 里下载新模型或清理磁盘空间,不需要回到终端执行 ollama pull 命令。
集成了 Web Speech API,支持语音输入。对于懒得打字或需要快速记录的场景,这个功能很贴心。
内置 next-themes 支持深色/浅色一键切换,自动跟随系统偏好。
| 层级 | 技术选型 |
|---|---|
| 框架 | Next.js 14 (App Router) |
| UI 组件 | shadcn/ui (基于 Radix UI) |
| 样式 | Tailwind CSS |
| 动画 | Framer Motion |
| 状态管理 | Zustand |
| LLM 集成 | Vercel AI SDK (ai v4) + LangChain + ollama-ai-provider |
| 图标 | Lucide React |
| 表单验证 | React Hook Form + Zod |
| 数据查询 | TanStack React Query |
项目在 Next.js App Router 下创建了三个 API 路由,充当 Ollama 后端的代理:
/api/chat — 核心对话路由,调用 ai SDK 的 streamText,通过 ollama-ai-provider 与 Ollama 后端通信,返回 Server-Sent Events(SSE)流式响应/api/tags — 获取 Ollama 已安装的模型列表/api/model — 管理模型(pull/delete)这种设计的精妙之处在于:前端只需调用本地 /api/chat,而 API 路由负责转发给 Ollama(默认 localhost:11434),天然解决了跨域问题。
使用 Zustand 管理全局状态(当前模型、对话历史、用户设置等),数据最终持久化到 localStorage。这意味着刷新页面状态不丢,且完全不需要服务端数据库。
项目引入了 @langchain/core 和 langchain,支持更复杂的 Chain 构造。虽然 README 未详细展开,但这个集成意味着项目具备扩展为 RAG(检索增强生成)等复杂 AI 工作流的能力。
# Ollama 在本机
docker run -d -p 8080:3000 \
--add-host=host.docker.internal:host-gateway \
-e OLLAMA_URL=http://host.docker.internal:11434 \
--name nextjs-ollama-ui \
--restart always \
jakobhoeg/nextjs-ollama-llm-ui:latest
预构建镜像已发布到 Docker Hub,两步搞定:安装 Ollama → 运行这条命令。--add-host 解决了容器内访问宿主机 Ollama 的经典网络问题。
git clone https://github.com/jakobhoeg/nextjs-ollama-llm-ui
cd nextjs-ollama-llm-ui
mv .example.env .env
npm install
npm run dev
# 访问 http://localhost:3000
仅需 Node.js 18+,零其他依赖。
Dockerfile 使用多阶段构建,最终镜像基于 node:20-alpine,运行时通过 OLLAMA_URL 环境变量配置 Ollama 地址,支持连接远程 Ollama 实例。
项目定位是「简单易用」,因此缺少一些进阶功能:无多用户支持(localStorage 无法跨设备同步)、无对话标签/收藏、无文件上传(图片除外)、无插件系统。如果你需要这些,Open WebUI 确实更合适。
项目本身是前端界面,LLM 的输出质量完全由 Ollama 和所选模型决定。Mistral-7B 等小模型在某些任务上远弱于 GPT-4,用户需要自行评估模型是否满足需求。
视觉功能需要用户确认 Ollama 是否已安装了支持 vision 的模型(如 llava),没有模型时不会自动提示失败原因。
随着 Llama 3、Mistral、Gemma 等开源模型的持续进步,「本地跑大模型」已经从极客玩具走向普通用户的桌面。nextjs-ollama-llm-ui 处于这个趋势的前沿:它把本地 LLM 的使用门槛降低到「零配置」,对于以下场景尤其有价值:
截至目前,项目在 GitHub 上已有 1,415 Stars,330 次 Fork,21 个 open issues,保持着活跃的维护节奏。随着 Ollama 本身生态的壮大,这类前端工具的需求会持续增长。