# Human-Clone 系统需求调研记录 ## 调研日期 2025-01-04 ## 项目概述 Human-Clone 系统需求分析 ## 第一轮调研 ### 用户回答记录 **问题**: 这个human-clone系统的主要用途是什么? **回答**: human 和 clone 之间相互协作,且可以和其他 clone、human 之间相互通讯的系统。现阶段首先解决的是通讯问题。 ### 初步需求分析 - **核心功能**: 多主体间通讯协作系统 - **主体类型**: human, clone - **通讯模式**: - human ↔ clone - clone ↔ clone - human ↔ human (通过系统) - **当前优先级**: 通讯功能 ### 下一步调研方向 需要深入了解通讯的具体需求和技术细节。 ### 第二轮调研记录 **问题**: 这些主体之间的通讯主要是通过什么形式?文字、语音、还是视频? **回答**: 第一步先解决主体之间文字形式的通讯 ### 需求更新 - **通讯方式**: 首先实现文字通讯 - **开发阶段**: 第一阶段专注文字通讯功能 - **通讯模式**: 实时异步通讯 ### 第三轮调研记录 **问题**: 系统需要支持实时通讯(如聊天室形式)还是异步通讯(如邮件/留言形式)? **回答**: 基本属于实施通讯,但是是异步的,计划采用 redis 订阅的方式来实现信息传递,每一个主体都会有一个 redis-adapter,负责发送和接收消息 ### 技术架构初步确定 - **消息传递**: Redis 订阅/发布模式 - **组件设计**: 每个主体配备 redis-adapter - **消息处理**: 发送/接收消息统一处理 ### 第四轮调研记录 **问题**: 每个主体(human/clone)需要有自己的身份标识吗?比如用户名、ID之类的? **回答**: 需要有 id —— uuid 格式、实体名称(name)、redis-adapter 里和 redis 相关订阅 channel 相关的配置信息 ### 主体身份设计 - **唯一标识**: UUID格式ID - **显示名称**: 实体名称(name) - **配置信息**: redis-adapter配置(订阅channel等) ### 第五轮调研记录 **问题**: 消息需要有哪些基本字段?比如发送者、接收者、时间戳、消息内容? **回答**: 需要,其中发送者、接收者都使用 id ### 消息结构设计 - **发送者**: UUID格式ID - **接收者**: UUID格式ID - **时间戳**: 消息发送时间 - **消息内容**: 文字内容 - **消息类型**: 点对点通讯 ### 第六轮调研记录 **问题**: 是否需要支持群发消息(一个发送者同时发给多个接收者)? **回答**: 此阶段不需要 ### 功能范围明确 - **当前阶段**: 仅支持点对点消息 - **群发功能**: 后续版本考虑 ### 第七轮调研记录 **问题**: 系统需要存储历史消息记录吗? **回答**: 需要 ### 数据持久化需求 - **消息存储**: 需要保存历史消息记录 - **存储方案**: 待确定(数据库选择) ### 第八轮调研记录 **问题**: 历史消息需要保存多长时间? **回答**: 先不讨论历史记录的问题,先解决通信问题 ### 开发优先级调整 - **当前重点**: 通讯功能实现 - **历史记录**: 后续阶段处理 ### 第九轮调研记录 **问题**: redis-adapter 需要哪些具体的配置信息?比如 Redis 服务器地址、端口、认证信息等? **回答**: redis 服务器地址、端口、db、channel ### redis-adapter 配置设计 - **服务器地址**: Redis host - **端口**: Redis port - **数据库**: Redis DB number - **频道**: 订阅/发布的 channel ### 第十轮调研记录 **问题**: 每个主体是使用相同的 channel 还是各自有独立的 channel?如果是独立的,channel 的命名规则是什么? **回答**: 每个主体都是独立的 channel,channel 的命名就是主体的 id ### Channel 设计方案 - **Channel 分配**: 每个主体独立 channel - **命名规则**: 使用主体的 UUID 作为 channel 名称 - **通讯机制**: 目标主体监听自己的 channel 接收消息 ### 第十一轮调研记录 **问题**: 当一个主体要发送消息给另一个主体时,是如何知道接收者的 channel 名称的?是否需要一个主体注册发现机制? **回答**: 主体注册发现机制可以放到下一个迭代,此次只假设可以通过目标主体的 id 就可以获得目标主体的订阅 redis 参数,包括服务器、端口、db、channel ### 主体发现机制设计 - **当前版本**: 假设可通过 ID 获取目标的 Redis 连接参数 - **后续迭代**: 实现主体注册发现机制 - **参数获取**: 服务器地址、端口、DB、channel 通过 ID 直接获得 ### 第十二轮调研记录 **问题**: redis-adapter 是否需要处理连接断开重连、消息发送失败重试等异常情况? **回答**: 目前不需要 ### 异常处理设计 - **当前版本**: 不处理连接重连和重试机制 - **设计原则**: 专注核心通讯功能,异常处理后续考虑 ### 第十三轮调研记录 **问题**: 消息的发送和接收是否需要确认机制?比如接收者收到消息后需要回复确认? **回答**: 不需要 ### 消息确认机制 - **确认机制**: 不需要消息确认 - **通讯模式**: 单向发送,无回复确认 - **简化设计**: 降低复杂度,专注基础通讯 ### 第十四轮调研记录 **问题**: 系统是否需要区分不同类型的消息?比如普通消息、系统消息、命令消息等? **回答**: 不需要 ### 消息类型设计 - **消息分类**: 不区分消息类型 - **统一处理**: 所有消息均为普通文字消息 - **简化架构**: 无需消息类型判断和处理逻辑 ### 第十五轮调研记录 **问题**: 每个主体的 redis-adapter 是需要同时监听多个 channel(包括自己的和其他主体的)还是只监听自己的 channel? **回答**: 只监听自己的 ### 监听机制设计 - **监听范围**: 每个主体只监听自己的 channel - **消息接收**: 通过订阅自己的 ID channel 接收消息 - **消息发送**: 向目标主体的 ID channel 发布消息 ### 需求调研总结 基于15轮调研,Human-Clone 系统第一版本的核心需求已明确: #### 系统架构 - **主体类型**: human、clone - **通讯模式**: 点对点文字通讯 - **技术方案**: Redis 订阅/发布模式 - **身份标识**: UUID + name #### 核心组件 - **redis-adapter**: 每个主体一个,负责发送/接收消息 - **配置参数**: 服务器地址、端口、DB、channel(=主体ID) - **监听机制**: 只监听自己的 channel #### 消息格式 - **发送者ID**: UUID格式 - **接收者ID**: UUID格式 - **时间戳**: 发送时间 - **内容**: 文字消息 #### 功能边界 - ✅ 点对点文字通讯 - ❌ 群发消息 - ❌ 历史消息存储 - ❌ 连接重连机制 - ❌ 消息确认机制 - ❌ 消息类型区分 - ❌ 主体注册发现 ### 第十六轮调研记录 **问题**: 发送消息时是否需要引入发送缓存队列来解耦主体发送和Redis发送操作? **回答**: 在发送主体不直接调用发送消息到 redis,而是在 redis-adapter 里设置一个发送缓存 queue,通过线程循环逐个 pop 后发送到 redis,这样主体发送和 redis 发送分开,且有缓存,解耦 ### 第十七轮调研记录 **问题**: 消息接收部分是否也需要类似的队列解耦设计? **回答**: 消息接收部分,目标主体 B 的redis-adapter 收到 channel 里的消息后,推送到接收队列 receiver-queue,在线程里循环读取 queue,并调用 callback,给到 B 的函数里进行处理 ### 完整架构设计优化 - **发送缓存**: redis-adapter内部设置发送队列 - **接收缓存**: redis-adapter内部设置接收队列 - **双向异步**: 发送和接收均采用队列+线程机制 - **回调机制**: 接收线程通过callback将消息传递给主体 - **完全解耦**: Redis操作与主体处理完全分离 #### 下一步行动 基于明确的需求和完整的双向异步架构设计,可以开始进行技术设计和开发实现。