Commit Graph

870 Commits

Author SHA1 Message Date
雅诺狐
0efbc6dbfe 更新视频识别 2025-09-21 09:59:39 +08:00
雅诺狐
4fcaa8e7fb 移出Rust组件 2025-09-20 18:36:02 +08:00
雅诺狐
4ca2dfe65a refactor(chat): 优化自消息处理逻辑和回复目标选择机制
- 添加自消息阻断机制,避免机器人回复自己的消息
- 重构回复目标选择逻辑,优先选择非机器人用户的消息作为回复目标
2025-09-20 18:08:07 +08:00
雅诺狐
43c93a0e04 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-20 17:26:52 +08:00
雅诺狐
832743249d refactor(db): 修正SQLAlchemy异步操作调用方式
移除session.add()方法的不必要await调用,修正异步数据库操作模式。主要变更包括:

- 将 `await session.add()` 统一改为 `session.add()`
- 修正部分函数调用为异步版本(如消息查询函数)
- 重构SQLAlchemyTransaction为完全异步实现
- 重写napcat_adapter_plugin数据库层以符合异步规范
- 添加aiomysql和aiosqlite依赖支持
2025-09-20 17:26:28 +08:00
雅诺狐
5f3203c6c9 refactor(db): 修正SQLAlchemy异步操作调用方式
移除session.add()方法的不必要await调用,修正异步数据库操作模式。主要变更包括:

- 将 `await session.add()` 统一改为 `session.add()`
- 修正部分函数调用为异步版本(如消息查询函数)
- 重构SQLAlchemyTransaction为完全异步实现
- 重写napcat_adapter_plugin数据库层以符合异步规范
- 添加aiomysql和aiosqlite依赖支持
2025-09-20 17:25:48 +08:00
雅诺狐
55717669dd refactor(db): 将数据库操作异步化
- 将所有 session.add() 改为 await session.add()
- 将所有 session.commit() 改为 await session.commit()
- 将 session.refresh() 改为 await session.refresh()
2025-09-20 14:35:31 +08:00
雅诺狐
816ce9805c Update base_action.py 2025-09-20 14:18:53 +08:00
tt-P607
e2e0d3c30a refactor(core): 适配核心数据获取与消息构建函数的异步调用
在数据库交互层异步化后,多个相关的数据获取和消息构建函数(如 `build_readable_messages`)也转为异步实现。本次提交在所有调用点添加了 `await` 关键字,以适应这一变化。

此外,本次提交还包含以下修复:
- 在主动思考模块中增加了对规划器返回无效动作的检查,避免后续流程出错。
- 修正了日志记录中错误的上下文变量引用。
2025-09-20 13:52:37 +08:00
tt-P607
8d9aa4fb9e refactor(db): 重构数据库交互为异步模式
为了提升性能并与项目整体的异步架构保持一致,对核心数据库交互模块进行了异步化重构。

主要修改内容包括:
- 将 `PermissionManager` 中的所有数据库操作从同步改为异步,以避免阻塞事件循环。
- 使用 `async_sessionmaker` 和 `async with session` 替代原有的同步会话管理。
- 将 SQLAlchemy 查询语法更新为异步兼容的 `await session.execute(select(...))` 模式。
- 相应地,调用链中依赖数据库操作的多个方法也已更新为 `async` 函数。
2025-09-20 13:07:06 +08:00
tt-P607
57b2e32ba0 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-20 12:43:42 +08:00
tt-P607
6b5bf02382 总算能回复了😭😭😭 2025-09-20 12:43:37 +08:00
雅诺狐
7777e1ec71 Update message.py 2025-09-20 12:38:24 +08:00
雅诺狐
d22b3b71fe 小修复 2025-09-20 12:31:05 +08:00
tt-P607
a2b9f963e4 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-20 12:26:38 +08:00
tt-P607
74a9c346f0 6 2025-09-20 12:26:31 +08:00
tt-P607
9b2addfd86 5 2025-09-20 12:22:15 +08:00
tt-P607
a8992cdd51 4次修改 2025-09-20 11:57:22 +08:00
雅诺狐
788190fb11 将AFC合并至Master分支 2025-09-20 11:45:59 +08:00
雅诺狐
898208f425 perf(methods): 通过移除不必要的 self 参数优化方法签名
在包括 chat、plugin_system、schedule 和 mais4u 在内的多个模块中,消除冗余的实例引用。此次改动将无需访问实例状态的实用函数转换为静态方法,从而提升了内存效率,并使方法依赖关系更加清晰。
2025-09-20 10:55:06 +08:00
tt-P607
0cc4f5bb27 三次修改 2025-09-20 02:21:53 +08:00
雅诺狐
6a98ae6208 二次修改 2025-09-19 20:45:26 +08:00
雅诺狐
4dbc651d74 数据库异步支持
仅仅支持还有107处待迁移
2025-09-19 20:20:20 +08:00
minecraft1024a
5a0a63464a Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-19 19:01:00 +08:00
tt-P607
437d804efd feat(napcat): 支持音乐分享卡片并增强消息兼容性
新增对 NapCat 框架音乐分享类型消息的解析支持。现在可以正确识别并提取音乐卡片中的歌曲、歌手、来源和封面等信息,并将其格式化为图文消息进行展示。

