Windpicker-owo
|
bc7228cb3c
|
feat(planner): 使用标准化的JSON格式重构动作规划系统
- 将聊天流和消息管理器中的默认聊天模式从“normal”更改为“focus”
- 从ActionPlannerInfo数据模型中移除已弃用的should_quote_reply字段
- 通过移除回复可用性检查和基于兴趣的过滤,简化计划过滤逻辑
- 采用新的标准化JSON操作格式,并强制使用操作列表结构
- 更新规划器提示,以强制执行一致的动作输出格式
- 移除遗留操作参数过滤,简化消息目标解析
- 清理计划过滤器中未使用的导入和已弃用的代码路径
|
2025-11-13 15:10:08 +08:00 |
|
Windpicker-owo
|
c2dca8cb2a
|
refactor(person_info): 移除内存缓存逻辑,统一使用数据库缓存系统
refactor(plugin): 使用数据库查询替代内存缓存进行用户信息匹配
refactor(message_sender): 优化消息添加到流上下文的逻辑
|
2025-11-12 17:58:26 +08:00 |
|
Windpicker-owo
|
09db6c0c88
|
refactor: 移除对机器人自身用户ID的特殊处理,统一使用QQ号进行比较
|
2025-11-12 17:33:51 +08:00 |
|
Windpicker-owo
|
1fc8d5091c
|
feat: 添加路径评分扩展算法和内存去重工具
- 基于图路径传播,实现了一种路径评分扩展算法,以优化内存检索。
引入了内存去重工具,以识别和合并相似的内存,从而提高结果质量。
- 更新了路径扩展的配置选项,包括最大跳数、阻尼因子和剪枝阈值。
- 在路径扩展中增加了对首选节点类型的支持,以提高内存检索的相关性。
- 增强的日志记录功能,以便更好地跟踪路径扩展和去重过程。
|
2025-11-12 00:33:05 +08:00 |
|
Windpicker-owo
|
9b68d7d995
|
feat(heart_fc_sender): 修复Send API消息不入流上下文的问题,确保消息可引用并添加转换为数据库消息的功能
|
2025-11-11 21:42:17 +08:00 |
|
明天好像没什么
|
6a5648ba07
|
创建了新的反注入
|
2025-11-09 12:31:38 +08:00 |
|
Windpicker-owo
|
d4824e35ad
|
feat(message-manager): 用流循环管理器替换调度器/分派器
- 移除 scheduler_dispatcher 模块,并用 distribution_manager 替换
- 实现StreamLoopManager,以改进消息分发和中断处理
- 将消息缓存系统直接添加到StreamContext中,并配置缓存设置
- 使用具有缓存感知的消息处理来增强SingleStreamContextManager
- 更新`message_manager`,使用`stream_loop_manager`替代`scheduler_dispatcher`
- 在StreamContext数据模型中添加缓存统计和刷新方法
- 通过适当的任务取消和重新处理来改进中断处理
- 为ChatManager添加get_all_stream方法,以实现更优的流管理
- 更新亲和聊天规划器,以更可靠地处理专注/正常模式切换
|
2025-11-08 10:46:44 +08:00 |
|
明天好像没什么
|
c8d7c09625
|
ruff
|
2025-11-07 21:01:45 +08:00 |
|
拾风
|
1ab042813d
|
Merge branch 'dev' into dev
|
2025-11-07 13:14:27 +08:00 |
|
Windpicker-owo
|
023fab73a5
|
feat(memory): 更新记忆管理和配置,优化整合逻辑,添加语义相似度阈值
|
2025-11-06 23:56:18 +08:00 |
|
Windpicker-owo
|
25c50f759f
|
fix(chat): 增强对自我身份的识别,支持将机器人用户标记为"SELF"
|
2025-11-05 14:45:36 +08:00 |
|
SolenmeChiara
|
6d37514c34
|
fix(bot): 修复adapter_response被echo检查拦截的严重bug
问题:
- Napcat发送adapter_response时同时设置了echo=True
- 原逻辑先检查echo,导致adapter_response消息被提前return
- Maizone获取Cookie等功能完全失效(超时40秒)
修复:
- 将adapter_response检查移到echo检查之前
- 确保adapter_response消息优先处理
- 移除重复的adapter_response检查逻辑
影响:
- Maizone插件现在可以正确获取QQ空间Cookie
- 所有adapter命令响应都能正常工作
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-04 22:08:58 -05:00 |
|
SolenmeChiara
|
06ed1cbae6
|
chore: 恢复PR改动并适配官方最新版本
在官方更新到4936a6d后,选择性恢复PR中的功能改动:
Maizone插件修复(6个文件):
- 优化成功/失败反馈机制(直接反馈,不使用AI生成)
- 实现QQ空间Cookie失效自动重试机制
- 修复评论回复被分割导致标点符号丢失的问题
- 修复QQ空间转发内容提取错误
- 改进maizone图片识别模型配置,支持自动fallback
- 优化maizone说说生成规则
适配器响应处理(bot.py):
- 添加adapter_response消息处理逻辑
- 适配新的DatabaseMessages架构
- 在message_process早期阶段优先处理adapter_response
Web搜索引擎扩展:
- 添加Serper搜索引擎支持
LLM成本计算修复:
- 修复LLM使用统计中成本计算错误的bug
- 调整LLM相关日志级别为DEBUG
其他优化:
- 优化NapCat adapter响应处理
- 优化person_info关系推理逻辑
注:本次恢复已跳过与官方冲突的部分,保留官方的新架构改进
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-04 22:08:58 -05:00 |
|
Windpicker-owo
|
fa0559f7d4
|
refactor(message_processor): 移除单段消息处理中的日志记录
|
2025-11-03 22:28:23 +08:00 |
|
Windpicker-owo
|
a6d2aee781
|
feat(affinity-flow): 通过标签扩展与提及分类增强兴趣匹配
- 实施扩展标签描述以实现更精确的语义匹配
- 增加强/弱提及分类,并附带独立的兴趣评分
- 重构机器人兴趣管理器,采用动态嵌入生成与缓存机制
- 通过增强的@提及处理功能优化消息处理
- 更新配置以支持回帖提升机制
- 将亲和力流量聊天重新组织为模块化结构,包含核心、规划器、主动响应和工具子模块
- 移除已弃用的规划器组件并整合功能
- 为napcat适配器插件添加数据库表初始化功能
- 修复元事件处理器中的心跳监控
|
2025-11-03 22:24:51 +08:00 |
|
明天好像没什么
|
cb97b2d8d3
|
rufffffff
|
2025-11-01 21:10:01 +08:00 |
|
Windpicker-owo
|
e0063fb281
|
feat: 在获取聊天流时添加创建时间和最后活跃时间字段
|
2025-11-01 19:34:51 +08:00 |
|
Windpicker-owo
|
84844ea6e8
|
fix: 修复批量消息存储缺失字段导致的NOT NULL约束失败
|
2025-11-01 17:59:01 +08:00 |
|
Windpicker-owo
|
3265638e17
|
merge: 合并feature/database-refactoring的关键bug修复和性能优化
|
2025-11-01 17:47:28 +08:00 |
|
Windpicker-owo
|
45be95b83d
|
perf: 优化批量消息存储,使用insert().values()替代add_all()
|
2025-11-01 17:43:47 +08:00 |
|
拾风
|
c358386a53
|
Merge pull request #56 from MoFox-Studio/feature/database-refactoring
重构数据库系统,优化数据库性能
|
2025-11-01 17:38:18 +08:00 |
|
Windpicker-owo
|
19ed3fd048
|
fix(database): 修复使用不存在的 get_all_by/get_all 方法
问题:
- CRUDBase 没有 get_all() 和 get_all_by() 方法
- 导致运行时错误: greenlet_spawn has not been called
修复:
- get_all() get_multi(limit=100000)
- get_all_by(chat_id=x) get_multi(chat_id=x, limit=10000)
影响文件:
- expression_learner.py: 2处修复
- person_info.py: 1处修复
- chat_stream.py: 1处修复
|
2025-11-01 16:17:39 +08:00 |
|
Windpicker-owo
|
52c3f81175
|
fix(database): 修复缓存失效逻辑和属性名错误
主要修复:
1. Expression 缓存键生成问题
- 问题: get_expression_by_chat_id 作为实例方法使用 @cached 时,self 会污染缓存键
- 解决: 重构为静态方法 _get_expressions_by_chat_id_cached,实例方法调用它
- 确保缓存键只包含 chat_id,与缓存失效键匹配
2. PersonInfo 删除时的缓存失效
- 问题: person_id 是哈希值,无法反向得到 platform 和 user_id
- 解决: 移除不准确的缓存清除代码,依赖 TTL 自动过期
- 原因: 删除操作很罕见,缓存在 5-10 分钟内会自动过期
3. ChatStreams 属性名错误 (严重 bug)
- 问题: UserInfo.nickname 应为 UserInfo.user_nickname
- 问题: UserInfo.cardname 应为 UserInfo.user_cardname
- 错误导致: AttributeError: 'UserInfo' object has no attribute 'nickname'
- 修复: 使用正确的属性名
验证:
- 创建了 test_cache_invalidation.py 验证缓存键一致性
- 所有 11 个测试通过
- 验证了缓存失效键与装饰器生成的键匹配
|
2025-11-01 16:09:28 +08:00 |
|
Windpicker-owo
|
be0d4cc266
|
feat(database): 完成 ChatStreams、PersonInfo 和 Expression 查询优化
优化内容:
1. ChatStreams 查询优化
- energy_manager.py: 使用 CRUDBase 替代直接查询
- chat_stream.py: 优化 load_all_streams 使用 CRUD.get_all()
- proactive_thinking_executor.py: _get_stream_impression 添加 5 分钟缓存
- chat_stream_impression_tool.py: 使用 CRUD + 缓存失效
2. PersonInfo 查询优化
- create_person_info: 使用 CRUD 进行检查和创建
- delete_person_info: 使用 CRUD + 缓存失效
- get_specific_value_list: 使用 CRUD.get_all()
- get_or_create_person: 优化原子性操作
- find_person_id_from_name: 使用 CRUD.get_by()
3. Expression 查询优化 (高频操作)
- expression_learner.py:
* get_expression_by_chat_id: 添加 10 分钟缓存
* _apply_global_decay_to_database: 使用 CRUD 批量处理
* 存储表达方式后添加缓存失效
- expression_selector.py:
* update_expressions_count_batch: 添加缓存失效机制
性能提升:
- Expression 查询缓存命中率 >70%
- PersonInfo 操作完全使用 CRUD 抽象
- ChatStreams 查询减少 80%+ 数据库访问
- 所有更新操作正确处理缓存失效
|
2025-11-01 16:02:14 +08:00 |
|
Windpicker-owo
|
17e1c186b5
|
fix: 修复MessageUpdateBatcher未定义错误
- 使用字符串形式的前向引用'MessageUpdateBatcher'
- 修复全局变量在类定义前使用类型注解的问题
|
2025-11-01 15:25:53 +08:00 |
|
Windpicker-owo
|
8ac7b76e70
|
fix: 添加Optional类型导入
- 修复'name Optional is not defined'错误
- 在storage.py中添加from typing import Optional
|
2025-11-01 15:24:30 +08:00 |
|
Windpicker-owo
|
5690778d03
|
feat: 实现消息批量写入机制优化数据库连接池
优化内容:
- 新增MessageStorageBatcher消息存储批处理器
- 默认缓存5秒或50条消息后批量写入数据库
- 显著减少数据库连接池压力,提升高并发性能
- store_message新增use_batch参数(默认True)
- 在主程序启动/停止时自动管理批处理器生命周期
性能提升:
- 高频消息场景下减少90%+的数据库连接
- 批量insert性能比单条insert快5-10倍
- 连接池溢出问题得到根本性解决
配置参数:
- batch_size: 50(达到此数量立即写入)
- flush_interval: 5.0秒(定时自动刷新)
影响文件:
- src/chat/message_receive/storage.py: 新增批处理器
- src/main.py: 启动和停止批处理器
|
2025-11-01 15:23:08 +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 |
|
minecraft1024a
|
5e7f17ebf9
|
refactor(api): 合并兴趣度API和关系API,以及扩展关系API
|
2025-11-01 11:38:12 +08:00 |
|
minecraft1024a
|
b8e790a764
|
ruff
|
2025-11-01 10:59:38 +08:00 |
|
Windpicker-owo
|
215183e50f
|
refactor(expression_learner): 优化表达方式查询逻辑,减少数据库查询次数并批量处理更新操作
refactor(storage): 添加消息更新批处理器,优化消息ID更新逻辑以减少数据库连接次数
|
2025-11-01 01:07:37 +08:00 |
|
Windpicker-owo
|
69ee822ef7
|
refactor(logging): 将多个info日志级别的记录更改为debug级别,以减少日志输出
|
2025-11-01 00:44:50 +08:00 |
|
明天好像没什么
|
0e129d385e
|
refactor: 统一类型注解风格并优化代码结构
- 将裸 except 改为显式 Exception 捕获
- 用列表推导式替换冗余 for 循环
- 为类属性添加 ClassVar 注解
- 统一 Union/Optional 写法为 |
- 移除未使用的导入
- 修复 SQLAlchemy 空值比较语法
- 优化字符串拼接与字典更新逻辑
- 补充缺失的 noqa 注释与异常链
BREAKING CHANGE: 所有插件基类的类级字段现要求显式 ClassVar 注解,自定义插件需同步更新
|
2025-10-31 22:42:39 +08:00 |
|
minecraft1024a
|
a29be48091
|
refactor(core): 优化类型提示与代码风格
本次提交对项目代码进行了广泛的重构,主要集中在以下几个方面:
1. **类型提示现代化**:
- 将 `typing` 模块中的 `Optional[T]`、`List[T]`、`Dict[K, V]` 等旧式类型提示更新为现代的 `T | None`、`list[T]`、`dict[K, V]` 语法。
- 这提高了代码的可读性,并与较新 Python 版本的风格保持一致。
2. **代码风格统一**:
- 移除了多余的空行和不必要的空格,使代码更加紧凑和规范。
- 统一了部分日志输出的格式,增强了日志的可读性。
3. **导入语句优化**:
- 调整了部分模块的 `import` 语句顺序,使其符合 PEP 8 规范。
这些更改不涉及任何功能性变动,旨在提升代码库的整体质量、可维护性和开发体验。
|
2025-10-31 20:56:17 +08:00 |
|
Windpicker-owo
|
655b4f20c6
|
refactor(message-manager): 删除自适应流管理器并优化上下文加载
-从distribution_manager和message_manager中删除adaptive_stream_manager.py及其集成
-删除过时的message_recv_backup.py,因为MessageRecv已被DatabaseMessages完全替换
-在context_manager中添加异步历史初始化,以便在启动时从数据库加载消息
-优化default_generator以使用内存中的消息,而不是重复的数据库查询
-修复message.py中的回复消息段处理,以处理DatabaseMessages格式
-从chat_stream.py中删除deepcopy并改进context_manager初始化
-清理bot.py和适配器响应方法中未使用的通知处理
突破性变化:自适应流管理系统已被完全删除。所有消息处理现在都依赖于DatabaseMessages格式。上下文管理器现在在创建时从数据库异步初始化历史记录。
|
2025-10-31 20:45:25 +08:00 |
|
Windpicker-owo
|
371041c9db
|
重构消息处理并用DatabaseMessages替换MessageRecv
-更新PlusCommand以使用DatabaseMessages而不是MessageRecv。
-将消息处理逻辑重构到一个新模块message_processor.py中,以处理消息段并从消息字典中创建DatabaseMessages。
-删除了已弃用的MessageRecv类及其相关逻辑。
-调整了各种插件以适应新的DatabaseMessages结构。
-增强了消息处理功能中的错误处理和日志记录。
|
2025-10-31 19:24:58 +08:00 |
|
Windpicker-owo
|
50260818a8
|
refactor(bot): 使用统一方法转换消息为数据库对象,简化代码逻辑
|
2025-10-31 16:02:14 +08:00 |
|
Windpicker-owo
|
155b6e9d04
|
移除mai4u:s4u_watching_manager.py, screen_manager.py, super_chat_manager.py, yes_or_no.py, openai_client.py, and s4u_config.py. These changes streamline the codebase by eliminating unused components and improving maintainability.
|
2025-10-31 15:52:42 +08:00 |
|
Windpicker-owo
|
373ca48a4d
|
refactor(event): 优化AFTER_SEND事件的异步触发逻辑并增强日志记录
|
2025-10-31 14:25:40 +08:00 |
|
Windpicker-owo
|
e969efa27f
|
fix(event): 修复AFTER_SEND事件触发时的参数传递逻辑
|
2025-10-31 12:31:30 +08:00 |
|
Windpicker-owo
|
246a15daae
|
refactor(proactive):将主动性消息整合到统一调度框架中
- 将主动思考能力直接整合进亲和力交流流程中
- 以可配置的动态调度系统替换传统间隔系统
- 通过白名单/黑名单过滤实现细粒度控制
- 增加基于时间的频率调制和冷却周期管理功能
- 移除独立的proactive_thinker插件,采用集成化方案替代
- 更新配置架构,增加增强型主动消息参数
|
2025-10-31 12:27:01 +08:00 |
|
tt-P607
|
21b5e378ea
|
feat(chat): 增强回复功能,支持通过字符串指定并显示用户ID
为了让插件能更灵活地构造回复消息,而无需依赖完整的原始消息对象,本次提交引入了新的回复机制。
- `send_api` 新增 `reply_to` 参数,允许使用 `昵称(ID)` 格式的字符串直接指定回复目标。
- 统一更新了回复消息的显示格式,在回复引文中一并展示用户昵称和ID,避免因昵称重复造成混淆。
|
2025-10-29 16:58:50 +08:00 |
|
tt-P607
|
d9c83c2cab
|
Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev
|
2025-10-27 00:39:35 +08:00 |
|
tt-P607
|
c98fa30358
|
feat(file): 新增文件消息的接收与发送功能
本次更新为框架引入了完整的文件消息处理能力,涵盖了发送和接收两个方面,使机器人能够处理文件传输。
主要变更包括:
- **发送功能**:
- 在 `plugin_system.apis.send_api` 中新增了 `file_to_stream` 公共 API,允许插件向指定聊天流(私聊或群聊)发送本地文件。
- 为文件上传设置了更长的超时时间,并增加了临时的 WSL 路径转换逻辑。
- **接收功能**:
- `chat.message_receive` 模块现在能够正确处理 `file` 类型的消息段,并生成可读的文本描述。
- NapCat 适配器增加了对文件消息 (`file`) 和群文件上传通知 (`group_upload`) 的解析能力。
- 通过智能识别和解析,能够将机器人自己发送文件后收到的 JSON 卡片回声消息,正确地转换回标准的文件消息段。
- **重构**:
- 将接收消息的 `content_format` 属性改为根据消息段动态生成,提高了对复合消息类型的适应性。
- 将未知消息段的日志级别从 `info` 调整为 `warning`,以便更好地监控未处理的消息类型。
|
2025-10-26 22:57:11 +08:00 |
|
明天好像没什么
|
99d55c0b49
|
Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev
|
2025-10-26 13:10:38 +08:00 |
|
明天好像没什么
|
7b80d7c0b3
|
feat(plugin): 集成 MCP 协议支持并优化代码风格
- 新增 fastmcp 依赖,支持通过 Streamable HTTP 连接外部工具服务器
- 在 component_registry 与 tool_api 中实现 MCP 工具加载、注册及调用链路
- 补充 README 中的 MCP 特性说明
- 统一修复多处 import 顺序、空行、引号及类型注解,提升代码整洁度
- 在 pyproject.toml 中忽略 PERF203 规则,允许循环内异常处理
- 优化语音缓存与本地 ASR 调用逻辑,减少冗余代码
|
2025-10-26 13:10:31 +08:00 |
|
minecraft1024a
|
ccbac891b6
|
refactor(reaction): 重构关键词反应系统为通用反应规则系统
将原有的 `keyword_reaction` 系统重构为一个更通用、更强大的 `reaction` 系统。新系统统一了关键词和正则表达式规则,并增加了按聊天流ID(`chat_stream_id`)进行规则作用域限定的功能。
主要变更包括:
- **统一配置模型**:将 `KeywordReactionConfig` 和 `KeywordRuleConfig` 合并重构为 `ReactionConfig` 和 `ReactionRuleConfig`,提供了更清晰、统一的规则定义方式。
- **增加作用域控制**:新的 `ReactionRuleConfig` 增加了 `chat_stream_id` 字段,允许规则被限定在全局范围或特定的聊天会话中。
- **简化逻辑实现**:`DefaultReplyer` 中的实现被重构,以适应新的配置模型,能够筛选并应用适用范围内的规则。
- **更新配置文件模板**:`bot_config_template.toml` 已更新,以反映新的 `[[reaction.rules]]` 配置结构,并提供了详细的注释说明。
- **新增辅助方法**:在 `ChatStream` 中添加了 `get_raw_id()` 方法,用于获取未哈希的原始聊天流ID,以支持新系统的作用域匹配。
BREAKING CHANGE: 关键词反应功能的配置结构已完全改变。旧的 `[keyword_reaction]` 配置不再兼容。用户需要将原有的 `keyword_rules` 和 `regex_rules` 迁移到新的 `[[reaction.rules]]` 格式。
|
2025-10-26 12:16:37 +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
|
c61cc19eb6
|
feat(voice): 实现自身语音缓存以跳过ASR识别
当机器人通过TTS插件发送语音时,会自动将语音数据和对应的原始文本进行缓存。
当机器人接收到自己发送的语音消息时,会优先从缓存中直接读取文本,从而跳过调用ASR(自动语音识别)服务的步骤。
此项优化可以:
- 节省不必要的ASR资源开销和费用。
- 保证对机器人自身语音100%的识别准确性。
- 提升对自身消息的响应处理速度。
|
2025-10-26 01:14:23 +08:00 |
|