Commit Graph

230 Commits

Author SHA1 Message Date
tt-P607
a7e188f67c Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-11-13 20:39:14 +08:00
tt-P607
dcc8f6477e refactor(chat): 简化括号内容过滤
将用于过滤 `[表情包:...]` 和 `[图片:...]` 等内容的多个特定正则表达式模式替换为一个更通用的 `[.*?]` 模式。

此更改简化了代码,并通过处理方括号内的任何内容(包括未处理的格式如 `[at=...]`)提高了过滤的稳健性。
2025-11-13 20:38:59 +08:00
minecraft1024a
718584a7da fix(statistic): 增强统计数据处理的健壮性
此前的统计处理逻辑在某些统计项(如模型调用、消息数)在特定周期内未产生数据时,会因为直接访问字典键而引发 `KeyError`,导致统计任务失败。

本次提交通过以下方式解决了该问题:
- 在访问统计字典时,全面使用 `dict.get()` 并提供默认值,避免因键不存在而崩溃。
- 使用 `setdefault` 来确保在计算平均耗时等指标前,相关的数据结构已被初始化。
- 简化并重构了历史总览数据的合并逻辑,使其在处理不完整数据时更加稳健。
2025-11-13 19:47:44 +08:00
minecraft1024a
2f46794a64 feat(statistic): 支持按 provider 统计请求 2025-11-13 18:38:47 +08:00
minecraft1024a
69f132a12e feat(prompt): 为提示词组件提供注入目标上下文
为了让单个提示词组件在注入到不同目标时能够有不同的行为,现在向组件的执行上下文中传递当前注入的目标提示词名称 (`target_prompt_name`)。

这使得组件可以根据注入点动态调整其生成的内容。例如,一个工具列表组件在注入到 planner prompt 和 reflection prompt 时可以提供不同详尽程度的列表。

主要变更:
- `BasePrompt` 初始化时接收 `target_prompt_name`。
- `PromptComponentManager` 在应用注入规则时会传递此参数。
- `add_injection_rule` 方法现在支持批量添加规则,以简化注册流程。

BREAKING CHANGE: `PromptComponentManager.add_injection_rule` 中 `content_provider` 的函数签名已更改,现在需要接受第二个参数 `target_prompt_name: str`。

