Skip to content

Nexo IM — MVP 需求文档

范围:仅覆盖第一个 MVP(单聊跑通),远期愿景与后续分期不在本文档展开

1. 背景与目标

Nexo 是 lamolabs 团队自用(dogfooding)的 AI 原生工作 IM。远期愿景一句话:聊天中产生点子 → 唤起 AI 澄清成结构化需求 → 建临时群协作 → agent 服务实现 → 验收后自动解散群组,形成工作流闭环。

本 MVP 的唯一目标:把 IM 地基跑通——团队 5 人能用它完成日常单聊(收发消息、换人聊天)。一切 AI 能力从 MVP2 开始,不属于本期。

2. 用户与使用场景

  • 用户:lamolabs 团队成员,共 5 人,预置账号,不开放注册
  • 场景:工作日常沟通;PC 客户端(nexo-im-pc)常驻使用
  • 服务端:nexo-im-api(Hono + PostgreSQL + WebSocket,工程骨架已就绪)

3. 功能需求

P0(缺一不可)

FR-1 账号与登录

  • 预置 5 个团队账号(用户名 + 密码),登录成功后获得会话凭证
  • 登录失败给出明确提示;不做开放注册、找回密码(密码由管理员重置)
  • 同一账号仅支持单端在线,后登录踢前登录

FR-2 会话列表与换人聊天

  • 展示团队成员列表,点击任一成员即可发起/进入单聊
  • 已有会话按最近一条消息时间倒序排列
  • 点击切换会话,聊天窗口正确切换上下文

FR-3 文本消息收发

  • 会话内发送文本消息;对方在线时通过 WebSocket 实时收到
  • 对方离线时消息落库,其重新上线后能完整拉到错过的消息
  • 消息发送有成功/失败反馈,失败可重发

FR-4 历史消息

  • 进入会话拉取最近一页消息,向上滚动分页加载更早消息
  • 同一会话内消息顺序稳定(刷新、重连后顺序不变)

P1(重要,资源不足可顺延)

FR-5 未读数:会话列表展示各会话未读条数,进入会话后清零 FR-6 在线状态:成员列表/会话中显示对方在线、离线状态

4. 明确不做(Out of Scope)

  • 群聊(后续与"临时群组"一并设计)
  • 图片、文件、语音、视频消息
  • 消息撤回、编辑、引用回复、表情回应、@提及
  • 消息搜索
  • 移动端、多端同步、离线推送
  • 全部 AI 能力(需求澄清、建群、agent 实现等,自 MVP2 起分期引入)
  • 端到端加密(团队内部自用,暂不需要)

5. 非功能需求

  • 消息持久化于 PostgreSQL,服务重启不丢失已确认送达的消息
  • 正常网络下消息端到端延迟 ≤ 1s
  • 规模按 5 人设计,不设高并发指标;服务端单实例部署即可
  • 客户端断线后自动重连,重连后自动补齐断线期间的消息

6. 验收标准(端到端场景)

  • [ ] A 用预置账号登录成功;错误密码被明确拒绝
  • [ ] A 在成员列表点击 B 发起会话,发送消息,B 端 1s 内实时收到
  • [ ] B 回复后 A 实时收到,双方看到的消息顺序完全一致
  • [ ] A 切到 C 聊天再切回 B,两个会话上下文互不串扰(换人聊天)
  • [ ] B 离线期间 A 持续发消息,B 重新登录后完整收到
  • [ ] 客户端刷新/重启后历史消息完整、顺序不变,向上翻页可加载更早消息
  • [ ] 同账号第二处登录时,第一处被踢下线
  • [ ] (P1)未读数正确累计与清零;(P1)在线状态正确变化

7. 约束与说明

  • 本文档只定义"做什么";消息协议、表结构、seq 设计等属技术方案,另行评审
  • 需求文档中"用户"一律指 lamolabs 团队 5 名成员
  • MVP 验收人:团队全员试用一周,日常沟通可完全替代现用工具即视为达成目标