LobeHub:把AI同事塞进浏览器的硬核方案

12 次阅读 0 点赞 0 评论 10 分钟原创开源项目

LobeHub不是另一个ChatGPT前端,而是以'Agents as the Unit of Work'为内核的多智能体协作基础设施。它用TypeScript实现PWA+Tauri桌面壳,通过MCP协议抽象模型调用,CRDT保障跨端记忆同步,并支持Branching Conversations与Chain of Thought可视化——真正让AI成为可调试、可协作、可编排的数字员工。

#multi-agent #ai-collaboration #lobehub #typescript #pwa #local-llm
LobeHub:把AI同事塞进浏览器的硬核方案

LobeHub:把AI同事塞进浏览器的硬核方案

我是周小码,一个被Spring Boot自动配置折磨了八年的Java老兵。上周三凌晨三点,我盯着LobeHub的README,手边是半凉的枸杞茶,心里只有一个念头:这玩意儿,真的把‘多智能体协作’焊进了我的浏览器标签页里。

不是Demo,不是PoC,不是“未来已来”的PPT话术——它跑在我本地Mac上,用Tauri打包成桌面App,连着我自建的Ollama Qwen-7b,三个Agent正在同一个Page里争论Q3客户流失率是否该归因于API响应延迟。

痛点在哪?我们还在用‘单线程人脑’调度AI

你有没有试过这样干活:

  • 用LangChain写个销售分析Agent,跑通了;
  • 想加个财务校验环节,得手动拼接Prompt、传Context、改Callback;
  • 某天市场部说“等等,先查下竞品定价”,你得暂停流程、开新Tab、复制粘贴上下文、再手工merge结果;
  • 最后发现Agent输出的PDF图表字体错乱,翻三天文档才搞懂Artifacts渲染链路……

这不是AI赋能,这是AI添堵。问题不在于模型不够强,而在于我们还在用2005年的协作范式,去调度2025年的智能体集群。

LobeHub的答案很直接:别调度AI,让AI自己开会。

架构不是图,是三层‘人机协作操作系统’

LobeHub没堆炫技架构,但每层都踩在关键痛点上:

  • UI层:PWA + React + Tauri
    不是简单套壳。Tauri提供系统级文件访问(读取本地Excel报表)、原生通知(Agent会议结束提醒)、离线PWA能力(地铁上继续训AI同事)。React组件粒度细到<AgentAvatar /><ConversationBranchTree />,连分支节点的折叠/展开状态都用Zustand原子化管理。

  • 调度层:MCP(Model Context Protocol)
    这才是灵魂。MCP不是又一个LLM网关,而是一套带Schema的RPC协议。每个Agent注册时声明:

    json 复制代码
    {
      "id": "sales-analyzer",
      "model": "qwen-7b-chat",
      "tools": ["salesforce", "excel-reader"],
      "memory": { "type": "crdt", "scope": "group" }
    }

    后端收到请求后,不解析Prompt,只按MCP Schema路由:模型服务→工具插件→记忆模块。OpenAI、Ollama、本地Qwen?只要实现MCPAdapter接口,就自动获得stream, tool_call, branch_point三大能力。

  • 数据层:CRDT + Artifacts Store
    Agent的记忆不是存Redis里等过期,而是用Yjs(CRDT实现)同步。你手机上修改的销售预测表格,笔记本上立刻渲染出SVG趋势图——因为Artifact本质是带版本向量时钟的JSON-LD文档:

    json 复制代码
    {
      "@id": "artifact://sales-q3-prediction",
      "@type": "Chart",
      "data": { "x": [...], "y": [...] },
      "vClock": { "clientA": 12, "clientB": 8 }
    }

代码即哲学:三段真实命令,看它怎么‘懒’出生产力

1. 部署:两行命令,私有化完成