此外,增强了消息接收的兼容性。对于缺少 `post_type` 字段但包含 `message_type` 的普通消息,会自动补充 `post_type` 字段,确保其能被正常路由和处理,避免消息丢失。
2025-09-18 15:06:55 +08:00
tt-P607
bd8859ed82 回退“feat: 实现KEYWORD_OR_LLM_JUDGE激活类型” 2025-09-17 22:43:01 +08:00
tt-P607
722790d830 feat(plugins): 新增网易云音乐点歌插件
新增一个内置的音乐点歌插件,允许用户通过自然语言或特定命令搜索和分享来自网易云音乐的歌曲。

- **双模触发**: 支持通过关键词(如“点歌”、“来首歌”)自动激活的 Action 组件和通过 `/music <歌曲名>` 命令精确触发的 Command 组件。
- **API集成**: 集成了第三方网易云音乐API,用于搜索歌曲信息,并包含重试机制以提高稳定性。
- **丰富的消息类型**: 能够将搜索结果以标准的音乐卡片形式发送给用户,提升交互体验。
- **高度可配置**: 插件提供了详细的配置文件,允许用户自定义API地址、超时时间、功能开关(如是否显示专辑封面、是否以语音形式发送)等。
- **完整的插件结构**: 包含了 `_manifest.json`、`README.md` 和 `LICENSE` 文件,符合插件规范,提供了清晰的文档和许可证信息。
2025-09-17 20:59:31 +08:00
tt-P607
f5435cabd7 feat(actions): 增强音乐搜索,从LLM回复中提取确切歌名
为了提高音乐播放的准确性,引入了一种新机制,可根据 LLM 生成的回复动态更新音乐搜索动作。

在某些场景下,Planner 生成的 `music_search` 动作可能只包含一个模糊的意图,而 LLM 在其回复文本中会明确指出要播放的具体歌曲(例如,“好的,为您播放《晴天》”)。

此变更通过以下方式解决了这个问题:
- 新增 `_extract_song_name_from_reply` 辅助函数,用于从回复文本中解析书名号《》内的歌名。
- 在执行并行附加动作前,系统会尝试从主回复中提取歌名。
- 如果成功提取,该歌名将被注入 `music_search` 动作的参数中,确保执行的搜索与 LLM 的意图完全一致。
2025-09-17 20:51:53 +08:00
tt-P607
f7b4263f87 feat(planner): 引入双模动作激活机制与混合触发类型
为了更精细地控制动作在不同聊天模式下的行为,并提升决策效率,本次更新引入了全新的动作激活机制。

- **双模激活**: 为 Action 新增 `normal_activation_type` 和 `focus_activation_type` 属性,允许插件在 `NORMAL` 和 `FOCUS` 模式下拥有不同的激活策略,使行为更符合上下文。

- **混合触发**: 新增 `KEYWORD_OR_LLM_JUDGE` 激活类型。该类型会先进行快速的关键词匹配,若未匹配成功,则回退至 LLM 进行判断,兼顾了响应速度和智能化。

- **流程优化**: 重构了 `PlanGenerator` 的动作筛选逻辑,使其在生成计划前,就根据当前聊天模式和简单的激活规则进行预筛选,为后续的 LLM 决策提供更精准、更高效的候选动作列表。
2025-09-17 20:27:19 +08:00
tt-P607
66899208a6 feat(tarots): 新增塔罗牌占卜插件
新增了一个功能完备的塔罗牌占卜插件,为机器人增加了娱乐和互动能力。

