clone / docs /research-log.md
tanbushi's picture
update
82f9be0

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操作与主体处理完全分离

下一步行动

基于明确的需求和完整的双向异步架构设计,可以开始进行技术设计和开发实现。