OpenUI:用自然语言描述就能生成可预览 UI 的开源 v0 平替|部署与使用全指南
适用读者:想自己跑一个"说一句话就出界面"工具的前端/全栈开发者、想在公司内网用开源版 v0 原型工具的团队、希望同时接 OpenAI/Claude/Gemini/Groq/本地 Ollama 的玩家。本文所有命令、端口、环境变量均来自官方 README,可直接照做;版本类信息以官方仓库最新说明为准。

一、项目简介
OpenUI 是 Weights & Biases(W&B)开源的一个本地 Web 应用:你用自然语言描述想要的界面,它实时渲染出 HTML;可以继续用自然语言让它改样式、改布局,也可以一键把 HTML 转成 React、Svelte、Web Components 等框架代码。官方 README 自己的定位是:"像 v0.dev,但开源,且没那么精致"——意思是能力方向对标 v0,但作为开源项目,打磨程度和云服务还有差距。
它的后端是 Python(FastAPI 风格的
python -m openui),前端是一个独立的 Web 工程,模型层走 LiteLLM,所以接哪家大模型都只是配环境变量的事。W&B
自己也在拿它做下一代 LLM 应用工具的内部原型,所以仓库里除了用户用的 Web
界面,还带了 dev container、Codespace、Gitpod
三套开箱配置,方便你直接把开发环境拉到云上。
核心信息一览表
| 项目 | 内容 |
|---|---|
| 仓库 | https://github.com/wandb/openui |
| 官方在线 Demo | https://openui.fly.dev |
| 默认服务端口 | 7878(Docker / 源码直跑) |
| 开发模式前端端口 | 5173(npm run dev) |
| 包管理 | 后端 uv,前端 npm |
| 可选运行方式 | Docker 镜像 / Docker Compose / 源码直跑 |
| 模型接入 | OpenAI、Groq、Gemini、Anthropic、Cohere、Mistral、任意 OpenAI 兼容端点、Ollama |
适用场景
- 产品/前端快速做一个可点的原型,边说边调,省去手写 HTML 的时间;
- 把一段现成 HTML 转成 React / Svelte / Web Components,方便搬进已有工程;
- 公司内网部署,Key 不出门,不把需求草图传到第三方 SaaS;
- 配合本地 Ollama(如 Llava)跑离线/低成本方案;
- 想研究"LLM 怎么把自然语言直接编译成可渲染界面"这条链路,源码里后端是 Python、前端独立,适合当阅读材料。
能力边界
- 它生成的是单个 UI 组件/页面,不是完整全栈应用,不写后端逻辑与数据库;
- 官方 README 明确说开源版"没 v0 精致",复杂动效与像素级还原仍需手改;
- 多模态图片输入依赖具体模型(Ollama 侧官方点名 Llava 是少数支持图片的模型之一);
- Docker Compose 自带 Ollama 的方案官方备注"很可能很慢",Mac 建议原生跑 Ollama 利用 M1/M2 加速;
- 选模型时如果只配了一家 Key,模型选择器里就只看得到那一家;想横向比模型效果就把多家 Key 一起配上。
二、功能特性
- 自然语言出 UI:描述想要什么,实时渲染 HTML 预览;官方 README 的原话是"用你的想象力描述 UI,然后看着它被实时渲染出来";
- 多轮迭代:继续用自然语言提修改意见,例如"把按钮换成圆角""加个暗色模式开关",模型在原页面上增量改,不是每次重画;
- 框架互转:把已经成型的 HTML 一键转成 React、Svelte、Web Components 等,方便直接搬进前端工程;
- 多模型统一接入:基于 LiteLLM,OpenAI / Groq / Gemini / Anthropic / Cohere / Mistral 全部通过环境变量切换,不用为每家模型改代码;
- OpenAI 兼容端点:通过
OPENAI_COMPATIBLE_ENDPOINT+OPENAI_COMPATIBLE_API_KEY接 localai、vLLM、各种 OpenAI 兼容中转,在 UI 的模型选择器里会归到 LiteLLM 分组下; - Ollama 本地模型:默认连
http://127.0.0.1:11434,可改OLLAMA_HOST;Docker 里用http://host.docker.internal:11434指向宿主机;官方 README 特别提示,Ollama 侧目前支持图片输入的模型不多,Llava 是其中之一; - 自定义 LiteLLM 配置:默认根据环境变量自动生成
LiteLLM 配置;想完全接管,就放一个自己的
litellm-config.yaml覆盖; - Dev Container / Codespace / Gitpod 三开箱:仓库自带
.devcontainer/devcontainer.json,GitHub Codespace 选 New with options、配好OPENAI_API_KEYsecret(或填xxx走 Ollama,至少要 16GB 内存)就能跑;Gitpod 也有一键按钮; - 在线 Demo:官方挂了一个 https://openui.fly.dev 可以零部署先玩,再决定要不要自托管。
三、官方界面预览
下面这张图来自官方 README,展示在 OpenUI 设置齿轮里选择 Ollama 模型的界面。

