Commit Graph

601 Commits

Author SHA1 Message Date
Windpicker-owo
128529d71f feat(memory): 添加记忆构建节流机制
在EnhancedMemorySystem中新增min_build_interval_seconds配置项,实现基于作用域的构建频率控制。通过_get_build_scope_key方法根据stream_id、chat_id或user_id生成节流键,确保同一作用域内的记忆构建操作不会过于频繁。

新增_last_memory_build_times字典记录各作用域的最后构建时间,当间隔不足配置阈值时自动跳过构建操作。同时在构建异常时自动清理对应的节流记录,确保系统稳定性。
2025-09-30 00:24:30 +08:00
Windpicker-owo
b30db43776 feat(memory): 实现增强记忆系统并完全替换原有架构
引入全新的增强记忆系统,彻底取代海马体记忆架构
删除旧版记忆系统相关模块,包括Hippocampus、异步包装器和优化器
重构消息处理流程,集成增强记忆系统的存储和检索功能
更新配置结构以支持增强记忆的各项参数设置
禁用原有定时任务,采用内置维护机制保证系统性能
2025-09-30 00:09:46 +08:00
tt-P607
35a4ca3f50 fix(chat): 修复在海马体未初始化时调用主题遗忘的潜在错误
在调用 `operation_forget_topic` 方法前增加空值检查,以防止当海马体或其相关组件尚未完全初始化时,调用该方法导致程序崩溃。此更改增强了记忆遗忘操作的健壮性。
2025-09-29 15:11:05 +08:00
tt-P607
699d71b1f6 fix(chat): 修复在海马体未初始化时整合记忆的潜在错误
在调用 `integrate_memory` 方法时,如果海马体 (`_hippocampus`) 或其海马旁回 (`parahippocampal_gyrus`) 尚未完全初始化,直接调用其方法会引发错误,导致程序崩溃。

此提交增加了对这些对象的存在性检查,确保只有在它们准备就绪时才执行记忆整合操作,从而提高了系统的健壮性,并为未初始化的情况添加了警告日志。
2025-09-29 13:36:46 +08:00
Windpicker-owo
b9ddbb60a1 fix(chat): 将同步调用改为异步调用以匹配接口变更
修改了多处 person_info_manager.get_value() 方法的调用方式,从同步调用改为异步调用(添加 await 关键字),使其与异步接口保持一致。这确保了在获取用户信息时的正确异步操作,避免了潜在的阻塞问题。

涉及文件:
- src/chat/replyer/default_generator.py (3处修改)
- src/chat/utils/prompt.py (1处修改)
- src/person_info/relationship_builder.py (1处修改)
2025-09-29 12:48:45 +08:00
Windpicker-owo
4570fd8b64 fix(chat): 增强消息查找功能并添加未读消息自动清理机制
- 重构 `_find_message_by_id` 方法,支持多种消息ID格式和模糊匹配
- 在动作执行后自动清理未读消息,防止消息堆积
- 为 `reply` 动作添加目标消息查找失败时的降级处理
- 将消息计数和关系查询方法改为异步调用以保持一致性
2025-09-29 10:47:43 +08:00
Windpicker-owo
2fb1674a4d feat(logging): 将调试日志升级为信息级别以增强监控能力
将多个模块中的调试日志(logger.debug)升级为信息级别(logger.info),包括流循环管理、聊天动作生成和消息兴趣度计算等关键组件。

这些修改使得生产环境中能够更直观地监控系统运行状态,包括流等待间隔、动作生成数量和消息处理决策等重要指标,同时移除了冗余的用户ID计算逻辑。
2025-09-29 07:29:20 +08:00
Windpicker-owo
903ab855bf refactor(message_manager): 重构消息分发机制为流循环模式
重构原有的动态消息分发管理器为流循环管理器,每个聊天流拥有独立的无限循环任务主动轮询处理消息。

主要变更:
- 移除 DistributionManager 及相关类(DistributionPriority、DistributionTask、StreamDistributionState、DistributionExecutor)
- 新增 StreamLoopManager 实现基于流的循环处理机制
- 修改 context_manager 和 message_manager 以适配新的流循环模式
- 优化 plan_filter.py 中的消息处理逻辑以适应新的数据格式

