Commit Graph

40 Commits

Author SHA1 Message Date
tt-P607
57794480b8 feat(chatter): 引入决策历史以增强上下文连续性
为提升语言模型在连续对话中的表现,本次更新引入了决策历史功能。该功能旨在为模型提供一个短期记忆,记录其最近的思考过程与采取的行动。

主要变更包括:
- 新增 `DecisionRecord` 数据模型,用于存储“思考-动作”对。
- 在 `StreamContext` 中添加 `decision_history` 字段,以维护每个聊天流的决策历史。
- 在 `plan_filter` 中实现决策记录的逻辑,并在构建提示词时将其注入,供模型参考。
- 添加 `enable_decision_history` 和 `decision_history_length` 配置项,允许用户启用此功能并调整历史记录的长度。

通过回顾近期的决策,模型可以更好地避免重复行为,并生成更具连贯性和创造性的响应。
2025-10-29 18:58:28 +08:00
Windpicker-owo
e26940dd4e feat(chat): 添加消息重复处理防护机制
在StreamContext中添加processing_message_id字段,用于跟踪当前正在处理的目标消息ID。在AffinityFlowChatter规划器中实现重复消息检测逻辑,防止对同一消息进行重复回复处理。

- 在增强版规划流程和Normal模式流程中添加目标消息ID检查
- 当检测到正在处理相同消息时返回no_action避免重复
- 在处理完成后清理processing_message_id标记
- 添加详细的日志记录用于调试和监控
2025-10-29 07:40:26 +08:00
Windpicker-owo
79a0088065 feat(chat): 添加Chatter处理状态跟踪机制
在StreamLoopManager中添加is_chatter_processing标志来精确跟踪Chatter处理状态,优化消息打断检查逻辑。

- 在distribution_manager中设置和清除Chatter处理标志
- 在message_manager中基于处理状态进行打断检查
- 在数据模型中添加is_chatter_processing字段
2025-10-27 22:37:55 +08:00
Windpicker-owo
a2c0afa75d refactor(chat): 简化任务管理架构,移除多重回复支持
- 移除 ChatterManager 中的复杂任务追踪逻辑(_processing_tasks)
- 将流循环任务管理从 StreamLoopManager 转移到 StreamContext
- 简化消息打断机制,通过取消 stream_loop_task 实现
- 移除多重回复相关功能,统一使用单一任务管理
- 优化错误处理和资源清理逻辑

BREAKING CHANGE: 移除了多重回复功能,所有流处理现在使用单一任务架构
2025-10-27 17:16:36 +08:00
Windpicker-owo
0d3e46fc97 feat(message): 在消息处理中嵌入 format_info 到 additional_config
在 bot.py 和 chat_stream.py 中新增逻辑,将消息的 format_info 嵌入到 additional_config 字段中,确保 Action 能够正确检查适配器支持的消息类型。同时删除已废弃的 optimized_chat_stream.py 文件,并修复 notice_handler.py 中的类型注解问题。

- 在 bot.py 和 chat_stream.py 中添加 _prepare_additional_config 方法
- 将 format_info 序列化后嵌入 additional_config JSON 中
- 增强 StreamContext.check_types 方法的日志输出以便调试
- 删除不再使用的 optimized_chat_stream.py 文件
- 修复 notice_handler.py 中的类型注解问题
2025-10-26 10:46:04 +08:00
tt-P607
5b29399d94 fix(chat): 防止在生成回复时触发消息打断
通过在聊天流上下文中引入 `is_replying` 状态标志,解决了在LLM生成回复期间可能被新消息错误打断的问题。

- 在调用LLM生成内容前将 `is_replying` 设置为 `True`。
- 在消息打断检查逻辑中,如果 `is_replying` 为 `True` 则跳过检查。
- 使用 `finally` 块确保无论生成成功或失败,`is_replying` 状态都会被重置为 `False`。

这确保了回复生成的原子性,防止了因用户快速连续发送消息而导致的自我打断。
2025-10-23 14:41:46 +08:00
tt-P607
cce30f34f1 feat(chat): 优化消息打断逻辑,仅限触发用户
为了防止群聊中其他用户的消息意外中断正在进行的AI多重回复,引入了“触发用户”机制。

- 现在,只有发起该轮对话的用户发送的新消息才可能触发打断。
- 此外,表情包和Emoji等非文本消息将被忽略,不再触发打断,以提高交互的流畅性。
2025-10-23 14:30:42 +08:00
Windpicker-owo
2ec3be7c84 feat(notice): 实现全局notice消息管理系统
添加全局notice管理器,将notice消息与普通消息分离处理。主要功能包括:

- 创建 GlobalNoticeManager 单例类,支持公共和特定聊天流作用域
- 在 message_manager 中集成notice检测和处理逻辑
- 扩展数据库模型和消息类,添加notice相关字段
- 在提示词生成器中添加notice信息块展示
- 配置系统支持notice相关参数设置
- 适配器插件增强notice类型识别和配置

notice消息特点:
- 默认不触发聊天流程,只记录到全局管理器
- 可在提示词中展示最近的系统通知
- 支持按类型设置不同的生存时间
- 支持公共notice(所有聊天可见)和流特定notice

BREAKING CHANGE: 数据库消息表结构变更,需要添加 is_public_notice 和 notice_type 字段
2025-10-19 22:45:19 +08:00
minecraft1024a
c01607b17b chore: 代码清理和格式化
对项目代码进行了一系列小幅度的清理和改进,包括:
- 移除未使用的导入语句
- 统一代码格式,如调整空行和导入顺序
- 优化日志输出的可读性
- 更新类型注解以符合现代 Python 语法
- 修复代码风格检查器(linter)报告的问题
2025-10-12 12:41:05 +08:00
tt-P607
244b95e0af revert: 回退 commit 94e34c9370 2025-10-11 15:40:55 +08:00
tt-P607
94e34c9370 fix(chat): 修复消息打断会取消正在进行的回复任务的问题
之前的消息打断逻辑会无差别地取消处理流中的所有任务。这会导致一个问题:当用户在机器人生成回复期间快速发送新消息时,回复任务会被意外中断,导致机器人无法正常完成回复。

本次修改通过引入 `is_replying` 状态来解决此问题:
1.  在 `StreamContext` 中新增 `is_replying` 状态标志,用于追踪回复生成过程。
2.  当开始生成回复时,设置该标志为 `True`,并在回复完成或取消后通过 `finally` 块确保其恢复为 `False`。
3.  `MessageManager` 的打断检查逻辑现在会首先检查此标志,如果为 `True` 则跳过打断,从而保护正在进行的回复。
4.  `cancel_all_stream_tasks` 也增加了 `exclude_reply` 选项,确保即使触发打断,也不会取消回复任务。
2025-10-11 02:11:32 +08:00
Windpicker-owo
dd1444cc41 refactor(chat): 重构关系系统并优化消息打断处理机制
- 移除独立的RelationshipConfig,将关系追踪参数整合到AffinityFlowConfig
- 实现消息打断后立即重新处理流程,提升交互响应性
- 优化关系追踪系统,添加概率筛选和超时保护机制
- 改进机器人自引用处理,确保消息内容正确显示
- 增强用户信息提取逻辑,兼容多种消息格式
- 添加异步后台任务处理,避免阻塞主回复流程
- 调整兴趣评分阈值和权重参数,优化消息匹配精度
2025-10-08 22:33:10 +08:00
LuiKlee
b3ae8e4f1a 重构database_data_model.py
没用力测试,炸了叫lui修
2025-10-08 18:39:43 +08:00
Windpicker-owo
4971d18f14 feat(chat): 优化消息打断系统概率模型为反比例函数
将消息打断系统的概率计算从线性模型改为反比例函数模型,
提供更合理的打断概率分布:

- 第1次打断概率约80%
- 第2次打断概率约35%
- 第3次打断概率约15%
- 后续趋近于最低概率(5%)

新模型通过反比例函数实现前期高概率、快速衰减的特性,
避免线性模型中后期打断概率仍然较高的问题,提升用户体验。
2025-10-07 13:52:01 +08:00
Windpicker-owo
76713bf727 feat(chat): 重构消息打断系统为线性概率模型
将复杂的指数衰减概率模型简化为线性概率模型,提高可预测性和可配置性

