Commit Graph

4976 Commits

Author SHA1 Message Date
minecraft1024a
e34bafb843 refactor(llm): 重构 LLM 请求处理,引入通用故障转移执行器
之前的代码里,处理文本、图片、语音的请求方法都各自为战,写了一大堆重复的故障转移逻辑,简直乱糟糟的,看得我头疼。

为了解决这个问题,我进行了一次大扫除:

- 引入了一个通用的 `_execute_with_failover` 执行器,把所有“模型失败就换下一个”的脏活累活都统一管理起来了。
- 重构了所有相关的请求方法(文本、图片、语音、嵌入),让它们变得更清爽,只专注于自己的核心任务。
- 升级了 `_model_scheduler`,现在它会智能地根据实时负载给模型排队,谁最闲谁先上。那个笨笨的 `_select_model` 就被我光荣地裁掉了。

这次重构之后,代码的可维护性和健壮性都好多了,再加新功能也方便啦。哼哼,快夸我!
2025-11-19 23:05:42 +08:00
minecraft1024a
9d55603bde feat(gemini): 为 Gemini 客户端添加 thinking_budget 支持
新增对 Gemini 模型 "thinking" 功能的支持,允许通过 `thinking_budget` 参数查看模型的思考过程。

- 实现了 `clamp_thinking_budget` 方法,根据不同模型(如 2.5-pro, 2.5-flash)的限制来约束和验证 `thinking_budget` 的值。
- 支持特殊值:-1(自动模式)和 0(禁用模式,如果模型允许)。
- 默认禁用所有安全设置(safetySettings),以减少不必要的回答屏蔽。
2025-11-19 23:05:41 +08:00
minecraft1024a
87389c9d66 Megre Pull Request #1260 from MaiCore:https://github.com/MaiM-with-u/MaiBot/pull/1260 2025-11-19 23:05:41 +08:00
minecraft1024a
b2e3c883b4 refactor(db): 移除 MongoDB 相关代码
从数据库模块中移除了所有与 MongoDB 相关的代码,包括连接逻辑、`get_db` 函数和 `DBWrapper` 代理类。

项目将统一使用 SQLAlchemy 作为唯一的数据库接口,此更改旨在简化代码库并消除不再需要的依赖。

BREAKING CHANGE: 全局 MongoDB 实例 `memory_db` 和 `get_db` 函数已被移除。所有数据库交互现在都应通过 SQLAlchemy 会话进行。
2025-11-19 23:05:41 +08:00
minecraft1024a
350388d116 fix(db): 修复数据库迁移中列和索引的创建逻辑
- 增强了添加列时对默认值的处理,以兼容不同数据库方言(例如 SQLite 的布尔值)。
- 切换到更标准的 `index.create()` 方法来创建索引,提高了稳定性。
- 调整了启动顺序,确保数据库在主系统之前完成初始化,以防止竞争条件。
2025-11-19 23:05:40 +08:00
minecraft1024a
53b61028c7 perf(memory): 优化记忆系统数据库操作并修复并发问题
将消息记忆次数的更新方式从单次写入重构为批量更新,在记忆构建任务结束时统一执行,大幅减少数据库写入次数,显著提升性能。

