我做了个 AI 平台,多模型并行 + Git 分支对话 + 知识自动沉淀(附技术选型)

5 阅读8分钟

先说背景,我是个开发者,平时工作离不开 AI 工具。

但用着用着发现几个特别头疼的问题:

痛点1:每次要在 ChatGPT、Claude、Gemini 之间来回切换对比答案,太麻烦了

痛点2:和 AI 聊完有价值的信息,下次对话 AI 全忘了,还得重新解释背景

痛点3:想同时探索多个方向,只能开一堆对话窗口,最后自己都搞混了

痛点4:积累的技术方案、代码片段散落在各处,想找的时候根本找不到

所以我就想,干脆自己做一个得了。

做了个工具自己用了一段时间,觉得还挺顺手的。最近又更新了不少功能,包括后台推流这种很少见的特性——关了页面回来 AI 还在生成,今天跟大家分享一下思路和技术实现。


核心功能设计

1. 多模型并行对话

这个功能是我最先做的,因为自己深受其苦。

实现思路

  • 用户一次提问,同时发给多个 AI 模型
  • 通过 SSE(Server-Sent Events)实现流式输出
  • 多个模型的回复实时并行展示

技术选型

  • 后端:Spring Boot 3.5 + Kotlin
  • AI 接入:通过 OpenRouter 统一调用(支持 OpenAI / Anthropic / Google / DeepSeek / Meta 等 300+ 模型)
  • 流式输出:SSE,首包时间控制在 3 秒内

我的使用场景

  • 技术方案选型时,让多个模型同时给出建议,对比着看
  • 写代码时,重要逻辑会让多个模型交叉验证,降低幻觉
  • 免费模型和付费模型混用,控制成本

2. 对话分支管理(类 Git 设计)

这个功能是我作为程序员的一点私心,觉得对话就应该像写代码一样能分支管理。

功能设计

  • 从任意节点创建分支
  • Fork 分支(基于历史节点)
  • 合并分支
  • 消息选中(Pick)标记主路径
  • 每个分支独立配置模型和参数

解决的问题: 写技术方案时想试试不同方向,以前只能开新对话丢失上下文,现在直接分支并行推进。

多标签页管理:支持同时打开多个对话标签页,IDE 风格切换,右键菜单支持刷新/关闭/关闭其他等操作,不用来回找。

数据结构

Chat(对话)
├── Branch 1(主分支)
│   ├── Node 1
│   │   ├── Message (GPT-4o)
│   │   └── Message (Claude)
│   └── Node 2
└── Branch 2(从 Node 1 Fork)
    └── Node 3

3. 知识沉淀 + 记忆系统

这个功能是我花最多时间做的,但也是最值得的。

知识沉淀

  1. 每次对话后,AI 自动提取关键信息,生成"知识条目"(标题 + 摘要 + 标签)
  2. 通过 baai/bge-m3 模型将知识转化为 1024 维向量
  3. 存储到 PostgreSQL 的 pgvector 扩展中
  4. 下次对话时,自动检索最相关的知识注入上下文

记忆系统: AI 自动从对话中提取用户偏好、习惯等关键信息作为"记忆",按稳定性分为 6 个特征等级(FIXED / VERY_STABLE / HABIT / PREFERENCE / MUTABLE / WEAK),对话时自动检索相关记忆注入上下文。

上下文摘要压缩: 开启后,AI 自动把历史消息压缩成精华摘要,发消息时只携带摘要而非全文,长对话 Token 消耗大幅降低。

技术栈

  • 向量数据库:PostgreSQL + pgvector
  • Embedding 模型:baai/bge-m3(1024 维)
  • 检索方式:向量相似度检索

4. AI 应用创作 + 讨论面板

用自然语言描述需求,AI 直接生成 HTML 单页应用。

功能支持

  • 对话式迭代优化
  • 手动编辑代码
  • 版本历史与回滚
  • iframe 实时预览
  • 应用讨论面板:围绕 AI 应用实时讨论协作

模型广场:独立页面浏览 300+ 模型详情,按供应商/模态/价格/免费筛选,查看上下文长度、输入输出价格等,选模型不再盲目。

前端实现

  • Next.js 16 + React 19
  • TypeScript
  • shadcn/ui + Tailwind CSS
  • iframe 沙箱隔离运行用户代码

5. 后台推流——关页面不断流

这个功能是我自己最需要的:很多时候 AI 还在生成回复,但我得切去做别的事,甚至不小心关了浏览器,回来发现回复没了。

