Commit Graph

896 Commits

Author SHA1 Message Date
minecraft1024a
e3b08b2982 refactor(set_emoji_like): 使用 send_command 方法发送表情回应
将原先直接调用底层 `adapter_command_to_stream` 的方式重构为使用封装好的 `self.send_command` 辅助方法。

此次重构简化了动作实现代码,提高了可读性,并更好地封装了命令发送的逻辑。
2025-09-24 18:58:46 +08:00
minecraft1024a
7607b08cc2 杀掉一部分日志 2025-09-24 18:13:46 +08:00
minecraft1024a
159a7f7e9d fix(napcat_adapter): 确保回复消息的目标 ID 始终为字符串 2025-09-24 18:06:13 +08:00
minecraft1024a
693392add9 chore(napcat_adapter): 增加回复消息段数据日志 2025-09-24 18:01:14 +08:00
minecraft1024a
efd8414985 chore(napcat_adapter): 增加待处理消息段的日志 2025-09-24 17:34:16 +08:00
minecraft1024a
e7dd4f2c31 chore(napcat_adapter): 增加回复消息的目标 ID 日志 2025-09-24 17:32:46 +08:00
minecraft1024a
51a6094072 删除几个日志 2025-09-24 17:14:48 +08:00
minecraft1024a
62817a1a51 fix(plugin_system): 兼容从 'id' 字段获取消息 ID 2025-09-24 17:05:30 +08:00
minecraft1024a
62ba8c3bfb 我是打日志先人 2025-09-24 16:53:44 +08:00
minecraft1024a
c7f8760b2d chore(napcat_adapter): 增加消息发送与回复处理的详细日志
为了方便排查消息发送失败或引用回复行为不符合预期的问题,在消息发送和回复处理的关键路径上增加了详细的日志输出。

- 在调用 NapCat 发送接口前,记录准备发送的完整消息体。
- 在 `handle_reply_message` 方法中,记录获取被引用消息详情、判断是否 @ 用户以及最终返回的消息段等步骤。
2025-09-24 16:24:16 +08:00
minecraft1024a
5b8cc51dad revert 1a24233b86deb0c4d8446ff31c072ea4b18572aa中的plugin.py 2025-09-24 15:51:28 +08:00
tt-P607
ac9347ebae perf(core): 将异步任务日志降级为 debug 级别
将消息处理的异步任务创建和完成日志级别从 INFO 调整为 DEBUG。

这些日志在高并发场景下会产生大量输出,影响关键信息的查看,并且会带来不必要的 I/O 开销。将其降级到 DEBUG 级别可以使默认日志更清晰,同时保留在需要时进行详细调试的能力。
2025-09-24 15:45:51 +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
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
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
d666773f1f feat(affinity_flow_chatter): 优化动作提示词,为 LLM 提供完整 JSON 范例
为了提升语言模型在选择和执行动作时的稳定性和格式准确性,对动作提示词的生成方式进行了重构。

旧的实现仅提供动作和参数的文本描述,这使得模型在生成动作 JSON 时容易出错。

新的实现为每个可用动作动态构建一个完整的 JSON 使用范例,包含 `action_type`、附带示例值的参数和 `reason` 字段。这种更明确的格式指导旨在显著降低模型输出格式错误的风险。
2025-09-24 03:17:11 +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
tt-P607
9135bd72e4 Merge branch 'afc' of https://github.com/MoFox-Studio/MoFox_Bot into afc 2025-09-23 23:20:31 +08:00
tt-P607
7a05312672 fix(affinity_flow_chatter): 修复私聊上下文构建时对目标信息的访问方式
在近期的重构中,`plan.target_info` 的数据结构已从对象变更为字典。此提交将对应的属性访问方式(`.`)更新为字典键访问(`.get()`),以防止在构建私聊上下文描述时出现 `AttributeError`。
2025-09-23 23:20:18 +08:00
Windpicker-owo
0e4ba5f852 refactor(mood): 支持 DatabaseMessages 类型并改进时间处理逻辑
扩展 update_mood_by_message 方法参数类型,使其支持 MessageRecv 和 DatabaseMessages 两种消息类型。重构时间获取逻辑,通过类型检查分别处理不同消息对象的时间字段,提高代码健壮性和可复用性。
2025-09-23 23:19:55 +08:00
Windpicker-owo
d2abd92a44 feat(affinity_flow_chatter): 添加情绪状态获取接口
为 AffinityChatter 和 ChatterActionPlanner 添加情绪状态相关方法:
- get_current_mood_state() 获取当前情绪状态描述
- get_mood_stats() 获取情绪状态统计信息
- 在规划器中集成情绪管理器更新逻辑