此外,为 `HippocampusManager` 添加了异步锁,以防止记忆巩固和遗忘操作并发执行时产生竞争条件。同时,增加了节点去重逻辑,在插入数据库前检查重复的概念,确保数据一致性。
2025-11-19 23:05:40 +08:00
minecraft1024a
224dc0d748 老rust_video我为你踩背来喽(把他删了 2025-11-19 23:05:39 +08:00
minecraft1024a
87cf07bf82 feat(config): 自动移除更新中已废弃的配置项
在版本更新过程中,新增一个步骤来对比用户配置与最新的模板文件。

此变更会自动删除用户配置文件中所有在模板中不再存在的键,以保持配置的整洁性,并防止因过时的配置项导致潜在的兼容性问题或混淆。
2025-11-19 23:05:38 +08:00
minecraft1024a
afce3799ac ci(workflow): 移除自动创建预发布的工作流
该工作流会在每次推送到 master 分支时创建一个预发布版本,现已不再需要此自动化流程。
2025-11-19 23:05:37 +08:00
minecraft1024a
0b474327c1 refactor(config): 移除 breaking 模式配置项
随着 breaking 模式相关逻辑被移除,其配置项已不再需要。
本次提交从配置文件模板中删除了 `enable_breaking_mode` 选项,并更新了内部版本号。
2025-11-19 23:05:37 +08:00
minecraft1024a
77e2e549bd ci(workflow): 为预发布标签添加 'MoFox-' 前缀 2025-11-19 23:05:37 +08:00
tt-P607
f3b3e60c1c feat(chat): 增加已读标记以聚焦未读消息
为聊天上下文生成逻辑引入了“已读标记” (read_mark) 机制。

当生成回复时,可以在历史消息中插入一个明确的分隔符,以告知模型哪些消息是它已经看过的旧消息,哪些是需要关注的新消息。

这有助于模型更好地聚焦于未读内容,提升上下文感知能力和回复的相关性。

同时,将 Prompt 模板中的“群聊”等硬编码文本参数化,以更好地适配私聊等不同聊天场景。
2025-11-19 23:05:36 +08:00
tt-P607
f515bf679e refactor(chat): 移除 breaking 模式下复杂的消息等待机制
原有的 breaking 模式等待逻辑过于复杂,它会累积新消息的兴趣值,并根据动态阈值(受专注度和发言频率影响)决定何时响应。这种机制可能导致响应延迟且行为难以预测。

本次重构完全移除了该等待与累积机制。现在,系统一旦收到任何新消息,就会立即处理并计算其平均兴趣值,从而确保了响应的及时性和逻辑的简洁性。
2025-11-19 23:05:36 +08:00
minecraft1024a
98fb7db4fa ci(workflow): 为预发布工作流添加写入权限
为 GITHUB_TOKEN 授予 `contents: write` 权限,以允许工作流创建 GitHub Release。
2025-11-19 23:05:35 +08:00
minecraft1024a
b171dc5847 fix(schedule): 修复日程生成在连续失败时无限重试的问题
先前的日程生成逻辑使用无限循环进行重试。在 LLM 服务持续失败或返回无效数据的情况下,这可能导致程序陷入死循环。

本次修改将重试机制改为有固定上限(3次)的循环。如果所有尝试均失败,将记录错误并返回 None,从而确保程序的健壮性。
2025-11-19 23:05:35 +08:00
minecraft1024a
6bf05fd660 fix(permission): 将权限管理器初始化改为异步
`PermissionManager` 的 `__init__` 方法中包含了同步的数据库初始化操作,这会在异步环境中阻塞事件循环。

本次提交将数据库连接的逻辑移至一个新的异步方法 `initialize()` 中,并在应用启动时显式调用和等待它。这确保了数据库的初始化过程是异步执行的,避免了潜在的性能问题。

BREAKING CHANGE: `PermissionManager` 实例化后需要手动调用并等待 `initialize()` 方法来完成数据库初始化。
2025-11-19 23:05:35 +08:00
minecraft1024a
ba91b99674 fix(db): 适配 SQLAlchemy 2.0 API 变更
更新了与数据库交互的代码,以适配 SQLAlchemy 2.0 引入的 API 变更,解决相关的废弃警告和异步调用问题。

主要变更包括:
- 使用 `scalars().first()` 替代已废弃的 `scalar()` 方法。
- 在获取所有标量结果时显式调用 `.all()`。
- 对异步引擎 `get_engine()` 的调用进行 `await`。
- 移除了向 Inspector 方法(如 `get_table_names`)传递多余的 `conn` 参数。
2025-11-19 23:05:34 +08:00
minecraft1024a
83eb5c80c5 fix(plugin_system): 修复无配置插件加载时产生不必要警告
对于未定义 `config_schema` 的插件,现在会将其视作一种正常情况,并为其分配一个空的配置。

此举修复了先前版本中,这类插件在加载时会错误地触发“配置文件不存在”警告的问题。同时将生成默认配置文件的日志等级从 debug 调整为 info,使其在默认情况下可见。
2025-11-19 23:05:34 +08:00
minecraft1024a
d3f88ce981 ***数据库怎么有虫子啊 2025-11-19 23:05:34 +08:00
Furina-1013-create
ff9405cfb7 ?
如果国家立法禁止🥬🖊️打音游
相传,有一个理想国

理想国有一套完善的法律法规,其中就包含🥬🖊️不能打音游

每个孩子出生后,科学家都会用一个底力检测设备检测TA的底力

如果底力足够高,国王会为TA举办一个神圣的颁奖典礼,允许TA踏入神圣的音游殿堂,这是对TA底力的肯定

如果底力过低,亲朋好友都松了一口气,因为这意味着这个孩子将免受音游的折磨

毕竟🥬🖊️是不能打音游的

但这个国家有一个神秘的传说

那就是其实被挑选去打音游的孩子,其实早就被国王献祭了!

证据一目了然,每个周末和寒暑假,人们上街娱乐散步,从未有人见过打音游的

可人怎么能没有周末和寒暑假呢?不打音游的人苦思冥想

最终得出结论:那些打音游的,一定是被国王献祭了

-

凌晨三点,一个音游人激动地从机厅走出来

他的口中喃喃自语:噫,好!我P了!

静谧的夜,大家都睡了

只有路过的环卫工人看到他疯癫的样子,一眼就看出他是音游人

心中十分害怕,连忙跑回家,人们奔走相告:

原来音游人没死,他们只是疯了!

-

染上音游,就好像一辈子都在xing歌

打音游人在xing歌的轮回中,纷纷成了哲学家

有一天,一个音游哲学家陷入沉思:

国家禁止🥬🖊️打音游

但如果不是🥬🖊️的话,为什么要打音游来折磨自己?

由此可得,这条法规不成立

大彻大悟的音游人们意识到自己被欺骗了,承受了很多不必要的折磨

由于这地狱般生活的摧残,音游人们变成了反社会人格

愤怒之下,他们研发出炸药,炸平了理想国

毁灭了整个世界

-

几亿年后,这片土地进化出了新的文明

新的国家出现了

新的国家里有新的音游入,他们在日复一日的折磨中,怀疑自己的底力和手法,不明白自己为什么要受这样的折磨

不禁感叹:

唉!如果国家禁止🥬🖊️打音游就好了!
2025-11-19 23:05:33 +08:00
Furina-1013-create
11e97a15ed 将回复规则部分的提示词让用户可以自定义,详细请看配置文件 2025-11-19 23:05:31 +08:00
雅诺狐
4091a4eadf 更改权限 2025-11-19 23:05:29 +08:00
minecraft1024a
28be81583e feat(plugin_system): 导出 schedule_api
将 schedule_api 添加到插件系统的 API 导出列表中,使其对插件可用。
2025-11-19 23:05:26 +08:00
雅诺狐
142a744ed0 Update utils_video.py 2025-11-19 23:05:24 +08:00
雅诺狐
e11a24b479 更新视频识别 2025-11-19 23:05:24 +08:00
minecraft1024a
c4a9a3fdb8 feat(db): 增强数据库自动迁移功能以支持索引创建
重构并增强了数据库自动迁移逻辑,以提供更健壮和全面的模式管理。

主要更新包括:
- **支持索引创建**: 迁移脚本现在会自动检测并创建模型中定义但数据库中缺失的索引。
- **重构迁移流程**:
  1.  首先一次性创建所有缺失的表,提高初始设置效率。
  2.  然后,逐表检查并添加缺失的列和索引,使逻辑更清晰。
- **改进 SQLAlchemy 用法**:
  - 使用 `AddColumn` 和 `CreateIndex` DDL 结构代替原始 SQL 字符串,提高了代码的可读性和数据库方言的兼容性。
  - 优化了 `inspector` 的使用方式,减少了重复调用。
- **增强日志记录**: 提供了更详细的日志输出,清晰地展示了正在执行的操作(如创建表、添加列、创建索引),并改进了错误报告。
2025-11-19 23:05:23 +08:00
tt-P607
8f7867c937 fix(emoji): 修正对同步函数的 await 调用
`get_recent_emojis` 和 `add_emoji_to_history` 函数已被重构为同步方法。本次提交移除了对这两个函数不必要的 `await` 调用,以修复由此引发的 `TypeError`。
2025-11-19 23:05:22 +08:00
tt-P607
26b9d02476 fix(core): 修正因异步改造遗漏的 await 调用
在最近的数据库异步化重构后,部分函数的调用处忘记添加 `await` 关键字,导致协程未被正确执行。

本次提交修复了以下模块中的问题:
- `ExpressionLearner`
- `ChatMessageBuilder`
- `EmojiAction
2025-11-19 23:05:22 +08:00
minecraft1024a
79baac2797 refactor(person_info): 引入同步方法 get_value 并替换旧的 get_value_sync(因为根本就没有这个方法)
为了解决在不同异步上下文中同步调用数据库可能引发的运行时错误,实现了一个新的、更健壮的同步方法 `PersonInfoManager.get_value`。

- 新方法能够正确处理已在运行的 asyncio 事件循环,提高了在混合代码环境中调用的稳定性。
- 全面替换了原有的 `get_value_sync` 方法调用,统一了同步获取用户信息的接口。
2025-11-19 23:05:20 +08:00
minecraft1024a
02067b6eeb 也许是修好了表达学习吧 2025-11-19 23:05:18 +08:00
雅诺狐
4deb3d63eb 移出Rust组件 2025-11-19 23:05:18 +08:00
雅诺狐
a82c16852f refactor(chat): 优化自消息处理逻辑和回复目标选择机制
- 添加自消息阻断机制,避免机器人回复自己的消息
- 重构回复目标选择逻辑,优先选择非机器人用户的消息作为回复目标
2025-11-19 23:05:18 +08:00
雅诺狐
229d47d79b refactor(db): 修正SQLAlchemy异步操作调用方式
移除session.add()方法的不必要await调用,修正异步数据库操作模式。主要变更包括:

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

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

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

主要修改内容包括:
- 将 `PermissionManager` 中的所有数据库操作从同步改为异步,以避免阻塞事件循环。
- 使用 `async_sessionmaker` 和 `async with session` 替代原有的同步会话管理。
- 将 SQLAlchemy 查询语法更新为异步兼容的 `await session.execute(select(...))` 模式。
- 相应地,调用链中依赖数据库操作的多个方法也已更新为 `async` 函数。
2025-11-19 23:05:09 +08:00
雅诺狐
9ec8ea6310 Update message.py 2025-11-19 23:05:08 +08:00
雅诺狐
ca51182172 小修复 2025-11-19 23:05:07 +08:00
tt-P607
1c760798b0 总算能回复了😭😭😭 2025-11-19 23:05:06 +08:00
雅诺狐
26a4c492c3 将AFC合并至Master分支 2025-11-19 23:05:06 +08:00
tt-P607
610688f641 6 2025-11-19 23:05:05 +08:00
tt-P607
d9f2cd084d 5 2025-11-19 23:05:04 +08:00
tt-P607
d53238dfc9 4次修改 2025-11-19 23:05:02 +08:00
雅诺狐
93542cadef perf(methods): 通过移除不必要的 self 参数优化方法签名
在包括 chat、plugin_system、schedule 和 mais4u 在内的多个模块中,消除冗余的实例引用。此次改动将无需访问实例状态的实用函数转换为静态方法,从而提升了内存效率,并使方法依赖关系更加清晰。
2025-11-19 23:05:00 +08:00
tt-P607
aba4f1a947 三次修改 2025-11-19 23:02:01 +08:00
雅诺狐
635311bc80 二次修改 2025-11-19 23:01:18 +08:00
雅诺狐
69cc8fc1ab 数据库异步支持
仅仅支持还有107处待迁移
2025-11-19 23:01:18 +08:00
tt-P607
c82c48d491 feat(napcat): 支持音乐分享卡片并增强消息兼容性
新增对 NapCat 框架音乐分享类型消息的解析支持。现在可以正确识别并提取音乐卡片中的歌曲、歌手、来源和封面等信息,并将其格式化为图文消息进行展示。

此外,增强了消息接收的兼容性。对于缺少 `post_type` 字段但包含 `message_type` 的普通消息,会自动补充 `post_type` 字段,确保其能被正常路由和处理,避免消息丢失。
2025-11-19 23:01:17 +08:00