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