BREAKING CHANGE: 原有的分发管理器 API 已被移除,需要更新所有依赖分发功能的代码
2025-09-29 00:42:54 +08:00
Windpicker-owo
28bce19d27 refactor(chat): 移除 ChatStream 的历史消息自动加载功能
移除 ChatStream 初始化时的 `_load_history_messages()` 调用,改为按需异步加载历史消息。这解决了启动时阻塞事件循环的问题,并提高了聊天流初始化的性能。

主要变更:
- 删除 `ChatStream._load_history_messages()` 方法及相关代码
- 将多个模块中的同步数据库查询函数改为异步版本
- 修复相关调用处的异步调用方式
- 优化图片描述查询的错误处理

BREAKING CHANGE: `get_raw_msg_before_timestamp_with_chat` 和相关消息查询函数现在改为异步操作,需要调用处使用 await
2025-09-28 21:31:49 +08:00
Windpicker-owo
fd76e36320 refactor(chat): 迁移数据库操作为异步模式并修复相关调用
将同步数据库操作全面迁移为异步模式,主要涉及:
- 将 `with get_db_session()` 改为 `async with get_db_session()`
- 修复相关异步调用链,确保 await 正确传递
- 优化消息管理器、上下文管理器等核心组件的异步处理
- 移除同步的 person_id 获取方法,避免协程对象传递问题

修复 deepcopy 在 StreamContext 中的序列化问题,跳过不可序列化的 asyncio.Task 对象

删除无用的测试文件和废弃的插件清单文件
2025-09-28 20:40:46 +08:00
Windpicker-owo
08ef960947 refactor(database): 将同步数据库操作迁移为异步操作
将整个项目的数据库操作从同步模式迁移为异步模式,主要涉及以下修改:

- 将 `with get_db_session()` 改为 `async with get_db_session()`
- 将同步的 SQLAlchemy 查询方法改为异步执行
- 更新相关的方法签名,添加 async/await 关键字
- 修复由于异步化导致的并发问题和性能问题

这些修改提高了数据库操作的并发性能,避免了阻塞主线程,提升了系统的整体响应能力。涉及修改的模块包括表情包管理、反提示注入统计、用户封禁管理、记忆系统、消息存储等多个核心组件。

BREAKING CHANGE: 所有涉及数据库操作的方法现在都需要使用异步调用,同步调用将不再工作
2025-09-28 15:42:30 +08:00
Windpicker-owo
ff24bd8148 Merge afc branch into dev, prioritizing afc changes and migrating database async modifications from dev 2025-09-27 23:37:40 +08:00
Windpicker-owo
80d34f3130 refactor(interest-system): 移除旧兴趣度管理系统,迁移到插件内部实现
移除旧的集中式兴趣度管理系统(interest_manager.py),将兴趣度计算功能迁移到affinity_flow_chatter插件内部实现。主要包括:

- 删除interest_manager.py及其相关导入引用
- 修改RelationshipEnergyCalculator使用插件内部的关系分计算
- 重构StreamContextManager使用插件内部的兴趣度评分系统
- 更新ChatStream、PlanFilter、Planner等组件使用新的插件接口
- 简化上下文管理器,移除事件系统和验证器相关代码

此次重构提高了模块独立性,减少了核心代码对插件功能的直接依赖,符合"高内聚低耦合"的设计原则。
2025-09-27 19:07:24 +08:00
Windpicker-owo
0fe052dd37 Merge branch 'afc' of https://github.com/MoFox-Studio/MoFox_Bot into afc 2025-09-27 16:31:44 +08:00
Windpicker-owo
9a70c7a93d refactor(chat): 优化上下文管理器,添加启动与停止功能,改进消息用户ID获取逻辑 2025-09-27 16:31:23 +08:00
minecraft1024a
fe201c389e 1 2025-09-27 15:47:30 +08:00
minecraft1024a
86c3c78259 style(chat): 为提示词导入添加 noqa 以忽略未使用警告 2025-09-27 15:06:44 +08:00
minecraft1024a
b32a934393 fix(chat): 确保 planner 提示词模块被初始化
通过显式导入 planner_prompts 模块,确保其中的提示词在 planner 实例化之前被正确注册,避免潜在的引用问题。
2025-09-27 15:06:02 +08:00
minecraft1024a
9775b9e731 添加了一点日志 2025-09-27 14:59:54 +08:00
minecraft1024a
e544173c3f Revert "feat(proactive): 优化主动聊天逻辑,增加搜索前判断与回复前检查"
This reverts commit 34bce03f17.
2025-09-27 14:45:58 +08:00
minecraft1024a
3cded7220a fix(chat): 完善LLM分句逻辑,在无分割标记时回退至标点分割
当使用 "llm" 模式进行分句时,如果模型未能按预期生成 `[SPLIT]` 标记,之前的逻辑会直接返回整个未分割的文本。