四、官方链接汇总
| 资源 | 地址 |
|---|---|
| GitHub 仓库 | https://github.com/wandb/openui |
| 在线 Demo | https://openui.fly.dev |
| OpenAI Key | https://platform.openai.com/api-keys |
| Groq Key | https://console.groq.com/keys |
| Gemini Key | https://aistudio.google.com/app/apikey |
| Anthropic Key | https://console.anthropic.com/settings/keys |
| Ollama 下载 | https://ollama.com/download |
| Llava 模型 | https://ollama.com/library/llava |
| LiteLLM 文档 | https://docs.litellm.ai/docs/ |
五、前置要求
| 项 | 要求 |
|---|---|
| Docker 路线 | 本机装好 Docker;命令用 docker run /
docker-compose |
| 源码路线 | 装好 git 与 uv;后端用 `uv sync` 建虚拟环境 |
| 模型 Key | 至少一家:OPENAI_API_KEY / GROQ_API_KEY /
GEMINI_API_KEY / ANTHROPIC_API_KEY /
COHERE_API_KEY / MISTRAL_API_KEY |
| 本地模型(可选) | 装 Ollama 并 ollama pull llava;默认地址
http://127.0.0.1:11434 |
| 浏览器 | 任意现代浏览器,访问 http://localhost:7878 |
六、安装部署
方式 A:Docker 单容器(官方推荐)
官方 README 原文照抄:
export ANTHROPIC_API_KEY=xxx
export OPENAI_API_KEY=xxx
docker run --rm --name openui -p 7878:7878 \
-e OPENAI_API_KEY -e ANTHROPIC_KEY \
-e OLLAMA_HOST=http://host.docker.internal:11434 \
ghcr.io/wandb/openui注意:上面
-e后面的变量名必须与你export的一致;本文按 README 原样写OPENAI_API_KEY、ANTHROPIC_API_KEY,仅在示例里省写。启动后访问 http://localhost:7878 。
自定义 LiteLLM 配置的 Docker 写法:
docker run -n openui -p 7878:7878 \
-v $(pwd)/litellm-config.yaml:/app/litellm-config.yaml \
ghcr.io/wandb/openui方式 B:源码直跑(Python + uv)
git clone https://github.com/wandb/openui
cd openui/backend
uv sync --frozen --extra litellm
source .venv/bin/activate
# 配任意你想用的模型 Key
export OPENAI_API_KEY=xxx
python -m openui从源码启用 LiteLLM 模式:
pip install .[litellm]
export ANTHROPIC_API_KEY=xxx
export OPENAI_COMPATIBLE_ENDPOINT=http://localhost:8080/v1
python -m openui --litellm方式 C:Docker Compose(自带 Ollama)
仓库根目录执行:
docker-compose up -d
docker exec -it openui-ollama-1 ollama pull llava访问 http://localhost:7878 。官方 README 提示:如果你已经在 shell
里导出了 OPENAI_API_KEY,把 compose 文件里那行
OPENAI_API_KEY=xxx 的 =xxx
去掉即可;改了前后端代码要重新 docker-compose build。
方式 D:GitHub Codespace / Gitpod(零本机环境)
仓库自带 .devcontainer/devcontainer.json。在 GitHub 上选
Code → Codespaces → New with options,区域选 US West 启动更快;把
OPENAI_API_KEY 配成 secret(想用 Ollama 就填
xxx,内存至少 16GB)。进去后一个终端跑
python -m openui --dev,另开终端
cd /workspaces/openui/frontend && npm run dev,访问
5173 端口那个服务。Gitpod 用户也有一键按钮,但要先在 Gitpod 用户变量里把
OPENAI_API_KEY 配好、scope 设到
wandb/openui。
七、配置项说明
| 环境变量 | 作用 |
|---|---|
OPENAI_API_KEY |
启用 OpenAI 模型 |
GROQ_API_KEY |
启用 Groq 极速模型(在导航栏齿轮里选用) |
GEMINI_API_KEY |
启用 Google Gemini |
ANTHROPIC_API_KEY |
启用 Anthropic Claude |
COHERE_API_KEY |
启用 Cohere |
MISTRAL_API_KEY |
启用 Mistral |
OPENAI_COMPATIBLE_ENDPOINT |
任意 OpenAI 兼容端点(如 localai、vLLM、中转) |
OPENAI_COMPATIBLE_API_KEY |
上面那个端点的 Key |
OLLAMA_HOST |
Ollama 地址,默认 http://127.0.0.1:11434;Docker 里填
http://host.docker.internal:11434 |
OPENUI_LITELLM_CONFIG |
自定义 LiteLLM 配置文件路径 |
LiteLLM 配置文件查找顺序(官方 README):
- 当前目录下的
litellm-config.yaml; - Docker 容器内的
/app/litellm-config.yaml; - 环境变量
OPENUI_LITELLM_CONFIG指向的任意路径。
源码模式下启用 LiteLLM:
pip install .[litellm]
export ANTHROPIC_API_KEY=xxx
export OPENAI_COMPATIBLE_ENDPOINT=http://localhost:8080/v1
python -m openui --litellmGroq 是官方 README 单独点名的"超快速"通道:把
GROQ_API_KEY 配好后,在导航栏齿轮里选 Groq
模型即可,不用改代码。
八、使用流程
- 按上面任一方式启动,确认监听 7878;
- 浏览器打开 http://localhost:7878 ;
- 点导航栏齿轮图标,在设置里选模型(Groq、Ollama 等都在这里选;选 Groq
前要先把
GROQ_API_KEY传进进程); - 在输入框用自然语言描述你要的界面,例如"做一个深色主题的登录卡片,带邮箱、密码和登录按钮";
- 右侧实时看到渲染出来的 HTML;
- 继续用自然语言让它改:"把按钮改成圆角、加个忘记密码链接""把整张卡片居中,宽度限到 400px";
- 满意后选择转成 React / Svelte / Web Components,把代码拷进自己的前端工程;
- 如果是在做二次开发,走 dev 模式:后端
python -m openui --dev,另开一个终端cd frontend && npm run dev,前端会起在 5173 端口,前后端都热更新,改完直接在浏览器里看效果。
九、常用运维 / 更新命令
# Docker 路线拉新镜像
docker pull ghcr.io/wandb/openui
# 再按上面 docker run 命令重启容器
# 源码路线更新
git pull
cd backend
uv sync --frozen --extra litellm
# Docker Compose 路线
docker-compose pull
docker-compose up -d
# 本地 Ollama 拉新模型
ollama pull <model-name>
# 拉完后在 OpenUI 设置齿轮里就能看到小提示:OpenUI 启动后默认只监听容器内的 7878;Docker 路线一定要把
-p 7878:7878写对,否则宿主机浏览器打不开。源码直跑python -m openui也是监听 7878,直接访问 http://localhost:7878 即可。改了任何环境变量都要重启进程才生效。
十、常见故障排查
| 现象 | 原因 / 处理 |
|---|---|
| 7878 端口被占 | docker run 时把 -p 7878:7878
左边换成别的端口,如 -p 8080:7878 |
| Docker 里连不上宿主机 Ollama | 没设 OLLAMA_HOST;Docker 内必须填
http://host.docker.internal:11434,不能写
127.0.0.1 |
| 模型列表里看不到 Ollama | 进容器/本机执行 ollama list;没起来就开新终端跑
ollama serve,再 ollama pull llava |
| OpenAI 兼容端点连不上 | 确认 OPENAI_COMPATIBLE_ENDPOINT 路径里带
/v1,并同时设了 OPENAI_COMPATIBLE_API_KEY |
| Docker Compose 起得极慢 | 官方 README 明确备注自带 Ollama 的 compose 路线"很可能很慢";有 GPU 要换支持 GPU 的 ollama tag,Mac 建议原生跑 Ollama |
| 改了前端/后端代码没生效 | 源码路线要走 dev 模式:后端
python -m openui --dev,另开终端
cd frontend && npm run dev(5173 端口);compose
路线要 docker-compose build |
| 模型选择里没有想要的模型 | 对应环境变量没 export 进容器;Docker 用 -e VAR_NAME
透传,不要写在 Dockerfile 里 |
| 想用 Groq 但找不到入口 | 先 export GROQ_API_KEY=xxx
再启动;然后点导航栏齿轮,在设置里选 Groq 模型 |
| Codespace 里 Ollama 没自动起来 | 开新终端跑 ollama serve,再 ollama list
看是否已有 llava;仓库在 Codespace 启动时会自动拉 llava |
| 改了前端代码但 7878 端口还是旧样子 | 7878 是打包后的产物;二次开发必须走 dev 模式访问 5173,或在 Docker
Compose 路线下 docker-compose build |
| 想接公司内部模型网关 | 把网关地址填进 OPENAI_COMPATIBLE_ENDPOINT(路径带
/v1),Key 填
OPENAI_COMPATIBLE_API_KEY,模型会出现在 LiteLLM 分组里 |
| 7878 已经被别的服务占了 | docker run 时左边端口换一个,如
-p 8080:7878;浏览器访问的是左边那个端口 |
| 生成的 UI 引用了外网 CDN | 这是模型默认行为,拷代码进生产前把 CDN 换成自己的资源或内网镜像 |
| 想关掉自动生成的 LiteLLM 配置 | 在三个查找位置之一放自己的
litellm-config.yaml,会自动覆盖默认配置 |
十一、风险与责任使用声明
- 本文所有命令、端口(7878 / 5173 / 11434)、环境变量名均来自官方
README,不构成第三方担保;镜像 tag、依赖版本以
ghcr.io/wandb/openui与仓库最新说明为准; - 调用 OpenAI / Anthropic / Gemini / Groq / Cohere / Mistral
都会产生真实 API 账单,请在各平台控制台设置额度;Key 通过
-e或export传入,不要写进镜像或公开仓库; - 生成的 UI 代码可能引用外网 CDN、含未转义内容或不安全的事件绑定,上线前必须自行审计;
- 本工具用于生成你自己的产品界面;不要用它复刻受版权保护的商业产品 UI、品牌组件或未经授权的设计稿;
- 开源版按其仓库许可证发布,与官方在线 Demo https://openui.fly.dev 是同一代码的不同部署形态;
- 用 Ollama 跑本地模型时,记得
ollama pull下来的模型会占磁盘空间;官方 README 点名 llava 是少数支持图片输入的 Ollama 模型,纯文本模型只能做纯文本到 UI 的生成。