如何设计一个支持多模型并行对话和 Git 式分支的 AI 平台?
在开发 AI 对话平台时,我们遇到几个核心挑战: 我们在 YeeroAI(yeero.ai)中实现了这些功能,分享下设计思路。 方案:SSE + OpenRouter + 虚拟线程 前端状态管理:每个模型独立状态(准备中→推理中→输出中→已完成/错误/已取消) 数据模型: 分支操作: 每个 Branch 独立配置:模型列表、工具、参数(温度/采样/推理强度等)。 多标签页管理:同时打开多个对话标签页,IDE 风格切换,右键菜单支持刷新/关闭/关闭其他等操作。 流程: 记忆系统:AI 自动提取用户偏好/习惯,按稳定性分 6 级(FIXED → WEAK),自动检索注入。 上下文摘要压缩:AI 将历史消息压缩成摘要,大幅减少 Token 消耗。 关闭或刷新页面后,后端与大模型的 SSE 连接不断开,继续在后台流式接收数据。 后端实现: 前端实现: 多实例解耦:Redis Pub/Sub + Redis List 双轨机制,无论用户重连到哪个实例都能恢复。 推理过程展示:支持 o1/o3 等推理模型, 多模态输入输出:支持图片、音频、视频输入对话,AI 跨媒体类型理解与回应。图片生成支持多种尺寸和比例。 模型广场:独立页面浏览 300+ 模型详情,按供应商/模态/价格/免费筛选, 体验:yeero.ai(注册送 10,000 积分)问题背景
一、多模型并行对话
二、Git 式对话分支
Chat → Branch[] → BranchMessageNode[] → Message[]操作 实现 Fork 基于某个 Node 之前的消息创建新 Branch Merge 将源 Branch 的 Message 追加到目标 Branch Pick 标记 Node 中哪条 Message 是主路径 强制指向 更新 Branch 的 HEAD 指向 三、知识沉淀 + 向量检索
四、后台推流——SSE 连接不断开
IceUser 表新增 backgroundStreamEnabled 字段(持久化全局开关)ChatStreamHub 封装后台流状态管理/checkActiveStream 查询活跃流 + /resume SSE 重连接口use-chat-sse.ts 的 resumeStream 处理 CATCH_UP(替换模式)和后续流事件MessageList.tsx 检测 STREAMING 消息自动触发重连五、AI 语义搜索
六、推理过程展示 + 多模态
MessageKnowledgeReasoningBlock 组件实现推理内容折叠/展开,SseMessageCard 流式输出时实时展示推理内容。ModelCard + ModelFilters + ModelPagination 组件实现。五、技术栈
层 技术 前端 Next.js 16 + React 19 + TypeScript UI shadcn/ui + Tailwind CSS 后端 Spring Boot 3.5 + Kotlin 2.3 数据库 PostgreSQL + pgvector 缓存 Redis + Caffeine AI Spring AI → OpenRouter 向量 bge-m3 (1024维) 流式 SSE 六、本周新功能