这可能导致过长的句子被发送到下游模块(如TTS),影响体验。本次修改添加了回退机制,当未检测到 `[SPLIT]` 标记时,会自动切换到基于标点的传统分句方法,以提高分句的鲁棒性。
2025-09-27 14:37:06 +08:00
Windpicker-owo
c49b3f3ac4 refactor(chat): 重构消息管理器以使用集中式上下文管理和能量系统
- 将流上下文管理从MessageManager迁移到专门的ContextManager
- 使用统一的能量系统计算focus_energy和分发间隔
- 重构ChatStream的消息数据转换逻辑,支持更完整的数据字段
- 更新数据库模型,移除interest_degree字段,统一使用interest_value
- 集成新的兴趣度管理系统替代原有的评分系统
- 添加消息存储的interest_value修复功能
2025-09-27 14:23:48 +08:00
tt-P607
7f39f6f649 feat(sleep): 细化唤醒机制,实现分聊天的起床气
先前的唤醒与起床气机制是全局性的,一个聊天中的频繁消息会导致Bot对所有聊天都表现出“起床气”状态,这在多聊天场景下体验不佳。

本次更新将唤醒机制与具体的 `chat_id` 进行绑定,实现了更精细化的交互逻辑:
- Bot被吵醒后,其“起床气”状态将只针对吵醒它的聊天生效。
- 在此期间,Bot会忽略其他所有聊天的消息,专注于处理来自触发唤醒的聊天的消息。
- Prompt现在会优先注入起床气相关的描述,确保响应符合当前状态。

此外,为了更准确地捕捉唤醒意图,在群聊中,即使没有@提及,只要消息包含Bot的昵称或别名,也会被视为一次有效“提及”,从而累加唤醒值。
2025-09-27 00:58:41 +08:00
tt-P607
28a2a4b0c8 refactor(config): 移除全局表达开关以支持分聊天配置
移除全局的 `enable_expression` 配置项,转而使用 `get_expression_config_for_chat` 方法在生成提示词时动态判断。

原有的全局开关不够灵活,无法满足分聊天、分群组控制表达功能的需求。此次重构通过在运行时检查每个聊天的具体配置,实现了更精细化的功能启用控制。

BREAKING CHANGE: 全局配置项 `expression.enable_expression` 已被移除。现在需要通过表达规则来为不同的聊天单独控制功能的启用状态。
2025-09-26 23:11:55 +08:00
minecraft1024a
9c1a7ff123 ruff 2025-09-26 20:16:46 +08:00
minecraft1024a
89b79792c0 refactor(chat): 将 get_chat_type_and_target_info 重构为异步函数
将 `get_chat_type_and_target_info` 函数从同步改为异步,以支持其内部对异步方法 `person_info_manager.get_values` 的调用。

此更改可防止在获取聊天对象信息时阻塞事件循环。所有调用此函数的代码(包括 `SubHeartflow`, `ActionModifier`, `PlanGenerator`, `DefaultReplyer`)都已相应更新为使用 `await`。

在 `DefaultReplyer` 中引入了延迟异步初始化模式 (`_async_init`),以适应其类生命周期。
2025-09-26 19:56:46 +08:00
Windpicker-owo
0478be7d2a refactor(chat): 优化消息管理与打断系统,添加打断计数与历史消息加载功能 2025-09-26 19:17:24 +08:00
Windpicker-owo
7718a9b956 refactor(chat): 从StreamContext获取消息兴趣度和连续无回复次数的计算逻辑 2025-09-26 14:02:43 +08:00
Windpicker-owo
bbbf543078 refactor(chat): 重构消息兴趣度计算与动作记录机制
重构聊天系统以使用集中式消息管理API,移除ChatMessageContext类,将兴趣度计算和动作记录功能整合到StreamContext中。

