OpenUI Forge — Ruby 用于构建生成式 UI 应用,采用 React 前端加 Ruby on Rails 后端的组合。其核心机制是通过 Rails 的 ActionController::Live 实现 SSE 流式输出,使用 Ruby 标准库 Net::HTTP 把 OpenAI API 的原生 SSE 数据流逐块转发给浏览器,从而让用户实时看到文本逐 token 生成的效果。
主要能力与使用方式:
后端部分提供 Gemfile 配置(rails ~> 8.1、puma >= 6.0,可选 dotenv-rails),并说明 Net::HTTP 属于标准库、无需额外 HTTP 客户端 gem。ChatController 中包含 ActionController::Live 与 skip_forgery_protection,设有 CORS 头与预检处理,从环境变量读取 OPENAI_BASE_URL(默认 https://api.openai.com/v1)与 OPENAI_MODEL(默认 gpt-5.5)。控制器在服务端预置系统提示词,不信任客户端传入的系统消息;设置 text/event-stream、no-cache、Last-Modified 和 X-Accel-Buffering: no 等响应头,其中 Last-Modified 用于让 Rack::ETag 放行响应体、避免整体缓冲;Net::HTTP 设置 read_timeout: nil 以禁用默认 60 秒读超时;对非 200 响应写出错误事件与 [DONE],对正常响应则把上游 SSE 字节原样写入并刷新;在 ensure 块中始终关闭流,避免 socket 泄漏。路由文件配置了 POST /api/chat 和 OPTIONS 预检。
前端示例为一个 "use client" 的 Next.js 页面,使用 @openuidev/react-ui 的 FullScreen 组件、openuiChatLibrary 组件库、@openuidev/react-headless 的 openAIAdapter() 与 openAIMessageFormat,apiUrl 指向 http://localhost:3001/api/chat。文档特别指出此处应使用 openAIAdapter(),而 openAIReadableStreamAdapter() 适用于 NDJSON(无 data: 前缀),在此场景下会静默无输出。
系统提示词通过 npx @openuidev/cli generate ./src/lib/library.ts --out config/system-prompt.txt 生成。前端依赖通过 npm install @openuidev/react-ui @openuidev/react-headless @openuidev/react-lang lucide-react zod 安装,前端运行在 :3000,后端 bin/rails server -p 3001 运行在 :3001。
适用场景:需要在 Rails 后端下构建生成式 UI 聊天应用,并希望直接透传 OpenAI SSE 流的开发者。
限制与注意事项:后端必须运行在 Puma 等线程化服务器上(ActionController::Live 不适用于 WEBrick);需要设置 OPENAI_API_KEY;CORS 应锁定为具体前端来源而非通配符,以免任何站点消耗密钥;文档列出常见错误如 CORS 阻止、system-prompt.txt 缺失、响应一次性到达而非流式、流挂起、客户端断开导致 EPIPE、请求后 socket 保持打开、422 CSRF 错误、空响应等及其修复方式。
关于收费、价格、平台支持范围等信息,资料中暂未提供。