- 新增最低打断概率配置,确保始终有打断机会
- 移除复杂的概率因子计算,改用简单的线性递减公式
- 增加最大打断次数默认值从3提升到10
- 保留废弃配置项以确保向后兼容
- 更新配置模板和文档说明新的概率计算方式
2025-10-07 13:21:33 +08:00
sunbiz1024
8f4f7d19af ruff 2025-10-06 09:38:16 +08:00
minecraft1024a
9d705463ce ruff fix但指定了--unsafe-fixes 2025-10-05 21:48:32 +08:00
minecraft1024a
7a7f737f71 ruff: 清理代码并规范导入顺序
对整个代码库进行了大规模的清理和重构,主要包括:
- 统一并修复了多个文件中的 `import` 语句顺序,使其符合 PEP 8 规范。
- 移除了大量未使用的导入和变量,减少了代码冗余。
- 修复了多处代码风格问题,例如多余的空行、不一致的引号使用等。
- 简化了异常处理逻辑,移除了不必要的 `noqa` 注释。
- 在多个文件中使用了更现代的类型注解语法(例如 `list[str]` 替代 `List[str]`)。
2025-10-05 20:38:56 +08:00
雅诺狐
efc4f7a13e Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-10-05 17:50:13 +08:00
雅诺狐
29cf3e3fbc Refactor memory metadata index to use Rust backend
Replaces the Python implementation of MemoryMetadataIndex with a Rust-accelerated version, removing legacy code and fallback logic. Updates search, add, and stats methods to delegate to the Rust backend. Also adds missing imports in llm_data_model.py and base_event.py for improved type support and event handling.
2025-10-05 16:35:31 +08:00
Windpicker-owo
23e523c7b9 refactor(chat): 优化异步任务处理和消息管理逻辑
- 使用asyncio.create_task替代await调用,提升并发性能
- 简化流管理器的槽位获取逻辑,移除回退方案
- 重构上下文管理器的消息添加和更新机制
- 移除StreamContext中的冗余方法,保持数据模型的简洁性
- 优化兴趣度评分系统的更新流程,减少阻塞操作

这些改动主要关注性能优化和代码结构简化,不涉及功能变更。
2025-10-05 15:17:30 +08:00
Windpicker-owo
624298e1b8 refactor(chat): 异步化聊天系统并重构兴趣值计算机制
将同步调用改为异步调用以提升性能,重构兴趣值计算流程以支持更灵活的组件化架构。主要改进包括:

- 异步化ChatManager相关方法,避免阻塞主线程
- 重构兴趣值计算系统,从插件内部计算改为通过兴趣管理器统一处理
- 新增should_act字段支持更细粒度的动作决策
- 优化初始化逻辑,避免构造函数中的异步操作
- 扩展插件系统支持兴趣计算器组件注册
- 更新数据库模型以支持新的兴趣值相关字段

这些改进提升了系统的响应性能和可扩展性,同时保持了API的向后兼容性。
2025-10-05 01:25:52 +08:00
John Richard
7923eafef3 re-style: 格式化代码 2025-10-02 20:26:01 +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
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
c49b3f3ac4 refactor(chat): 重构消息管理器以使用集中式上下文管理和能量系统
- 将流上下文管理从MessageManager迁移到专门的ContextManager
- 使用统一的能量系统计算focus_energy和分发间隔
- 重构ChatStream的消息数据转换逻辑,支持更完整的数据字段
- 更新数据库模型,移除interest_degree字段,统一使用interest_value
- 集成新的兴趣度管理系统替代原有的评分系统
- 添加消息存储的interest_value修复功能
2025-09-27 14:23:48 +08:00
Windpicker-owo
0478be7d2a refactor(chat): 优化消息管理与打断系统,添加打断计数与历史消息加载功能 2025-09-26 19:17:24 +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
a2baec088e feat(chat): 实现动态消息分发系统和消息打断机制
添加基于focus_energy的动态消息分发周期调整功能,根据聊天流兴趣度智能调整检查间隔
实现消息打断系统,允许高优先级消息打断正在处理的任务
重构ChatStream类,引入动态兴趣度计算系统,包括消息兴趣度统计和用户关系评分
扩展数据库模型和配置系统以支持新功能,增加相关配置项
更新版本号至0.11.0-alpha-1以反映重大功能更新
2025-09-25 17:14:01 +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
Windpicker-owo
e1683ee9e6 feat: 在插件系统中添加 Chatter 组件
- 在 component_types.py 中新增了用于 CHATTER 的 ComponentType。
- 实现了 ChatterInfo 类,用于存储 Chatter 组件的相关信息。
- 增强了 ComponentRegistry,以支持 Chatter 组件的注册与管理。
- 创建了 ChatterManager,用于管理 Chatter 实例并处理聊天流。
- 开发了 BaseChatter 抽象类,用于定义 Chatter 的行为规范。
- 实现了 AffinityChatter,作为具备兴趣评分与关系构建功能的具体 Chatter 组件。
- 添加了一个内置的 Chatter 插件,并附带完整文档与使用示例。
- 更新了 PluginManager,在插件概览中加入 Chatter 组件的统计信息。
2025-09-23 00:17:32 +08:00
Windpicker-owo
444f1ca315 ruff,私聊视为提及了bot 2025-09-20 22:34:22 +08:00
雅诺狐
898208f425 perf(methods): 通过移除不必要的 self 参数优化方法签名
在包括 chat、plugin_system、schedule 和 mais4u 在内的多个模块中,消除冗余的实例引用。此次改动将无需访问实例状态的实用函数转换为静态方法,从而提升了内存效率,并使方法依赖关系更加清晰。
2025-09-20 10:55:06 +08:00
Windpicker-owo
a2225cad3a feat(affinity-flow): 重构消息处理以使用StreamContext对象
重构AFC消息处理系统,将基于字典的消息数据传递改为直接使用StreamContext对象。主要变更包括:

- 修改AFCManager的process_message方法为process_stream_context,直接接收StreamContext对象
- 在chatter中重构消息处理逻辑,直接从StreamContext获取未读和历史消息
- 移除批量消息处理功能,改为单次StreamContext处理
- 在message_manager中简化消息处理流程,直接传递StreamContext对象
- 添加未读消息清理机制,防止异常情况下消息一直未读

同时优化兴趣度评分系统的参数:
- 调整回复阈值从0.55到0.56
- 增加最大不回复次数从15到20
- 提升每次不回复的概率增加从0.01到0.02
- 优化提及奖励从3.0降到1.0
- 调整回复后的不回复计数减少从1到3

BREAKING CHANGE: AFCManager的process_message方法已重命名为process_stream_context,参数从message_data改为context对象
2025-09-18 22:27:29 +08:00
Windpicker-owo
974de4d25d feat(affinity-flow): 重构兴趣度评分系统为智能embedding匹配
- 移除传统关键词匹配方式,改用embedding计算智能兴趣匹配度
- 添加异步方法支持机器人兴趣管理器的智能匹配计算
- 增加详细的日志记录和错误处理机制
- 添加数据库关键词提取和降级处理逻辑
- 集成智能兴趣系统初始化到人设构建流程
- 防止回复自身消息的死循环保护机制

BREAKING CHANGE: 兴趣匹配评分机制完全重构,从基于关键词的硬编码匹配改为基于embedding的智能匹配,需要重新初始化兴趣系统
2025-09-16 22:55:38 +08:00
Windpicker-owo
cdb2344e41 feat(affinity-flow): 优化兴趣度评分系统并集成消息管理器
重构兴趣度评分系统,移除时间因子权重,增加未读消息处理机制。集成消息管理器用于消息存储和状态跟踪,改进提及检测逻辑。

主要变更:
- 移除时间因子评分,调整兴趣匹配度权重至0.5
- 添加未读消息参数到规划器,优化兴趣度计算
- 引入消息管理器处理消息存储和状态标记
- 改进提及检测逻辑,使用消息对象的is_mentioned属性
- 添加消息清理和启动/停止机制

BREAKING CHANGE: 兴趣度评分算法调整,需要重新评估消息优先级
2025-09-16 14:13:56 +08:00
Windpicker-owo
c52b4daf1a 初步开始重写聊天系统 2025-09-15 13:11:37 +08:00
minecraft1024a
c57711c674 refactor(data_model): 解除 plan_filter 对 DatabaseMessages 的直接依赖
将 `target_message_obj` 的类型从 `DatabaseMessages` 实例改为字典,从而消除了 `plan_filter` 模块对 `database_data_model` 的循环导入风险。同时更新了 `ActionPlannerInfo` 中 `action_message` 的类型注解以保持一致性。
2025-09-14 15:09:55 +08:00
minecraft1024a
e37ee46d59 refactor(planner): 重构动作规划器为模块化结构
将原有的 `ActionPlanner` 类拆分为三个独立的模块:`PlanGenerator`、`PlanFilter` 和 `PlanExecutor`。`ActionPlanner` 现在作为协调器,按顺序调用这三个模块,使规划流程更加清晰和模块化。

- **PlanGenerator**: 负责根据聊天模式和上下文生成初始规划。
- **PlanFilter**: 负责审查和筛选由生成器产生的动作。
- **PlanExecutor**: 负责执行最终确定的动作。

此重构简化了 `cycle_processor` 中的调用逻辑,并为未来的功能扩展(如更复杂的过滤规则)提供了更好的基础。同时,引入了新的 `Plan` 数据模型来统一规划过程中的数据传递。
2025-09-13 11:48:04 +08:00
minecraft1024a
fc5980a282 先添加一个数据模型你别管他用没用 2025-09-12 21:35:19 +08:00