主要变更:
- 移除ChatMessageContext类,使用StreamContext统一管理消息上下文
- 在DatabaseMessages模型中添加interest_degree、actions、should_reply字段
- 实现消息管理器API用于更新消息信息和刷新focus_energy
- 重构ChatStream的focus_energy计算逻辑,基于StreamContext历史消息
- 在动作管理器中添加动作记录功能,确保动作执行后更新消息状态

BREAKING CHANGE: ChatMessageContext类已被移除,相关功能需使用StreamContext API替代
2025-09-26 13:56:43 +08:00
Windpicker-owo
bcea1a93c1 Merge branch 'afc' of https://github.com/MoFox-Studio/MoFox_Bot into afc 2025-09-26 11:45:55 +08:00
Windpicker-owo
ad36a6c48f refactor(chat): 重构消息管理器以使用集中式聊天流API
移除对context.chat_stream的直接依赖,改为通过get_chat_manager().get_stream()统一获取聊天流实例。这提高了模块独立性,符合"高内聚、低耦合"原则。

- 在MessageManager中统一使用chat_api获取stream实例
- 移除mood_manager中直接更新chat_stream的逻辑
- 在affinity_flow_chatter中统一处理兴趣度更新
- 消除直接属性访问带来的强耦合依赖
2025-09-26 11:45:20 +08:00
tt-P607
ef8d080228 refactor(chat): 移除会话数据中的 relationship_score 2025-09-26 02:14:48 +08:00
tt-P607
99595f239d feat(chat): 实现 focus_energy 的实时更新与同步机制
为了解决 `focus_energy` 更新不及时,导致其无法准确反映当前对话兴趣度的问题,本次提交引入了一套新的实时更新与同步机制。

这确保了每当消息的兴趣度发生变化时,代表机器人注意力的 `focus_energy` 也能被立即重新计算和更新,使决策更加精准。

主要变更:
1.  **手动更新**: 在 `ChatStream` 中新增 `update_focus_energy` 方法,允许外部逻辑在需要时手动触发 `focus_energy` 的重新计算。
2.  **实时计算**: `ChatterActionPlanner` 在评估并更新消息兴趣度后,会立即调用 `update_focus_energy`,确保了兴趣度到注意力的即时传导。
3.  **状态同步**: `ChatterManager` 在完成一次执行后,会主动将 `mood_manager` 中可能已更新的 `chat_stream` 同步回当前的 `StreamContext`,保证了整个处理流中数据的一致性。
2025-09-26 02:10:43 +08:00
tt-P607
8d725911da Revert: 回退并发消息处理系统的相关提交
由于并发消息处理的实现在测试中暴露出消息重复和目标ID丢失的问题,暂时回退至该功能合并前的稳定状态,以便进一步排查问题。
2025-09-26 01:54:07 +08:00
tt-P607
c5a55df5ec feat(chat): 实现并发消息处理系统
引入了一个全新的并发消息处理系统,以显著提升在高活跃度群聊中的响应速度。

在此之前,消息管理器对每个聊天流(如一个群聊)内的所有消息进行串行处理,导致用户需要排队等待机器人响应。新系统引入了可配置的并发模式:

- 通过 `concurrent_message_processing` 开关启用。
- 允许并行处理来自同一群聊中不同用户的消息。
- 通过 `process_by_user_id` 保证对同一用户的消息处理仍然是串行的,以维持上下文的连贯性。
- 使用 `concurrent_per_user_limit` 控制并发处理的用户数量。

为了支持此功能,对 `MessageManager` 进行了大规模重构,用更高效的独立流检查机制取代了旧的全局轮询和优先级排序逻辑。同时,清理和移除了大量已废弃或冗余的配置项,简化了整体配置。