主要功能包括:

- **自然语言交互**:通过 Action 响应用户的抽牌请求,并由大模型进行个性化解牌。
- **多牌组与牌阵**:内置B站幻星集、经典韦特和东方塔罗牌组,支持单张、圣三角等多种牌阵。
- **智能图片缓存**:自动从网络下载并缓存卡牌图片,具备完整性校验和代理支持,提升响应速度。
- **管理指令**:提供 `/tarots` 指令,方便管理员一键缓存所有图片和切换当前使用的牌组。
2025-09-17 15:27:23 +08:00
tt-P607
9f1b62a63a feat(reminder): 增强自然语言时间解析的智能化
更新了用于时间转换的LLM提示词,增加了更智能的推断规则,以更准确地处理模糊的时间表述。

主要改进:
- 根据当前时间上下文推断上午/下午。例如,在下午说“8点”,将被理解为当晚20:00。
- 当解析出的时间早于当前时间时,自动将提醒设置为第二天,避免创建无效的过去提醒。
2025-09-16 15:34:01 +08:00
tt-P607
31ede52be9 fix(reminder): 修复多条提醒消息重复@用户的问题
当提醒消息被分割成多段发送时,旧的逻辑会导致每一段消息都@目标用户。

本次修改调整了消息构造逻辑,确保只有第一段消息会包含@提醒,避免在群聊中造成不必要的刷屏。
2025-09-16 15:27:54 +08:00
tt-P607
2fba610bb7 feat(reminder): 使用 LLM 生成个性化提醒消息
将提醒插件中的确认消息和提醒通知改为通过 `generator_api` 调用 LLM 生成,以提供更具个性和符合人设的互动体验。

- **动态确认消息**: 在用户成功设置提醒后,调用 LLM 生成一条生动的确认回复,取代了原有的固定文本。
- **动态提醒内容**: 在提醒任务触发时,调用 LLM 根据提醒内容、设置者和被提醒者信息生成一条定制化的提醒消息。
- **回退机制**: 为确保核心功能的稳定性,在 LLM 调用失败或未返回有效内容时,系统将自动回退到原有的硬编码模板消息。
2025-09-16 15:12:25 +08:00
tt-P607
3603d5ec61 feat(reminder): 提升提醒功能的用户识别与意图理解
为提升提醒插件的可用性和准确性,进行了两项主要增强:

1.  **优化意图提取Prompt**:向LLM提供了Bot自身名称,并增加了示例,指导其更准确地识别提醒的真正目标,避免将Bot误认为被提醒人。
2.  **引入多级用户匹配机制**:在原有的精确名称匹配基础上,增加了子字符串包含匹配和基于`difflib`的模糊匹配,大幅提高了在用户名称输入不完全或有误时成功设置提醒的概率。
2025-09-16 14:37:34 +08:00
tt-P607
890cedc1ed feat(planner): 重构动作决策逻辑与参数提取机制
本次提交对动作规划器(Planner)和动作(Action)的执行流程进行了重大重构,旨在提高决策的准确性和可靠性,使机器人能更精确地响应用户指令。

核心变更:
- **决策与参数提取分离**: 规划器(Planner)现在专注于根据用户意图选择最合适的动作,不再负责提取动作参数。
- **动作参数自解析**: `RemindAction` 等动作现在通过内部调用 LLM,从用户消息中自行解析所需参数,使其更加独立和健壮。
- **优化决策Prompt**: 引入“最高优先级检查”和“互斥原则”,强制优先执行由明确意图触发的特定动作(如 `set_reminder`),并在此情况下禁止选择 `reply`,避免重复响应。
- **增强调试**: 在处理循环中增加了日志,以清晰地记录LLM最终选择的动作组合,方便调试。
2025-09-16 14:00:33 +08:00
tt-P607
7a1e7218f2 fix(chat): 优化线程环境下的同步数据库调用逻辑
重构了 `_sync_db_get` 函数,以解决在复杂线程和事件循环场景下可能出现的死锁和不稳定性问题。

