157 lines
7.8 KiB
Markdown
157 lines
7.8 KiB
Markdown
# 心流系统 (Heart Flow System)
|
||
|
||
## 系统架构
|
||
|
||
### 1. 主心流 (Heartflow)
|
||
- 位于 `heartflow.py`
|
||
- 作为整个系统的主控制器
|
||
- 负责管理和协调多个子心流
|
||
- 维护AI的整体思维状态
|
||
- 定期进行全局思考更新
|
||
|
||
### 2. 子心流 (SubHeartflow)
|
||
- 位于 `sub_heartflow.py`
|
||
- 处理具体的对话场景(如群聊)
|
||
- 维护特定场景下的思维状态
|
||
- 通过观察者模式接收和处理信息
|
||
- 能够进行独立的思考和回复判断
|
||
|
||
### 3. 观察系统 (Observation)
|
||
- 位于 `observation.py`
|
||
- 负责收集和处理外部信息
|
||
- 支持多种观察类型(如聊天观察)
|
||
- 对信息进行实时总结和更新
|
||
|
||
|
||
## 工作流程
|
||
|
||
1. 主心流启动并创建必要的子心流
|
||
2. 子心流通过观察者接收外部信息
|
||
3. 系统进行信息处理和思维更新
|
||
4. 根据情感状态和思维结果决定是否回复
|
||
5. 生成合适的回复并更新思维状态
|
||
|
||
## 使用说明
|
||
|
||
### 创建新的子心流
|
||
```python
|
||
heartflow = Heartflow()
|
||
subheartflow = heartflow.create_subheartflow(chat_id)
|
||
```
|
||
|
||
### 添加观察者
|
||
```python
|
||
observation = ChattingObservation(chat_id)
|
||
subheartflow.add_observation(observation)
|
||
```
|
||
|
||
## 配置说明
|
||
|
||
系统的主要配置参数:
|
||
- `sub_heart_flow_stop_time`: 子心流停止时间
|
||
- `sub_heart_flow_freeze_time`: 子心流冻结时间
|
||
- `heart_flow_update_interval`: 心流更新间隔
|
||
|
||
## 注意事项
|
||
|
||
1. 子心流会在长时间不活跃后自动清理
|
||
2. 需要合理配置更新间隔以平衡性能和响应速度
|
||
3. 观察系统会限制消息处理数量以避免过载
|
||
|
||
# HeartFChatting 与主动回复流程说明 (V2)
|
||
|
||
本文档描述了 `HeartFChatting` 类及其在 `heartFC_controler` 模块中实现的主动、基于兴趣的回复流程。
|
||
|
||
## 1. `HeartFChatting` 类概述
|
||
|
||
* **目标**: 管理特定聊天流 (`stream_id`) 的主动回复逻辑,使其行为更像人类的自然交流。
|
||
* **创建时机**: 当 `HeartFC_Chat` 的兴趣监控任务 (`_interest_monitor_loop`) 检测到某个聊天流的兴趣度 (`InterestChatting`) 达到了触发回复评估的条件 (`should_evaluate_reply`) 时,会为该 `stream_id` 获取或创建唯一的 `HeartFChatting` 实例 (`_get_or_create_heartFC_chat`)。
|
||
* **持有**:
|
||
* 对应的 `sub_heartflow` 实例引用 (通过 `heartflow.get_subheartflow(stream_id)`)。
|
||
* 对应的 `chat_stream` 实例引用。
|
||
* 对 `HeartFC_Chat` 单例的引用 (用于调用发送消息、处理表情等辅助方法)。
|
||
* **初始化**: `HeartFChatting` 实例在创建后会执行异步初始化 (`_initialize`),这可能包括加载必要的上下文或历史信息(*待确认是否实现了读取历史消息*)。
|
||
|
||
## 2. 核心回复流程 (由 `HeartFC_Chat` 触发)
|
||
|
||
当 `HeartFC_Chat` 调用 `HeartFChatting` 实例的方法 (例如 `add_time`) 时,会启动内部的回复决策与执行流程:
|
||
|
||
1. **规划 (Planner):**
|
||
* **输入**: 从关联的 `sub_heartflow` 获取观察结果、思考链、记忆片段等上下文信息。
|
||
* **决策**:
|
||
* 判断当前是否适合进行回复。
|
||
* 决定回复的形式(纯文本、带表情包等)。
|
||
* 选择合适的回复时机和策略。
|
||
* **实现**: *此部分逻辑待详细实现,可能利用 LLM 的工具调用能力来增强决策的灵活性和智能性。需要考虑机器人的个性化设定。*
|
||
|
||
2. **回复生成 (Replier):**
|
||
* **输入**: Planner 的决策结果和必要的上下文。
|
||
* **执行**:
|
||
* 调用 `ResponseGenerator` (`self.gpt`) 或类似组件生成具体的回复文本内容。
|
||
* 可能根据 Planner 的策略生成多个候选回复。
|
||
* **并发**: 系统支持同时存在多个思考/生成任务(上限由 `global_config.max_concurrent_thinking_messages` 控制)。
|
||
|
||
3. **检查 (Checker):**
|
||
* **时机**: 在回复生成过程中或生成后、发送前执行。
|
||
* **目的**:
|
||
* 检查自开始生成回复以来,聊天流中是否出现了新的消息。
|
||
* 评估已生成的候选回复在新的上下文下是否仍然合适、相关。
|
||
* *需要实现相似度比较逻辑,防止发送与近期消息内容相近或重复的回复。*
|
||
* **处理**: 如果检查结果认为回复不合适,则该回复将被**抛弃**。
|
||
|
||
4. **发送协调:**
|
||
* **执行**: 如果 Checker 通过,`HeartFChatting` 会调用 `HeartFC_Chat` 实例提供的发送接口:
|
||
* `_create_thinking_message`: 通知 `MessageManager` 显示"正在思考"状态。
|
||
* `_send_response_messages`: 将最终的回复文本交给 `MessageManager` 进行排队和发送。
|
||
* `_handle_emoji`: 如果需要发送表情包,调用此方法处理表情包的获取和发送。
|
||
* **细节**: 实际的消息发送、排队、间隔控制由 `MessageManager` 和 `MessageSender` 负责。
|
||
|
||
## 3. 与其他模块的交互
|
||
|
||
* **`HeartFC_Chat`**:
|
||
* 创建、管理和触发 `HeartFChatting` 实例。
|
||
* 提供发送消息 (`_send_response_messages`)、处理表情 (`_handle_emoji`)、创建思考消息 (`_create_thinking_message`) 的接口给 `HeartFChatting` 调用。
|
||
* 运行兴趣监控循环 (`_interest_monitor_loop`)。
|
||
* **`InterestManager` / `InterestChatting`**:
|
||
* `InterestManager` 存储每个 `stream_id` 的 `InterestChatting` 实例。
|
||
* `InterestChatting` 负责计算兴趣衰减和回复概率。
|
||
* `HeartFC_Chat` 查询 `InterestChatting.should_evaluate_reply()` 来决定是否触发 `HeartFChatting`。
|
||
* **`heartflow` / `sub_heartflow`**:
|
||
* `HeartFChatting` 从对应的 `sub_heartflow` 获取进行规划所需的核心上下文信息 (观察、思考链等)。
|
||
* **`MessageManager` / `MessageSender`**:
|
||
* 接收来自 `HeartFC_Chat` 的发送请求 (思考消息、文本消息、表情包消息)。
|
||
* 管理消息队列 (`MessageContainer`),处理消息发送间隔和实际发送 (`MessageSender`)。
|
||
* **`ResponseGenerator` (`gpt`)**:
|
||
* 被 `HeartFChatting` 的 Replier 部分调用,用于生成回复文本。
|
||
* **`MessageStorage`**:
|
||
* 存储所有接收和发送的消息。
|
||
* **`HippocampusManager`**:
|
||
* `HeartFC_Processor` 使用它计算传入消息的记忆激活率,作为兴趣度计算的输入之一。
|
||
|
||
## 4. 原有问题与状态更新
|
||
|
||
1. **每个 `pfchating` 是否对应一个 `chat_stream`,是否是唯一的?**
|
||
* **是**。`HeartFC_Chat._get_or_create_heartFC_chat` 确保了每个 `stream_id` 只有一个 `HeartFChatting` 实例。 (已确认)
|
||
2. **`observe_text` 传入进来是纯 str,是不是应该传进来 message 构成的 list?**
|
||
* **机制已改变**。当前的触发机制是基于 `InterestManager` 的概率判断。`HeartFChatting` 启动后,应从其关联的 `sub_heartflow` 获取更丰富的上下文信息,而非简单的 `observe_text`。
|
||
3. **检查失败的回复应该怎么处理?**
|
||
* **暂定:抛弃**。这是当前 Checker 逻辑的基础设定。
|
||
4. **如何比较相似度?**
|
||
* **待实现**。Checker 需要具体的算法来比较候选回复与新消息的相似度。
|
||
5. **Planner 怎么写?**
|
||
* **待实现**。这是 `HeartFChatting` 的核心决策逻辑,需要结合 `sub_heartflow` 的输出、LLM 工具调用和个性化配置来设计。
|
||
|
||
|
||
## 6. 未来优化点
|
||
|
||
* 实现 Checker 中的相似度比较算法。
|
||
* 详细设计并实现 Planner 的决策逻辑,包括 LLM 工具调用和个性化。
|
||
* 确认并完善 `HeartFChatting._initialize()` 中的历史消息加载逻辑。
|
||
* 探索更优的检查失败回复处理策略(例如:重新规划、修改回复等)。
|
||
* 优化 `HeartFChatting` 与 `sub_heartflow` 的信息交互。
|
||
|
||
|
||
|
||
BUG:
|
||
2.复读,可能是planner还未校准好
|
||
3.planner还未个性化,需要加入bot个性信息,且获取的聊天内容有问题 |