YeeroAI 的解法

  • 用户关闭/刷新页面后,后端与大模型的 SSE 连接不断开,继续在后台流式接收数据
  • 每个 chunk 通过 Redis List 持久化存储,Redis Channel 实时广播
  • 用户重新打开对话时,调用 /checkActiveStream 检测活跃流,通过 /resume 接口重连
  • 前端收到 CATCH_UP 事件后,以替换模式恢复已生成内容,然后继续接收后续流
  • 支持全局开关(backgroundStreamEnabled 字段持久化到 IceUser 表)

多实例部署

  • Redis Pub/Sub + Redis List 双轨机制
  • Redis List 存储每个 chunk(解决消息不丢失)
  • Redis Channel 实时广播新 chunk(解决多实例解耦)
  • 无论用户重连到哪个实例,都能恢复完整的流数据

简单说——AI 回复不怕断,关了页面回来还在生成

6. 推理过程展示 + 多模态

支持 o1/o3 等推理模型的完整推理链展开查看,了解 AI 是怎么一步步得出结论的。这在做技术验证的时候特别有用,能看到 AI 的"思考过程"。

同时支持图片、音频、视频输入,AI 可以跨媒体类型理解与回应。图片还能生成不同尺寸和比例(1K~4K,1:1/16:9/2:3 等)。

近期更新功能

功能说明
后台推流关页面不断流,SSE 自动重连接续接收
邀请机制邀请好友注册,双方获得积分奖励
AI 语义搜索文件和消息都支持自然语言描述搜索
应用讨论面板围绕 AI 应用实时讨论协作
应用云端同步多设备数据一致性
文件库 + 多格式预览图片/视频/PDF/Office 在线预览
存储额度管理空间用量一目了然,智能清理建议
推理过程展示展开查看 AI 完整推理链
多模态输入输出图片/音频/视频对话
模型广场独立页面浏览 300+ 模型详情

技术架构

前端

Next.js 16 (App Router)
├── React 19
├── TypeScript 5.9
├── shadcn/ui + Tailwind CSS
├── next-intl (国际化)
└── SSE Client (流式输出)

后端

Spring Boot 3.5
├── Kotlin 2.3
├── PostgreSQL + pgvector
├── Redis + Caffeine (二级缓存)
├── OpenRouter API
└── SSE Server

性能优化

  • SSE 首包 < 3 秒
  • 接口 P95 < 200ms
  • Redis 分布式缓存 + Caffeine 本地缓存
  • 虚拟线程支撑高并发

其他实用功能

文件夹层级管理

  • 多级嵌套文件夹
  • 对话、应用、知识分类管理
  • 每个文件夹独立配置默认参数(模型/工具/记忆/参数),支持继承

全局语义搜索

  • Ctrl+K 打开全局搜索
  • 跨类型搜索(对话/消息/文件/应用/文件夹)
  • 向量语义匹配,显示匹配度百分比
  • AI 语义搜索:用自然语言描述就能找到文件
  • AI 图片语义搜索:AI 生成的图片建立向量索引,语义搜索直接找

其他

  • 多标签页管理(IDE 风格切换)
  • 用户反馈中心(故障报告/功能建议/状态追踪)
  • 消息右键菜单(复制/复制为图片/删除/创建分支/排除上下文)
  • 对话内容 AES 加密存储
  • 隐私数据绝不售卖或共享给第三方

开发过程中的一些经验

1. SSE 流式输出的坑

  • 注意连接超时设置
  • 客户端重连机制很重要
  • 错误处理要完善,避免白屏

2. 后台推流的设计要点

  • 后端流状态管理要独立于前端连接生命周期
  • Redis List 持久化 + Pub/Sub 广播的双轨机制是核心
  • CATCH_UP 替换模式确保重连后内容不重复不丢失
  • 全局开关让用户自己选择是否启用

3. 向量检索的性能

  • pgvector 在数据量大时需要建索引
  • 检索前先过滤,减少向量计算量
  • 缓存热门检索结果

4. 国际化不是小事

  • 从一开始就设计好 i18n
  • next-intl 用起来挺顺手的
  • 文案管理要规范,避免硬编码

适合谁来用?

  • 需要频繁使用 AI 的开发者
  • 需要对比多个模型输出的研究者
  • 想建立个人知识库的技术人
  • 想快速原型验证想法的产品经理

体验方式

感兴趣的朋友可以搜索试试,有问题随时在评论区交流,我会尽量回复。


以上就是我做这个工具的一些思路和技术实现,希望能给同样在做 AI 应用的朋友一些参考。如果觉得有用,点个赞支持一下~