旧的实现逻辑过于复杂,试图处理多种事件循环状态,容易出错。新的实现采用了更简洁、更健壮的策略:
- 缓存主事件循环的引用,优先在子线程中使用 `run_coroutine_threadsafe`。
- 当无法使用主循环或在主线程中时,回退到使用 `asyncio.run()` 创建新循环来执行异步任务,这是一种更安全的模式。
- 增加了保护措施,避免在已运行的主事件循环中调用时造成阻塞。

此外,此提交还修复了日志记录器中可能添加空前缀导致格式异常的小问题。
2025-09-16 11:47:27 +08:00
tt-P607
9e52bb85a8 呀,柒柒!♪~ 让我来看看这次的修改,为你谱写一段美妙的提交记录吧!这次的改动主要是为了让我的“内心思考”过程变得更加清晰和可爱,调试起来也会更方便哦!
feat(planner): 引入内心思考流,优化规划器推理与日志可读性

本次更新引入了“内心思考”机制,旨在取代原有简单的`reason`字段,使AI的决策过程更加透明、自然,并富有角色扮演的特色。这不仅增强了AI的人设表现力,也极大地提升了日志的可读性和调试效率。

主要变更包括:

- **Prompt 优化**: 彻底重构了规划器(Planner)的核心提示词,引导大语言模型生成一段模拟人类的、未经修饰的思绪流作为决策依据。新的 Prompt 强调展现思考过程而非结论,并提供了详细的示例。

- **日志高亮与格式化**: 在日志系统中增加了对“内心思考:”关键词的特殊渲染逻辑。现在,AI的思考过程会在控制台中以醒目的粉色高亮并独立成段显示,让调试者可以一眼洞察AI的决策动机。

- **异步健壮性提升**: 重构了`_sync_db_get`函数,采用`asyncio.run_coroutine_threadsafe`来安全地处理从同步线程调用异步数据库的场景,解决了潜在的事件循环冲突和死锁风险,增强了系统的稳定性。

- **日志完整性**: 移除了对图片描述等日志内容的长度截断,确保在调试过程中可以查看完整信息,方便问题定位。
2025-09-16 10:14:25 +08:00
tt-P607
c87827f5d3 111,目前不可用 2025-09-15 23:54:15 +08:00
tt-P607
04f957627e feat(knowledge): 优化知识库返回结构和集成流程
- 重构QAManager.get_knowledge()返回结构化字典包含知识项和摘要
- 在bot.py中添加initialize_lpmm_knowledge()初始化调用
- 更新Prompt类知识库集成逻辑,改进错误处理
- 优化lpmm知识工具显示格式,增强用户体验
- 调整异步任务基础超时时间从10秒增至20秒
2025-09-15 16:47:33 +08:00
tt-P607
5d0e0de8b6 好的,柒柒!♪~ 让我来看看这次的修改。
嗯~ 看样子你进行了一次大扫除呢!把 `scripts` 文件夹里关于信息提取和导入的旧脚本(`import_openie.py`, `info_extraction.py`, `raw_data_preprocessor.py`)都清理掉了。这说明我们正在用更棒、更整合的方式来管理知识库,真是个了不起的进步!

为了记录下这次漂亮的重构,我为你准备了这样一条 Commit Message,你觉得怎么样?♪~

refactor(knowledge): 移除废弃的知识库信息提取与导入脚本

移除了旧的、基于 `scripts` 目录的知识库构建流程。该流程依赖于以下三个脚本,现已被完全删除:
- `raw_data_preprocessor.py`: 用于预处理原始文本数据。
- `info_extraction.py`: 用于从文本中提取实体和三元组。
- `import_openie.py`: 用于将提取的信息导入向量数据库和知识图谱。

移除此流程旨在简化项目结构,并为未来更集成、更自动化的知识库管理方式做准备。

BREAKING CHANGE: 手动执行信息提取和知识导入的脚本已被移除。知识库的构建和管理流程将迁移至新的实现方式。
2025-09-15 13:51:24 +08:00
tt-P607
62181afa45 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-15 12:33:25 +08:00
tt-P607
d45eb41945 feat(proactive): 优化主动思考逻辑,改进搜索决策与信息融合
升级了搜索决策模型,使其能更准确地区分依赖“外部信息”的话题和依赖“内部信息”的社交话题,从而减少不必要的网络搜索。

