File size: 8,040 Bytes
82f9be0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# 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操作与主体处理完全分离

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