iblai/os · 上手攻略
- 仓库:iblai/os
- 链接:https://github.com/iblai/os
- 分类:agent
- 作者:Tom
- 更新:2026-10-22
§0 三证 checklist 与自检
| 项目 | 状态 | 证据 |
|---|---|---|
| GitHub URL(已 fetch) | ✅ | 已抓取 README(raw main)、docs/development.md、package.json、release API、commit API |
| 版本 / commit 锚点 | ✅ | package.json version 0.175.0;最新 release tag v0.175.0;main 最新 commit 7a487fb49108cf5fed67deebbb14e75c1d6aeda3(2026-10-21T17:37:16Z,github-actions[bot]) |
| README 子模块 anchor | ✅ | docs/development.md、docs/standalone-deployment.md、docs/platform-deployment.md、docs/DOWNLOADS.md、e2e/COVERAGE.md、AGENTS.md |
| 顶会 / 论文 venue | ⚠️ | 该仓库为商业产品开源前端,没有论文或会议背书;README 中的 SOC 2 Type II 属厂商自述,未在本仓库内找到审计报告原文 |
| 作者归属 | ⚠️ | 仓库归属 ibl.ai 公司组织;README 中出现 CTO Miguel Amigot 的演示视频署名,但本仓库未提供 AUTHORS/CONTRIBUTORS 名单 |
诚实声明:本篇不含"论文级"证据,只有仓库内可核对的代码与配置事实。凡涉及商业后端行为(认证、计费、模型调用)均无法从本仓库验证,已在文中逐条标 ⚠️。
§1 这是什么
iblai/os 是 ibl.ai 平台的开源前端仓库,用 Next.js(App Router)+ React 19 + Redux Toolkit + Radix UI + Tailwind CSS 写成,一套代码同时输出 Web、macOS、Windows、Linux、iOS、Android 六个端:
- Web:线上已部署于 os.ibl.ai
- Chrome 侧边栏扩展(Chrome Web Store 上架)
- macOS / Windows:Tauri 打包的原生壳(webview wrapper),universal .dmg 与 x64 安装包
- iOS / Android:App Store 与 Google Play 上架
- Linux:需从源码构建
它承载的功能面很宽:AI Agent 配置(可配 LLM、系统提示词、工具、安全过滤)、Projects 协作工作区、Canvas/Artifacts 富文档、MCP Server 接入、RAG 训练(上传文档 / 挂 Google Drive、OneDrive、Dropbox / 爬站点)、Web Search、Deep Research、LiveKit 实时语音通话与屏幕共享、分析看板(用量、主题、转录、财务报告)、多租户 + SSO(OAuth/OIDC/SAML)+ RBAC、Stripe 计费、iframe 嵌入与自定义域名、白标。
§2 解决什么问题
核心命题是"你的代码、你的数据、任意 LLM"。作者的意思是:多数 AI 应用要么锁死一家模型供应商,要么把整套后端闭源托管在厂商侧,机构无法把 agent 部署在自己机房、用自己的模型和数据。iblai/os 把界面层完全开源(MIT),让企业可以自托管前端、接自己的模型与租户 key,把品牌、权限、计费层握在自己手里。
第二个命题是"一套代码,处处可用"。原生端其实是 webview 壳,所以桌面/移动端的交付成本远低于原生重写。
第三个命题是"企业能力后置":多租户隔离、SSO、RBAC、Stripe、白标是内置项而不是事后补丁。
§3 快速安装
前置(README 与 docs/development.md 一致):
- Node.js 25.3.0+(
package.jsonengines.node明确写25.3.0,README 建议用 nvm) - pnpm 10+(
packageManager字段锁定pnpm@10.11.1) - 一个 ibl.ai 平台的组织 key(
NEXT_PUBLIC_MAIN_TENANT_KEY)
开发态:
git clone https://github.com/iblai/os.git
cd os
pnpm install
cp .env.example .env.local # 填 tenant key 与平台 URL
pnpm dev # http://localhost:3000
.env.local 关键项(取自 docs/development.md 原样):
NEXT_PUBLIC_AUTH_URL=https://login.iblai.app
NEXT_PUBLIC_API_BASE_URL=https://api.iblai.app
NEXT_PUBLIC_MAIN_TENANT_KEY=main
NEXT_PUBLIC_BASE_WS_URL=wss://asgi.data.iblai.app
NEXT_PUBLIC_IBL_LIVE_KIT_SERVER_URL=wss://livekit.call.iblai.app
用 Claude Code 的用户可以在仓库根目录跑 /setup,它会引导你连接 ibl.ai 租户并自动写好 .env.local。
生产部署(二选一):
# A. Docker(README 推荐)
docker build -t os .
docker run -p 5000:5000 --env-file .env.local os
# B. standalone
pnpm build
PORT=3000 node server-wrapper.js
pnpm build = next build && ./scripts/post-build.sh,产物在 .next/standalone/server.js(next.config.ts 里把 outputFileTracingRoot 钉到项目目录,避免路径嵌套)。
原生端构建(可选环境变量在编译期通过 Rust option_env! 烘焙进二进制):
IBL_TENANT=acme IBL_ALLOW_IN_APP_PURCHASE=true pnpm exec tauri build
§4 核心用法
4.1 命令与脚本清单
| 命令 | 作用 |
|---|---|
pnpm dev |
开发服务器(3000 端口,自带 --no-experimental-webstorage) |
pnpm build |
生产构建(standalone 输出) |
pnpm start |
通过 server-wrapper.js 起生产服务 |
pnpm lint / lint:check |
ESLint(带 --fix)+ typecheck |
pnpm typecheck |
tsc --noEmit,并额外校验 extensions/chrome/tsconfig.json |
pnpm test |
Vitest 单元测试 |
pnpm test:e2e |
Playwright E2E(自动播种空 auth fixture) |
pnpm tauri:dev / tauri:build |
桌面端开发与打包 |
pnpm ext:build / ext:watch |
Chrome 扩展(Vite)构建 |
make e2e-install |
首次安装 Playwright 浏览器 |
make e2e-ui / e2e / e2e-headed / e2e-chrome |
E2E 交互式 / 无头 / 有头 / 仅 Chrome |
make e2e-journey J=01 |
跑单个 journey spec |
make e2e-report |
打开最近一次 HTML 报告 |
4.2 代码结构(据 docs/development.md 架构图)
app/platform/[tenantKey]/:多租户主路由,agent 页面嵌在其下app/create-mentor/:agent 创建向导components/:ui/(54 个 shadcn/ui 原语)、chat/、advanced-chat/、canvas/、mentors/、modals/edit-mentor-modal/、workflows/、model-download/(Tauri 本地 LLM 下载 UI)features/:13 个状态模块(analytics / auth / chat / chat-input / mentors / messages / navigation / provider-association / rbac / subscription / tenants / top-banner / users)hooks/:151 个自定义 React hook,含use-voice-chat.ts(LiveKit 集成)e2e/:Playwright journey 测试,e2e/COVERAGE.md记录覆盖率
4.3 扩展点
- 加 MCP 工具:走平台侧 MCP Server 配置,前端不直接持有 MCP 进程。
- 换模型供应方:在 agent 编辑弹层里配 LLM,README 称支持 OpenAI / Anthropic / Google / Microsoft / Meta 及自有模型,切换无需改代码。
- 白标:per-org branding + logo + disclaimer。
- 嵌入门户:iframe embed mode + 自定义域名 + API key。
§5 典型适用场景
- 高校/政府/企业自建 AI 助教或导师平台:README 明确点名 universities、enterprises、government,且强调部署在自己基础设施、用自己的模型。
app/里的learn.iblai.app相关 legacy LMS URL 与create-mentor/向导都是为这类场景准备的。 - 需要多端一致的 C 端 AI 产品:一套 web 代码 + Tauri 壳 + 上架包,同时覆盖桌面与移动。
- 要 SSO / RBAC / 审计的内部工具:SSO 入口、回调、移动端 SSO 路由(
app/sso-login/、app/mobile-sso-login/)都已在仓库里。 - 想做白标 SaaS:多租户 + 自定义品牌 + iframe 嵌入 + Stripe 计费。
§6 与同类对比
| 维度 | iblai/os | Dify | Open WebUI | Chatbot UI |
|---|---|---|---|---|
| 开源范围 | 前端全开源(MIT),后端闭源需企业授权 | 应用层开源(含工作流编排) | 自托管聊天前端 + 部分后端 | 纯前端壳 |
| 复杂度 | Next.js 前端工程,编排能力依赖平台 | 重(Python + Postgres + Redis + 向量库) | 中(Python 后端) | 轻 |
| 端覆盖 | 六端 + Chrome 扩展 | Web为主 | Web为主 | Web为主 |
| 企业能力 | SSO/RBAC/多租户/Stripe/白标内置 | 需自行组合 | 有用户/权限 | 无 |
关键差异:iblai/os 开源的是"壳 + 企业能力",智能体编排、RAG 检索、模型网关这些后端逻辑不在本仓库(README 明说需要 ibl.ai backend 或企业许可拿全量后端代码)。Dify/Open WebUI 属于"应用逻辑也开源",这是选型时最容易误判的一点。
§7 坑与注意(工程节)
- 坑:以为 clone 完就能跑起来。现象:
.env.local缺NEXT_PUBLIC_MAIN_TENANT_KEY或平台 URL 时页面卡在加载 spinner,不跳登录页。影响:本地无法开发。修复:按docs/development.md逐项填NEXT_PUBLIC_AUTH_URL/NEXT_PUBLIC_API_BASE_URL/NEXT_PUBLIC_BASE_WS_URL/NEXT_PUBLIC_IBL_LIVE_KIT_SERVER_URL,再pnpm dev。⚠️ 后端账号本身需到 ibl.ai 申请,本仓库不含。 - 坑:Node 版本不对。现象:SDK 的 browser storage 守卫与 Node 内置 webstorage 冲突。影响:
pnpm dev报 webstorage 相关错。修复:用 Node 25.3.0+;若自定义了 scripts,保留NODE_OPTIONS='--no-experimental-webstorage'。 - 坑:pnpm 版本漂移。现象:
packageManager锁定 pnpm@10.11.1,用 npm/yarn 安装会得到不同依赖树。影响:构建产物不一致。修复:npm install -g pnpm并让 corepack 启用。 - 坑:端口被僵尸进程占住导致白屏。现象:
/_next/static/...与/env.js全部 404/503,页面空白。影响:误判为构建失败。修复:lsof -nP -iTCP:3000 -sTCP:LISTEN找到占用进程(旧的 node/next 进程会 shadow 新进程,绑到127.0.0.1的会赢过通配绑定)并 kill 掉,再重启。 - 坑:上级目录有 stray lockfile 导致 standalone 路径嵌套。现象:
~/package-lock.json让 Next.js 把 home 目录当成 workspace root,产物变成.next/standalone//server.js,post-build.sh把静态资源拷错位置。影响:同样表现为白屏。修复:删掉上层多余 lockfile 后重建;仓库已在next.config.ts里固定outputFileTracingRoot兜底。 - 坑:Tauri 构建期环境变量不生效。现象:
IBL_TENANT/IBL_ALLOW_IN_APP_PURCHASE设置了却仍多租户。影响:锁租户版应用发错。修复:这两个变量由 Rustoption_env!在编译期烘焙,必须在执行pnpm exec tauri build的那个 shell 里导出;src-tauri/build.rs已声明cargo:rerun-if-env-changed触发重编,CI 里要设在 build step 上。 - 坑:以为开源就能跑完整平台。现象:以为 clone 后自带 agent 运行时与模型代理。影响:部署出来是空壳,登录/对话全失败。修复:接受"前端 MIT + 后端需 ibl.ai 或企业许可(https://ibl.ai/contact)"的现实,或只用
iblai/iblai-infra-cli部署已有 Docker 镜像。 - 坑:E2E 覆盖回退。现象:改了用户可见行为但没加 journey spec。影响:CI 漏测。修复:README 与
e2e/COVERAGE.md要求覆盖率不得回退,新增/更新 journey;首次需make e2e-install。 - 坑(次要):README 下载链接与最新 release 不同步。现象:README 里硬编码的是
app-v0.95.28的 dmg/exe,而 GitHub 最新 release 已是v0.175.0。影响:按 README 下载会拿到明显更旧的版本。修复:以 release 页面/docs/DOWNLOADS.md为准 —— 本条是本篇最硬的"版本号漂移"提醒。 - 坑(次要):后端能力无源码可查。现象:README 列出的 Deep Research、Analytics、Stripe 逻辑全在闭源后端。影响:无法审计数据流与计费细节。修复:⚠️ 记为已知局限,做安全评估时要求厂商提供后端说明或企业授权源码。
§8 一句话推荐结论
推荐,但要清醒:如果你要的是"一套 MIT 前端 + 六端交付 + 企业级 SSO/多租户/白标外壳",iblai/os 是目前少见的一体化样本,值得直接 fork 做二次开发;但如果你要的是能自托管运行的完整 agent 平台(编排、RAG、模型网关全开源),它不合适——那类需求应看 Dify 或 Open WebUI。上手门槛不高(Node 25 + pnpm + 一个租户 key),真正的前置条件是拿到 ibl.ai 账号和后端授权。