这些接口允许外部模块获取聊天过程中的情绪状态数据,增强了情感交互能力。
2025-09-23 23:14:11 +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
minecraft1024a
2414912c06 feat(chat): 为消息管理器添加睡眠与唤醒机制
将 `SleepManager` 和 `WakeUpManager` 集成到 `MessageManager` 中,以实现机器人的睡眠和唤醒功能。

在睡眠状态下,机器人将忽略常规消息,不进行处理。只有当接收到特定唤醒触发器(如私聊消息或在群聊中被@)时,机器人才能被唤醒并恢复正常的消息处理流程。

此机制旨在模拟更自然的用户行为,并在机器人非活跃时段减少不必要的打扰。
2025-09-23 21:53:00 +08:00
minecraft1024a
ff72181649 refactor(chat): 更新判断群聊消息的属性以适配新结构 2025-09-23 21:28:30 +08:00
Windpicker-owo
68bf0972df refactor(plugins): 将亲和力流模块重构为插件架构并移除旧代码
本次重构将亲和力流(Affinity Flow)模块从核心聊天系统迁移到插件架构中,主要变更包括:

- 删除 src/chat/planner_actions/ 目录下的 plan_executor.py、plan_filter.py 和 planner.py
- 更新插件系统组件类型,将 FOCUS 聊天模式改为 GROUP 和 PRIVATE 模式
- 调整亲和力流插件中的模式引用,确保与新的聊天模式枚举保持一致
- 统一亲和力流模块的导入路径,使其完全作为插件运行

BREAKING CHANGE: 移除原有的 FOCUS 聊天模式,改为 GROUP 和 PRIVATE 模式,需要更新相关配置和代码引用
2025-09-23 14:13:41 +08:00
Windpicker-owo
c08998c585 refactor(plugins): 统一亲和力流模块导入路径
将 chatter 子模块重命名为 affinity_flow_chatter 后,更新相关导入路径以保持一致性:
- individuality.py 中的兴趣评分系统导入路径
- plan_filter.py 中的兴趣评分系统导入路径

这些更改确保模块引用与新的目录结构保持一致,避免导入错误。
2025-09-23 13:38:55 +08:00
Windpicker-owo
e2ca1c7131 refactor(plugins): 统一亲和力流模块导入路径
将 chatter 模块重命名为 affinity_flow_chatter 后,更新相关文件的导入路径以保持一致性:
- chatter_manager.py 中的 ActionPlanner 导入路径
- default_generator.py 中的 interest_scoring 和 relationship_tracker 导入路径
- planner.py 中的内部模块导入路径

这些更改确保模块重构后的代码能够正确引用 affinity_flow_chatter 插件中的组件。
2025-09-23 13:22:06 +08:00
Windpicker-owo
31d3ec45d0 refactor(plugins): 重构亲和力流模块的导入路径
将 chatter 模块重命名为 affinity_flow_chatter 以明确功能区分,
更新 main.py、base_chatter.py、affinity_chatter.py 和 planner.py
中的相关导入语句,确保模块引用正确性。
2025-09-23 13:18:23 +08:00
Windpicker-owo
c3a16fda8d Merge branch 'afc' of https://github.com/MoFox-Studio/MoFox_Bot into afc 2025-09-23 13:14:44 +08:00
Windpicker-owo
a218b932fb refactor(chat): 移除亲和力流模块并将其重构为插件架构
BREAKING CHANGE: 原有的亲和力流相关模块(src/chat/affinity_flow/)已被完全移除,相关功能已重构为插件形式。需要更新配置文件和相关依赖。

- 删除 src/chat/affinity_flow/ 目录下的所有文件
- 将 AFC 管理器功能移至 chatter 插件中实现
- 更新相关导入路径和引用
- 重构关系追踪器和兴趣评分系统的初始化逻辑
- 调整聊天管理器和消息管理器以适应新的插件架构
2025-09-23 13:14:38 +08:00
minecraft1024a
51801bca8e 我将试图修复关系和引用!(当然引用需要你们这群人给我点日志()而且只有回复的引用) 2025-09-23 11:37:11 +08:00
minecraft1024a
3c6700e8ed **我怎么把日志放上来了 2025-09-23 11:27:38 +08:00
minecraft1024a
83860b28de 先修一下命令无法正常检查聊天类型限制 2025-09-23 11:25:47 +08:00
Windpicker-owo
ddcae01612 Merge branch 'afc' of https://github.com/MoFox-Studio/MoFox_Bot into afc 2025-09-23 00:19:35 +08:00
Windpicker-owo
9a97614025 fix 2025-09-23 00:19:10 +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
tt-P607
56b42defdd feat(poke): 优化戳一戳功能,优先使用 user_id 定位用户
之前的戳一戳功能仅依赖 `user_name` 来查找用户,这在某些情况下可能导致识别不准确或失败。