BREAKING CHANGE: 移除了多个已废弃的 `ChatConfig` 配置项,包括 `mentioned_bot_inevitable_reply`, `at_bot_inevitable_reply`, `focus_value`, `group_chat_mode` 等。这些功能已被新的 AFC 逻辑或其它机制取代。请参考最新的配置文件模板进行更新。
2025-09-26 00:24:34 +08:00
Windpicker-owo
a2baec088e feat(chat): 实现动态消息分发系统和消息打断机制
添加基于focus_energy的动态消息分发周期调整功能,根据聊天流兴趣度智能调整检查间隔
实现消息打断系统,允许高优先级消息打断正在处理的任务
重构ChatStream类,引入动态兴趣度计算系统,包括消息兴趣度统计和用户关系评分
扩展数据库模型和配置系统以支持新功能,增加相关配置项
更新版本号至0.11.0-alpha-1以反映重大功能更新
2025-09-25 17:14:01 +08:00
minecraft1024a
98212bb938 feat(chat): 在聊天消息中显示用户 QQ 号 2025-09-24 20:22:45 +08:00
minecraft1024a
064784d6b8 feat(chat): 在聊天消息中显示用户 QQ 号 2025-09-24 20:21:59 +08:00
minecraft1024a
62ba8c3bfb 我是打日志先人 2025-09-24 16:53:44 +08:00
tt-P607
1a24233b86 feat(core): 实现消息异步处理并引入LLM驱动的智能表情回应
本次更新对系统核心处理流程和插件功能进行了重要升级,主要包含以下两方面:

1.  **消息处理异步化**:
    - 在 `main.py` 中引入了 `asyncio.create_task` 机制,将每条消息的处理过程包装成一个独立的后台任务。
    - 这解决了长时间运行的AI或插件操作可能阻塞主事件循环的问题,显著提升了机器人的响应速度和系统稳定性。
    - 为后台任务添加了完成回调,现在可以详细地记录每个消息处理任务的成功、失败或取消状态及其耗时,便于监控和调试。

2.  **`set_emoji_like` 插件智能化**:
    - 为 `set_emoji_like` 插件增加了LLM驱动的表情选择功能。当动作指令未指定具体表情时,插件会自动构建包含聊天上下文、情绪和人设的提示,请求LLM选择一个最合适的表情进行回应。
    - 为支持此功能,对AFC规划器的提示词进行了优化,为LLM提供了更清晰的参数示例和规则,提高了动作生成的准确性。

此外,为了统一日志规范,将 `[所见]` 消息接收日志集中到 `bot.py` 中,确保在任何过滤逻辑执行前记录所有收到的消息,并移除了插件中重复的日志。
2025-09-24 15:43:12 +08:00
minecraft1024a
7feae466c3 Megre Pull Request #1260 from MaiCore:https://github.com/MaiM-with-u/MaiBot/pull/1260 2025-09-24 14:17:32 +08:00
Windpicker-owo
37f9b46bcf feat(affinity_flow_chatter): 增强动作思考过程在回复生成中的集成
添加了将动作思考过程集成到回复生成流程的功能:
- 在 generator_api 中新增逻辑,将 action_data 中的 thinking 字段内容添加到 extra_info
- 优化 plan_filter 中对 thinking 字段的处理逻辑,避免添加无意义的默认值
- 更新默认生成器提示词,移除冗余的关系信息块重复
- 在 planner 提示词中添加不对表情包消息回应的限制
2025-09-24 13:53:54 +08:00
minecraft1024a
8ff4687670 fix(db): 修复数据库迁移中列和索引的创建逻辑
- 增强了添加列时对默认值的处理,以兼容不同数据库方言(例如 SQLite 的布尔值)。
- 切换到更标准的 `index.create()` 方法来创建索引,提高了稳定性。
- 调整了启动顺序,确保数据库在主系统之前完成初始化,以防止竞争条件。
2025-09-24 13:46:44 +08:00
Windpicker-owo
9ca8d5d1c0 perf(logging): 将信息级别日志降级为调试级别以优化性能
减少日志输出量,将两个模块中的非关键信息日志从INFO级别调整为DEBUG级别,提升运行效率并减少日志噪音。
2025-09-24 12:48:37 +08:00
minecraft1024a
f7131e65dd refactor(sleep_manager): 引入上下文对象重构睡眠与唤醒状态管理
创建了 `SleepContext` 与 `WakeUpContext` 类,用于统一封装和管理各自模块的状态数据及其持久化逻辑。

- `SleepManager` 和 `WakeUpManager` 不再直接管理零散的状态属性(如 `_current_state`, `wakeup_value`),而是通过持有一个 Context 实例来进行状态的读写和保存。
- 移除了原有的 `SleepStateSerializer` 静态类和管理器中的 `_save_state` / `_load_state` 方法,将逻辑集中到新的 Context 类中。