旧签名: `async def provider(params: PromptParameters) -> str`
新签名: `async def provider(params: PromptParameters, target_prompt_name: str) -> str
2025-11-13 18:18:15 +08:00
minecraft1024a
ce2d1acc7c refactor(prompt): 简化和统一提示词注入查询方法
将多个功能重叠的查询方法整合为两个核心方法,以提供更清晰、更灵活的 API,方便获取注入信息和规则。

- `get_injection_info` 方法取代了原有的 `get_full_injection_map` 和 `get_injections_for_prompt`。它现在支持按目标提示词进行筛选,并能通过 `detailed` 参数控制返回信息的详细程度。
- `get_injection_rules` 方法整合了 `get_all_dynamic_rules`、`get_rules_for_target` 和 `get_rules_by_component` 的功能。现在可以通过一个方法,灵活地按目标、按组件或按两者的组合来筛选注入规则。
- 已更新 `system_management` 插件中的相关命令以适配新的 API。

BREAKING CHANGE: `PromptComponentManager` 的公共 API 已更改。
移除了 `get_full_injection_map`, `get_injections_for_prompt`, `get_all_dynamic_rules`, `get_rules_for_target`, `get_rules_by_component` 方法。
请分别使用新的 `get_injection_info` 和 `get_injection_rules` 方法进行替代。
2025-11-13 17:17:48 +08:00
tt-P607
5e559ee7ea feat(config): 添加配置以切换知识摘要
这在 `lpmm_knowledge` 部分引入了一个新的配置选项 `enable_summary`。用户现在可以将其设置为 `false`,以防止知识库摘要被包含在最终提示上下文中。

这提供了对输出冗长程度的更多控制,并有助于管理令牌消耗。该功能默认启用,以保持现有行为。
2025-11-13 16:27:58 +08:00
minecraft1024a
992a1129ce refactor(report): 优化报告样式和数据加载逻辑
- 调整了报告页面的CSS样式,包括颜色、阴影和布局,以提供更专业、现代的视觉效果。
- 改进了从后端向前端JavaScript传递图表数据的方式。现在通过一个独立的`<script>`标签注入JSON字符串,而不是直接嵌入到JS代码中,这增强了鲁棒性并避免了特殊字符导致的解析错误。
- 在JavaScript中增加了对JSON解析和图表数据有效性的检查,以防止因数据格式错误或缺失导致页面渲染失败。
- 将统计模块中的耗时相关键名统一为大写格式,以提高代码一致性。
2025-11-13 14:31:54 +08:00
minecraft1024a
e1622ca6be refactor(config): 移除废弃的数据库配置模块
旧的数据库配置模块 `src/common/database/config` 已被完全移除。该模块已被标记为废弃,其功能已统一整合到 `global_config` 中。

本次重构旨在:
- 简化代码库,消除冗余和过时的文件。
- 统一配置管理,提高可维护性。

此外,对 `AttentionOptimizer` 中的类变量添加了 `ClassVar` 类型注解,以增强代码的清晰度和类型安全性。
2025-11-13 12:51:42 +08:00
minecraft1024a
7dc4be3555 feat(report): 优化统计报告页面的UI和布局
对生成的HTML统计报告进行了全面的视觉和结构重构,以提供更现代化、更具可读性的用户界面。

- 采用仪表盘式的双栏布局(主内容区和侧边栏),将图表移至侧边栏,使数据表格更聚焦。
- 全面更新了CSS样式,包括配色、字体、卡片、表格和标签页,提升了整体的美观度和用户体验。
- 引入了响应式设计,以更好地适配移动设备。
- 将默认输出文件名从 `maibot_statistics.html` 更改为 `mofox_bot_statistics.html` 以保持项目命名一致性。
2025-11-13 12:47:36 +08:00
minecraft1024a
b1a022cc3c refactor(report): 使用Jinja2模板重构报告生成器
将报告生成逻辑与表示层分离,以提高代码的可维护性和可读性。

- HTML、CSS 和 JavaScript 从 Python f-string 中提取到独立的模板文件中。
- 引入 Jinja2 模板引擎动态渲染报告内容,使未来修改报告样式和结构更加方便,实现了逻辑和视图的分离。
2025-11-13 12:09:37 +08:00
minecraft1024a
81b83c88dc Revert "refactor(report): 移除HTML报告生成功能"
This reverts commit bc533880dd.
2025-11-13 11:35:41 +08:00
tt-P607
b1c0ddeb6e Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-11-13 11:28:38 +08:00
tt-P607
08c1d73f77 refactor(chat):简化和改进回复格式过滤
之前用于过滤 `[回复...]` 格式的实现依赖于多个正则表达式。这种方法比较复杂,并且无法正确处理深度嵌套的回复字符串。

此提交重构了逻辑,采用更简单、更稳健的基于字符串的方法。通过在以 `[回复` 开头的字符串中找到最后一个闭合括号 `]`,新逻辑可以可靠地去除整个回复前缀,无论嵌套深度如何。这提高了解析的准确性,并简化了代码。
2025-11-13 11:28:25 +08:00
minecraft1024a
bc533880dd refactor(report): 移除HTML报告生成功能
移除了HTML报告生成功能,包括 `HTMLReportGenerator` 类及其在统计输出任务中的调用逻辑。

此举旨在简化代码库,剥离一个维护成本较高的功能。删除该组件可以简化统计模块并减少依赖,同时也为未来可能采用更现代、更灵活的报告方案做准备。

BREAKING CHANGE: 系统不再生成HTML格式的统计报告。
2025-11-13 11:26:28 +08:00
tt-P607
0a6a328644 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-11-13 11:10:26 +08:00
tt-P607
5326c69163 feat(prompt): 添加动态群聊提醒并修复内存搜索
在系统提示中引入动态群聊提醒,使其具备上下文意识。现在仅在对话发生在群聊环境中时注入该提醒,从而防止在私聊中可能引起模型混淆。

这是通过向`PromptParameters`添加`group_chat_reminder_block`实现的,该模块会根据聊天类型有条件地填充。

此外,本次提交还包括修复在内存搜索过程中可能出现的`AttributeError`,确保在尝试使用内存模块之前先进行配置。
2025-11-13 11:10:16 +08:00
minecraft1024a
b0efc8d666 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-11-13 10:57:37 +08:00
minecraft1024a
a8e8a5d170 feat(report): 为统计报告引入图形化费用分析视图
为增强 HTML 报告的可读性和洞察力,此变更集成了 Chart.js 来将关键的成本数据进行可视化。

现在,报告的每个标签页都会包含一个“数据总览”部分,其中有两个核心图表:
1.  **供应商成本构成图 (饼图)**: 直观展示不同供应商的费用占比,帮助快速定位主要开销来源。
2.  **模型成本排行榜 (条形图)**: 按费用降序排列各个模型,清晰地识别出成本最高的模型。

这些图表是动态生成的,如果统计周期内数据不足,将显示提示信息,避免用户面对空白图表。
2025-11-13 10:56:33 +08:00
Windpicker-owo
a04cfba202 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-11-12 22:37:47 +08:00
Windpicker-owo
310256e24d feat(attention): 添加注意力优化器以增强提示词多样性和防止注意力退化
refactor(prompt): 使用 asyncio.gather 替代 as_completed 以提升并发性能
refactor(config): 添加注意力优化配置选项
refactor(prompt_params): 增加注意力优化开关
2025-11-12 22:37:35 +08:00
minecraft1024a
87cea527a3 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-11-12 21:26:24 +08:00
minecraft1024a
89ca1651d9 1 2025-11-12 21:26:21 +08:00
Windpicker-owo
c1cda89d65 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-11-12 21:19:27 +08:00
Windpicker-owo
17abfc74ae refactor(prompt): 优化任务并发执行逻辑,使用 as_completed 提升性能和错误处理 2025-11-12 21:19:19 +08:00
minecraft1024a
6ef1829072 refactor(statistic): decouple statistics collection from report generation
Introduces a dedicated `HTMLReportGenerator` class in `report_generator.py` to handle all aspects of HTML and chart rendering. This decouples the report presentation logic from the data collection process within `StatisticOutputTask`.

Key changes include:
- Migrated all HTML and JavaScript generation into the new `HTMLReportGenerator`.
- Extracted all statistic key constants into a separate `statistic_keys.py` file for improved organization.
- Renamed `_generate_chart_data` to `_collect_chart_data` to better reflect its purpose.
- Improved data handling robustness by using `.get()` for dictionary access and safely handling database query results.
2025-11-12 20:34:36 +08:00
Windpicker-owo
09db6c0c88 refactor: 移除对机器人自身用户ID的特殊处理,统一使用QQ号进行比较 2025-11-12 17:33:51 +08:00
minecraft1024a
a6c2820dd9 fix(prompt): 通过延迟导入解决循环依赖问题
将 `global_prompt_manager` 的导入操作从模块顶部移动到具体使用它的方法内部。

此举旨在解决 `prompt_component_manager` 和 `prompt` 模块之间潜在的循环导入问题,确保在应用初始化时模块加载顺序的稳定性,避免可能因此引发的 `ImportError`。
2025-11-12 13:24:13 +08:00
minecraft1024a
daf8ea7e6a refactor: 清理冗余代码并现代化导入语句
- 将 `typing.Awaitable` 和 `typing.Callable` 的导入更新为 `collections.abc`,以遵循 Python 3.9+ 的最佳实践。
- 移除了 `sorted()` 函数中不必要的 `set` 到 `list` 的转换。
- 清理了 `plugin_system/__init__.py` 中不再需要公开的 `__all__` 条目。
2025-11-12 12:47:55 +08:00
minecraft1024a
623cebf728 docs(prompt): 为 PromptComponentManager 植入详尽的代码文档与注释
为了让提示词注入系统的核心 `PromptComponentManager` 变得更加透明和易于理解,本次提交对代码进行了全面的文档化。此举旨在降低新接手者的认知门槛,并为未来的维护工作铺平道路。

具体而言,我们为类和所有公开方法添加了详细的文档字符串,阐明了其设计哲学、职责边界和参数约定。同时,在关键代码块(如规则数据结构、内容提供者闭包、并发锁的使用)旁增加了内联注释,揭示了其背后的实现考量和工作机制。
2025-11-12 12:46:07 +08:00
minecraft1024a
c76e1ff0e6 fix(prompt): 修复 PromptComponentManager 的方法定义在类外部的问题
将多个本应属于 `PromptComponentManager` 的实例方法(如 `get_injections_for_prompt`, `get_rules_for_target` 等)移回正确的类定义内。

这些方法之前因缩进错误被意外地定义在了类外部,导致它们无法作为实例方法被正确调用。本次提交修正了这个问题,确保了类的封装性和方法的正确作用域。
2025-11-12 12:39:51 +08:00
minecraft1024a
ebc74f2fe7 feat(prompt): 新增按目标和组件查询注入规则的功能
为了提供更灵活的注入规则审查和调试能力,本次提交重构了规则查询接口。

新增了两个功能更强大的查询方法:
- `get_rules_for_target`: 允许查询所有注入到特定核心提示词的规则。
- `get_rules_by_component`: 允许查询由特定注入组件定义的所有规则,无论其目标为何。

BREAKING CHANGE: 移除了原有的 `get_dynamic_rule` 方法,该方法只能通过组件和目标联合查询单个规则,使用场景有限。请根据查询需求,改用新增的 `get_rules_for_target` 或 `get_rules_by_component` 方法。
2025-11-12 12:35:14 +08:00
minecraft1024a
6438539412 feat(prompt): 为提示词注入系统添加预览和详情查询功能
新增了对提示词注入过程进行预览和详细查询的能力,极大地增强了开发和调试的便利性。

- 新增 `preview_prompt_injections` 方法,允许在不修改任何状态的情况下,模拟并预览应用所有注入规则后的最终提示词模板。
- 增强 `get_injections_for_prompt` 方法,使其返回更丰富的注入信息,包括注入来源、类型和具体内容,提高了系统的可观测性。
- 新增 `get_dynamic_rule` 辅助方法,用于查询单条动态注入规则。

BREAKING CHANGE: `get_injections_for_prompt` 方法的返回结构已更改,现包含更详细的注入信息。移除了 `get_full_injection_map` 方法,并重命名 `get_registered_prompt_components` 为 `get_registered_prompt_component_info`。
2025-11-12 12:33:44 +08:00
minecraft1024a
626114c593 feat(prompt): 重构提示词管理器为动态可观测的注入中心
本次提交对 `PromptComponentManager` 进行了彻底的重构,将其从一个无状态的、按需计算的工具转变为一个有状态的、支持动态配置和实时观测的统一管理中心。

核心改进包括:
- **统一规则存储**: 引入 `_dynamic_rules` 作为唯一的真实来源。系统启动时会加载所有组件的静态 `injection_rules` 作为默认配置,后续可动态修改。
- **动态API**: 新增 `add_injection_rule` 和 `remove_injection_rule` 方法,允许在运行时动态地添加、更新和移除注入规则,极大地提升了灵活性。
- **可观测性**: 提供了一套完整的状态查询API(如 `get_full_injection_map`, `get_injections_for_prompt`),使系统当前的注入状态完全透明,便于调试和监控。
- **性能优化**: `apply_injections` 流程被极大简化,它现在直接从预加载的规则集中获取内容并应用注入,避免了每次调用都重新扫描和实例化组件的开销。
2025-11-12 12:23:20 +08:00
Windpicker-owo
6203fca5f2 feat(main): 移除知识库初始化,简化主系统启动流程 2025-11-10 21:57:35 +08:00
Windpicker-owo
1b93cc3d63 feat(context_manager): 移除消息添加和标记已读的日志记录,简化代码 2025-11-10 21:55:16 +08:00
Windpicker-owo
b427960441 feat(reply): 引入统一格式过滤器,优化回复内容清理逻辑 2025-11-10 14:12:11 +08:00
Windpicker-owo
8c4a54c75d feat(reply): 引入 reply 和 respond 动作,优化消息回复机制
- 增加 reply 动作,针对单条消息进行深度回复,使用 s4u 模板。
- 增加 respond 动作,统一回应未读消息,使用 normal 模板。
- 更新核心动作插件以支持新动作,确保配置选项可用。
- 优化动作执行逻辑,提升对话流畅性和响应准确性。
2025-11-10 13:24:45 +08:00
minecraft1024a
e418b83419 refactor(typo-generator): 调整词典文件路径获取方式以提高通用性
将 `dict.txt` 的路径获取方式从依赖 `rjieba` 包的相对路径改为基于项目根目录的相对路径。这避免了因 `rjieba` 包内部结构变化而导致路径失效的问题,增强了代码的健壮性和可移植性。
2025-11-08 20:11:39 +08:00
明天好像没什么
c8d7c09625 ruff 2025-11-07 21:01:45 +08:00
Windpicker-owo
f87e8627e5 feat(memory): 移除传统内存系统并优化内存图谱
- 移除整个传统内存系统,包括内存系统模块及所有相关组件
- 删除弃用的内存组件:增强型内存激活器、海马体采样器、内存构建器、内存块、内存遗忘引擎、内存格式器、内存融合器、内存管理器、内存元数据索引、内存查询规划器、内存系统、消息集合处理器、消息集合存储、向量内存存储_v2
- 更新内存图配置,采用增强型检索设置
- 优化内存管理器查询功能,以分析完整对话上下文
- 更新机器人配置模板版本至7.6.1,新增内存图表检索参数

重大变更:旧版内存系统已被完全移除。所有内存功能现依赖于内存图系统。请更新配置以包含新的内存图检索参数。
2025-11-06 09:18:59 +08:00
Windpicker-owo
cd15c51e6b refactor(memory): 完全移除旧记忆系统,全面切换到新记忆图系统
重大变更:
- 移除 default_generator.py 中对旧增强记忆系统的所有调用
- 移除 prompt.py 中的记忆构建函数
- 记忆检索全面使用新记忆图系统
- 禁用旧记忆系统的自动存储逻辑

记忆构建流程:
- 记忆创建: LLM 通过 create_memory 工具主动创建
- 记忆检索: default_generator.py 自动检索
- 记忆传递: 通过 pre_built_params 传入 prompt

工具可用性:
- CreateMemoryTool: available_for_llm = True
- LinkMemoriesTool: available_for_llm = False
- SearchMemoriesTool: available_for_llm = False

技术细节:
- 提高记忆检索数量 top_k=10
- 降低重要性阈值 min_importance=0.3
- 修复类型错误和警告
2025-11-05 19:22:34 +08:00
Windpicker-owo
25c50f759f fix(chat): 增强对自我身份的识别,支持将机器人用户标记为"SELF" 2025-11-05 14:45:36 +08:00
Windpicker-owo
b97470cf60 refactor(chat): 将用户引用处理从同步改为异步,优化性能 2025-11-03 23:11:49 +08:00
Windpicker-owo
a6d2aee781 feat(affinity-flow): 通过标签扩展与提及分类增强兴趣匹配
- 实施扩展标签描述以实现更精确的语义匹配
- 增加强/弱提及分类,并附带独立的兴趣评分
- 重构机器人兴趣管理器,采用动态嵌入生成与缓存机制
- 通过增强的@提及处理功能优化消息处理
- 更新配置以支持回帖提升机制
- 将亲和力流量聊天重新组织为模块化结构,包含核心、规划器、主动响应和工具子模块
- 移除已弃用的规划器组件并整合功能
- 为napcat适配器插件添加数据库表初始化功能
- 修复元事件处理器中的心跳监控
2025-11-03 22:24:51 +08:00
明天好像没什么
30658afdb4 ruff归零 2025-11-01 21:32:41 +08:00
明天好像没什么
cb97b2d8d3 rufffffff 2025-11-01 21:10:01 +08:00
Windpicker-owo
ca539a3ebd fix: 修复在线时间记录的db_save调用
- db_save需要key_field和key_value参数用于get_or_create
- 创建新记录应使用db_query with query_type='create'
- 修复'db_save() missing 2 required positional arguments'错误
2025-11-01 14:53:53 +08:00
Windpicker-owo
ce1c3288fd fix: 修复数据库导入错误
- 修复12处从错误位置导入get_db_session/get_engine的问题
- 函数应从core导入,模型应从core.models导入
- 修复bot.py使用check_and_migrate_database代替不存在的initialize_database

影响文件:
- bot.py: 使用正确的初始化函数
- schedule_manager.py: 修复get_db_session导入
- relationship_service.py: 修复get_db_session导入
- schedule_api.py: 修复get_db_session导入
- utils.py (llm_models): 修复get_db_session导入
- utils_image.py: 修复get_db_session导入
- utils_video.py: 修复get_db_session导入
- user_ban.py: 修复get_db_session导入
- statistics.py: 修复get_db_session导入
- storage.py: 修复get_db_session导入
- anti_injector.py: 修复2处get_db_session导入
- permission_manager.py: 修复get_engine导入
2025-11-01 14:44:13 +08:00
Windpicker-owo
a1dc03cacc refactor: 完成数据库重构 - 批量更新导入路径
- 更新35个文件的导入路径 (共65处修改)
- sqlalchemy_models  core.models (模型类)
- sqlalchemy_database_api  compatibility (兼容函数)
- database.database  core (初始化/关闭函数)
- 添加自动化导入更新工具 (scripts/update_database_imports.py)
- 所有兼容性层测试通过 (26/26)
- 数据库核心功能测试通过 (18/21)
2025-11-01 14:22:54 +08:00