本次更新对计划执行器 (`PlanExecutor`) 进行了增强,使其在处理 `poke_user` 动作时,能直接从目标消息中提取 `user_id`。`PokeAction` 插件现在会优先使用这个更可靠的 `user_id`。如果 `user_id` 不存在,则回退到使用 `user_name` 作为备用方案。

这显著提高了戳一戳功能的准确性和稳定性。
2025-09-22 22:52:28 +08:00
tt-P607
d13b83f10c perf(chat): 将 planner 的非回复动作改为后台任务执行
原先的 PlanExecutor 会 `await` 等待所有动作执行完毕,包括非直接回复用户的动作,这可能导致在这些动作耗时较长时,用户的响应被延迟。

本次修改将非回复类的动作(other_actions)放入 `asyncio.create_task` 中执行,使其成为后台任务。这样可以确保核心的回复流程不被阻塞,从而显著提升机器人的响应速度。

注意:后台任务的执行结果和统计数据将不会在本次执行周期中立即返回。
2025-09-22 19:19:02 +08:00
tt-P607
490a3f03fc feat(chat): 为聊天上下文增加数据库历史回退
当会话中没有已读消息时(例如,在机器人重启后),回复生成器现在会尝试从数据库中加载最近的聊天记录作为备用上下文。

此举旨在解决机器人因缺乏上下文而无法生成相关回复的问题,通过提供历史情景参考,显著提升了在中断对话后恢复聊天的连贯性。加载的数据库消息会与当前未读消息进行去重,以避免信息冗余。
2025-09-22 18:49:59 +08:00
tt-P607
5820417d9f Merge branch 'afc' of https://github.com/MoFox-Studio/MoFox_Bot into afc 2025-09-22 15:45:02 +08:00
tt-P607
9ab0857d89 fix: 修复表情动作模型调用并完善视频分析结果存储
- 表情动作: 将模型调用从 `planner` 切换到 `utils`,以使用更合适的模型进行表情推荐。
- 视频分析: 增加检查逻辑,仅当分析成功且结果不为错误提示时,才将结果存入数据库,防止存储无效记录。
2025-09-22 15:44:51 +08:00
Windpicker-owo
e382b2ffd9 fix(chat): 修复display_message缺失时的显示问题 2025-09-22 12:33:59 +08:00
tt-P607
bf0d214376 feat(chat): 优化提及检测并精简兴趣度评分日志
增强了机器人提及检测逻辑,使其能够识别配置文件中设置的所有别名(alias_names),而不仅仅是主昵称。这提高了交互的灵活性和准确性。

此外,还对兴趣度评分和匹配系统的日志输出进行了大幅重构:
- 将多条评分计算日志合并为一条包含核心指标的摘要日志,使输出更简洁。
- 调整了部分日志级别,将非关键信息移至 DEBUG 级别,以减少日志噪音。
- 在关键日志中增加了消息内容预览,以便于快速上下文定位和调试。
2025-09-21 22:58:18 +08:00
tt-P607
e0e81b209a refactor(log): 精简聊天相关模块的日志输出
为了提高日志的可读性和实用性,对聊天核心流程(兴趣评分、兴趣系统、规划执行)中的日志记录进行了全面优化。

主要变更:
- 移除装饰性的分割线和表情符号,使日志格式更加统一和专业。
- 将多行分散的日志信息合并为单行,提高信息密度,方便快速浏览。
- 调整日志用语,使其更加简洁、客观,便于程序解析和人工阅读。

这些改动旨在使生产环境中的日志更易于追踪和调试,同时保持了关键信息的完整性。
2025-09-21 20:40:00 +08:00
tt-P607
7112cc46bc feat(chat): 区分群聊和私聊生成不同场景提示
之前的 Prompt 模板硬编码了群聊场景,导致在私聊时机器人的角色认知和回应可能不恰当。

本次更新通过引入动态聊天场景提示来解决此问题:
- 在 Prompt 模板中使用 `{chat_scene}` 占位符代替了硬编码的场景描述。
- Replyer 会根据当前是群聊还是私聊,生成不同的场景提示文本(如“你正在一个QQ群里聊天”或“你正在和XX私下聊天”)。
- 通过 PromptParameters 将动态生成的场景提示传递给 Prompt 系统,使模型能够更好地理解上下文。
2025-09-21 18:41:31 +08:00
Windpicker-owo
be9de3868c refactor(napcat_adapter): 移除消息缓冲功能及相关配置
删除消息缓冲功能,包括:
- 移除 message_buffer.py 完整实现
- 清理插件配置中的消息缓冲相关字段
- 删除 message_handler.py 中的缓冲处理逻辑
- 移除 send_handler.py 中的缓冲消息ID特殊处理
- 删除不再使用的模板配置文件

此功能因稳定性问题和实际需求较少而被移除,简化了代码结构并减少维护负担。
2025-09-21 18:14:24 +08:00