此次重构旨在提升代码的内聚性,实现状态管理与业务逻辑的分离,使代码结构更清晰,更易于维护和扩展。
2025-09-24 11:39:13 +08:00
tt-P607
ce7d0dead4 feat(affinity_flow_chatter): 优化戳一戳动作以更精准地回应原始消息
当LLM在执行 poke_user 动作时未指定 target_message_id,系统现在会主动在消息历史中寻找触发该动作的“戳一戳”通知,以实现更具上下文的回应。如果未找到对应的通知消息,则会回退到使用最新的消息作为目标。

此外,本次更新包含以下修复:
- 修复了在计划过滤器中错误地引用 `self.available_actions` 的问题,现已更正为 `plan.available_actions`。
- 修复了 `ActionModifier` 中动作列表在多阶段过滤时未及时更新的问题,确保了动作筛选的准确性。
2025-09-24 01:59:28 +08:00
tt-P607
1b8876c4bb feat(affinity_flow_chatter): 重构计划器以支持多动作并优化思考逻辑
本次提交对亲和流聊天器(AFC)的计划与决策核心进行了重大重构和功能增强,旨在提升其响应的灵活性、鲁棒性和可观测性。

主要变更包括:

1.  **多动作支持与解析重构**:
    -   `PlanFilter` 现在能够正确解析并处理 LLM 返回的动作列表(`"actions": [...]`),而不仅限于单个动作,这使得机器人能够执行更复杂的组合行为。
    -   增强了动作解析的鲁棒性,当找不到 `target_message_id` 时会优雅降级(如 `reply` 变为 `no_action`),并会根据当前实际可用的动作列表对 LLM 的选择进行验证。

2.  **提示词工程与思考模式优化**:
    -   重新设计了核心 Planner 提示词,将 `thinking` 字段定义为“思绪流”,引导 LLM 生成更自然、更符合角色的内心独白,而非简单的决策理由,从而提升决策质量和角色扮演的沉浸感。
    -   强制要求 LLM 为需要目标消息的动作提供 `target_message_id`,提高了动作执行的准确性。

3.  **上下文构建与鲁棒性增强**:
    -   在 `PlanFilter` 中增加了上下文回退机制,当内存中缺少历史消息时(如冷启动),会自动从数据库加载最近的消息记录,确保决策所需上下文的完整性。
    -   简化了提供给 LLM 的未读消息格式,移除了兴趣度分数等内部信息,并加入了用户昵称,使其更易于理解和处理。

4.  **可观测性与日志改进**:
    -   在 AFC 的多个关键节点(消息接收、决策、动作执行)增加了彩色的详细日志,使其决策流程像 HFC 一样清晰可见,极大地方便了调试。
    -   将系统中多个模块(视频分析、兴趣度匹配、情绪管理)的常规日志级别从 `INFO` 调整为 `DEBUG`,以减少在生产环境中的日志噪音。

5.  **动作描述优化**:
    -   优化了 `set_emoji_like` 和 `emoji` 等动作的描述,使其意图更清晰,帮助 LLM 做出更准确的动作选择。
2025-09-24 01:41:04 +08:00
Windpicker-owo
5e6cc6ad96 refactor(notification_sender): 移除对 HfcContext 的依赖并简化方法签名 2025-09-23 22:52:32 +08:00
Windpicker-owo
05dcf5acc1 Merge branch 'afc' of https://github.com/MoFox-Studio/MoFox_Bot into afc 2025-09-23 22:20:40 +08:00
Windpicker-owo
ebc4feebd9 refactor(affinity_flow): 重构规划器架构并简化日志输出
- 移除ChatterManager中不必要的ActionPlanner实例化
- 在MessageManager中设置默认聊天模式为FOCUS
- 重构BaseChatter构造函数,移除planner依赖
- 统一ChatMode枚举定义,移除GROUP/PRIVATE模式
- 重构AffinityChatter内部planner初始化逻辑
- 大幅简化兴趣评分系统的日志输出
- 修复plan_filter中的动作解析逻辑,支持新格式
- 更新planner_prompts提示词模板,移除私聊限制
- 优化关系追踪器的错误处理和日志输出
2025-09-23 22:18:03 +08:00