fish 复制代码
## 第一行:下载并执行setup.sh(校验签名,解压docker-compose.yml+env模板)
bash <(curl -fsSL https://lobe.li/setup.sh)
## 第二行:启动,自动拉取lobehub/server:latest和lobehub/web:latest镜像
docker compose up -d

注意:setup.sh里没有sed -i 's/xxx/yyy/g',没有cp .env.example .env && vi .env。它生成的.env已预置ACCESS_CODE随机密钥和MCP_ADAPTER=ollama,你唯一要填的只有OLLAMA_HOST=http://host.docker.internal:11434

2. 启动:环境变量即配置,拒绝YAML地狱

bash 复制代码
## 最小可行配置:API密钥 + 访问密码
OPENAI_API_KEY=sk-prod-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ACCESS_CODE=my_secure_password
## 启动命令(官方Docker Compose默认加载此env)
docker compose up -d

没有application.yml,没有config.properties。所有运行时参数走环境变量,符合12-Factor App原则——而LobeHub甚至把OPENAI_MODEL_LIST做成可解析字符串:

3. 进阶:模型策略即代码,动态启停AI员工

bash 复制代码
## 启用Qwen-7b-chat(本地),启用GLM-6b(国产),禁用gpt-3.5-turbo(省钱)
OPENAI_MODEL_LIST=qwen-7b-chat,+glm-6b,-gpt-3.5-turbo

这段代码背后是ModelRouter类的策略解析器:

ts 复制代码
// packages/core/src/router/model-router.ts
export class ModelRouter {
  private strategies = new Map<string, ModelStrategy>();
  
  parseList(list: string) {
    list.split(',').forEach(item => {
      if (item.startsWith('+')) this.enable(item.slice(1)); // 显式启用
      else if (item.startsWith('-')) this.disable(item.slice(1)); // 显式禁用
      else this.enable(item); // 默认启用
    });
  }
}

实战:让三个Agent自己开晨会

我司真实场景:每天9:00,weekly-reporterbug-trackerfaq-updater三个Agent在/workspace/engineering Page里自动会面。

  1. weekly-reporter读取GitLab上周MR合并记录,生成Markdown摘要;
  2. bug-tracker扫描Jira未关闭Bug,标注高频模块;
  3. faq-updater比对Confluence FAQ文档,标记过期条目;

关键不在结果,而在协作过程

  • bug-tracker发现“API模块Bug占比超40%”,自动触发Branching Conversation:“查API响应延迟TOP3接口”;
  • 查完后,faq-updater在分支里生成api-latency-faq.md,并@weekly-reporter:“请将此纳入本周报告第3节”;
  • 主线程自动Merge该文件,weekly-reporter渲染时直接嵌入SVG性能图(Artifact)。

整个过程无人工干预,所有分支历史、Artifact版本、Agent决策日志,全在UI里可追溯——这才是Chain of Thought可视化的真实价值:不是画思维导图给你看,而是让你能点击任意节点,查看当时的完整Prompt、Tool Call参数、模型返回Raw JSON。

踩坑指南:别当第一个吃螃蟹的人

  • 本地模型实验性警告是真的:Ollama适配器目前只支持chat endpoint,generate(非流式)和embeddings尚未实现。想用Qwen做RAG?先给packages/adapters/ollama/src/index.ts提PR补/api/embeddings
  • MCP Marketplace插件权限隔离不足:当前所有插件共享同一沙箱环境。装了“B站字幕提取”插件后,它能读取你Salesforce的OAuth Token——这不是Bug,是设计妥协。生产环境务必用--no-marketplace启动参数禁用市场。
  • CRDT冲突解决需人工介入:当两个Agent同时修改同一Artifact的data.y数组,Yjs会生成conflict元数据字段。LobeHub UI显示⚠️图标,但不会自动合并——你需要点击“Resolve Conflict”,选择保留哪个客户端的变更。

我的真实评价:它不卷模型,卷的是‘人机契约’

作为Java老兵,我欣赏它的克制:

  • 不造轮子:CRDT用Yjs,PWA用Workbox,Tauri用Rust底层;
  • 不画大饼:README明确写“RBAC in roadmap”,不假装已有企业级安全;
  • 不骗点击:Star数70k+,但首页没放“Sponsored by XXX”,没弹窗推Pro版。

它真正的野心,藏在packages/protocol/mcp/README.md里那句:

“MCP is not about making models talk to each other. It’s about making humans understand how they talk.”

——MCP不是让模型互相通话,而是让人理解它们如何通话。

所以别问“LobeHub比LangChain强在哪”。该问的是:当你需要让AI同事自己开周会、自己修Bug、自己更新文档时,你的技术栈,准备好签这份‘人机劳动合同’了吗?

最后,泡杯茶,打开http://localhost:3210,创建第一个Agent。别急着写代码——先教它怎么自我介绍。毕竟,我们正从‘写代码的人’,变成‘训练AI同事的HR’。

最后更新:2026-01-29T10:01:21

评论 (0)

发表评论

blog.comments.form.loading
0/500
加载评论中...