CASE STUDY · AI COMPANION
Remi
跨终端、持续在线的实时 AI 陪伴系统——低延迟语音双工、可打断、有长期记忆的 AI 伴侣。
大多数 AI 聊天产品在做「更聪明的问答」,Remi 走的是另一条路:在场感。目标是一个跨终端、持续在线的 AI 伴侣——能听、能停顿、能接话、能被打断;有稳定的人格和跨会话的长期记忆,越聊越像「她」;有语音、表情和 3D 形象,让「她在这里」成为可感知的体验。当前线上体验采用 Vercel 托管 Web 前端,实时 WebSocket、LLM 和生图能力继续连接本地公网后端,以保留本地模型与工作流能力。
这个定位决定了工程难点不在单次回复质量,而在三件事:低延迟实时交互、跨会话关系记忆、多终端一致的存在感。整个架构都围绕它们展开。
双脑架构:Fast Brain + Slow Brain
实时陪伴有一对天然矛盾:回复要快(否则对话节奏断裂),理解要深(否则记不住关系)。Remi 用双脑架构拆开它:
- Fast Brain(快脑):负责低延迟流式回复,token 逐个推送到前端,保证对话即时感;可以单独配置更轻量的模型和更低的推理强度,把首个可见字符的延迟压到最低。
- Slow Brain(慢脑):在后台异步做深度分析——提炼用户信息、总结关系事件、更新长期上下文。不阻塞实时链路,分析结果在后续对话中通过 prompt 注入生效。
两条路径由上下文编排层统一调度:情绪状态、记忆召回、快慢脑产出在这里汇合成最终 prompt。用户感知到的是「她反应很快,而且记得我们之前聊过什么」。
语音全链路:STT → VAD → LLM → TTS
Remi 的语音不是「录一段、传一段」,而是完整的实时双工链路:
- 输入侧:客户端实时推送 PCM 音频流,服务端用 VAD 判断语音起止,STT(Whisper API / whisper-cpp 双后端)产出转写。
- 输出侧:LLM 流式生成的文本经流式断句器切成自然句段,逐句送入 TTS(Edge / Piper / OpenAI / 火山多后端)合成,音频分段流式推回前端播放——不用等整段回复生成完才听到声音。首句还有专门的 eager 断句策略,在软断点提前送出,压低「开口延迟」。
- 打断控制:实时感的关键。用户随时插话,服务端通过 AbortSignal 状态机取消进行中的 LLM 生成与 TTS 合成,被打断的半句只作为上下文残留、不进入正式历史;真实用户打断与后台任务取消是分开的语义,文本流结束与音频播放完毕也是两个独立的生命周期事件。
全链路配有延迟追踪器,固定输出 speech_end → stt_final → llm → tts → playback 各阶段指标,优化有前后版本可比。
长期记忆:让关系可以积累
记忆系统分层演进,当前是以 episode 为核心的 V2 架构:
- 存储:对话中的关系事件(episode)持久化到 PostgreSQL,用 pgvector 做向量语义检索。
- 相似合并:新的对话时刻先做向量相似度搜索,与已有 episode 足够相近的会被语义合并(更新摘要与向量中心)——「昨晚失眠」和「最近一直睡不好」归入同一段关系记忆,而不是堆积碎片。
- 召回排序:不是纯向量相似度,而是语义相似度、事件显著性、时效性、未解决状态的加权综合——重要的、新近的、没聊完的事优先被想起来。
- 衰减遗忘:记忆按重要性、访问频率与时间自然衰减,模拟「人会忘记不重要的事」。
- 会话 overlay:会话启动时从持久层预加载少量事实型记忆到本地副本,实时链路只读本地副本、写回异步,保证记忆不拖慢实时对话。
四端架构:一套协议,四种形态
Remi 覆盖 Web(Next.js)、桌面(Tauri v2 透明悬浮窗 + 聊天面板双窗口)、iOS(原生 Swift,语音双工 + Live2D 骨架)、watchOS(情绪手环:表情脸 + PTT 语音 + HealthKit 主动关怀 + 表盘 Complication)四个终端,共享同一套 WebSocket 协议,服务端按客户端类型自动协商能力。
每个终端用最适合该设备的形态承载陪伴感:桌面是常驻的透明角色,手表是抬腕可见的情绪表情。Web 端的 VRM 三维角色(Three.js)与 Live2D(Pixi.js)由服务端的情绪状态和口型 viseme 驱动表情与嘴型同步。
技术栈
| 层级 | 技术 | |------|------| | 运行时 | Node.js + TypeScript | | 实时通信 | WebSocket(ws),全双工 + 打断控制 | | LLM | OpenAI 兼容 API(本地模型 / 云端模型可切换) | | 语音识别 | Whisper API / whisper-cpp,PCM 流式 + VAD | | 语音合成 | Edge TTS / Piper / OpenAI TTS / 火山 TTS,逐句流式 | | 记忆存储 | PostgreSQL + pgvector(向量语义检索)+ Redis 缓存 | | Web 前端 | Next.js 15 + React 19 + Tailwind CSS v4 | | 3D 形象 | Three.js(VRM)+ Pixi.js(Live2D) | | 桌面端 | Tauri v2 + React 19 + Vite(Rust 透明窗口 + 系统托盘) | | iOS / watchOS | Swift(SwiftUI),原生 WebSocket + 语音双工 + HealthKit | | 基础设施 | Vercel 前端托管 + 本地公网后端、Clerk / JWT 认证、pino 结构化日志 + 延迟追踪、Docker Compose 部署 |
项目状态
实时语音与打断体验处于 Beta 前期,记忆 V2 主路径已接通并在质量观察期;架构为插件系统、直播/游戏接入与穿戴设备预留了扩展边界。