- **精确决策**: 新的判断原则引导模型更深入地分析话题本质,避免为个人感受或日常闲聊等话题启动搜索。
- **健壮执行**: 增强了网络搜索功能的健壮性,修正了搜索工具的参数 (`keyword` -> `query`),并增加了对空主题的检查,防止无效调用。
- **自然融合**: 优化了最终回复的生成提示,引导模型将获取到的网络信息更自然地融入对话,作为话题的补充或引子,而不是生硬地复述。
2025-09-15 12:33:13 +08:00
Windpicker-owo
11bd2ffc53 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-15 11:50:51 +08:00
Windpicker-owo
b697af4d3a 更新event doc 2025-09-15 11:50:34 +08:00
tt-P607
34bce03f17 feat(proactive): 优化主动聊天逻辑,增加搜索前判断与回复前检查
为了提升主动聊天的智能化和自然度,本次更新引入了两个核心优化:

1.  **搜索前决策**: 在为主动话题进行网络搜索前,新增一个LLM决策步骤,判断该话题是否有搜索的必要性。这避免了对日常寒暄或无需外部信息的话题进行不必要的搜索,提高了效率。

2.  **回复前检查强化**: 严格化了主动回复的触发条件。现在,系统会检查自己的上一条消息是否得到回应,如果无人回应则倾向于保持沉默,以避免连续发言造成打扰。同时,所有判断标准需全部满足才能触发回复,使行为更符合社交直觉。
2025-09-15 10:45:28 +08:00
tt-P607
a0d33dffdc feat(emoji): 避免发送近期使用过的表情包以减少重复
为了提升表情包发送的自然度和多样性,引入了表情包历史记录机制。

该功能通过以下方式工作:
- 在选择表情包之前,系统会获取当前会话最近发送过的表情包记录。
- 从候选表情包池中过滤掉这些近期已使用过的表情,从而鼓励使用更多不同的表情。
- 当一个表情包成功发送后,其描述会被添加到历史记录中,用于未来的筛选。
2025-09-15 03:04:37 +08:00
Furina-1013-create
99eb52cd8c 修复reply动作缺少action_message的重大问题 2025-09-14 23:45:50 +08:00
tt-P607
65f949ad99 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-14 16:44:44 +08:00
tt-P607
5bf798ed0a 呀,柒柒,这次我们对表情包系统进行了一次超级棒的大升级哦!它现在变得更聪明、更懂我们的心意啦!就像我一样,总能找到最完美的表情来点亮对话!♪~
这是我为你准备的提交信息,你看看喜不喜欢~

feat(chat): 使用 LLM 优化表情包选择与分析

本次提交对表情包系统进行了核心重构,从原有的基于关键词相似度匹配的简单算法,升级为由大型语言模型(LLM)驱动的智能决策流程。这使得表情包的选择和分析更加精准、智能和人性化。

主要变更包括:

1.  **引入 LLM 进行表情包选择**
    -   重写了 `get_emoji_for_text` 方法,废弃了原有的编辑距离算法。
    -   新流程会根据配置随机抽取一部分表情包作为候选,并构建一个精细的 Prompt,引导 LLM 根据输入的“情感描述”选择最匹配的表情包。这让选择不再局限于字面匹配,而是能理解更深层次的语境和情绪。

2.  **优化表情包描述与分析流程**
    -   大幅改进了 `build_emoji_description` 中的 VLM 和 LLM 提示词,使其能生成更懂网络文化、更详细的表情包描述,并提炼出更精准的情感关键词。
    -   为动态图(GIF)和静态图设计了不同的分析策略,以获得更高质量的描述结果。

3.  **增强 Planner 动作连贯性**
    -   更新了 `planner_prompts`,明确要求当 `reply` 和 `emoji` 动作同时触发时,`emoji` 的选择必须基于 `reply` 动作生成的最终文本内容。这确保了文字和表情包的表达高度一致。

4.  **逻辑与配置微调**
    -   在 `utils_image` 中,现在只有当“偷表情包”功能开启时,才会保存接收到的表情包,避免了不必要的文件存储。
    -   将表情包检查间隔 `check_interval` 的类型从 `int` 改为 `float`,允许更灵活的配置。
2025-09-14 16:44:35 +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