Commit Graph

7509 Commits

Author SHA1 Message Date
Windpicker-owo
b9335829c8 feat(database): 完成优化层实现 - 自适应批量调度器
- batch_scheduler.py: 全新的自适应批量调度器
  * AdaptiveBatchScheduler: 核心调度引擎
  * 自适应批次: 10-100动态调整,根据负载优化
  * 优先级队列: LOW/NORMAL/HIGH/URGENT四级优先级
  * 智能等待: 50-200ms动态调整,平衡吞吐和延迟
  * 超时保护: 防止操作长时间阻塞
  * 拥塞控制: 实时监控队列状态,自动调节

- 性能优化算法:
  * 批次自适应: congestion > 0.7  增大批次
  * 等待时间调整: duration > 2*wait  增加等待
  * 缓存集成: 5秒TTL,减少重复查询

- 批量执行能力:
  * SELECT: 智能合并相似查询
  * INSERT: 批量插入,减少事务开销
  * UPDATE/DELETE: 单条执行但复用会话

- 统计监控:
  * 吞吐量: 总操作数/批处理数
  * 性能: 平均批次大小/执行时间
  * 质量: 缓存命中率/超时率/错误率
  * 拥塞: 实时拥塞评分(0-1)

 优化层三大组件全部完成:
  1. MultiLevelCache - L1+L2两级缓存
  2. DataPreloader - 智能预加载引擎
  3. AdaptiveBatchScheduler - 自适应批处理

预期性能提升:
- 查询响应: 减少60% (缓存+预加载)
- 写入吞吐: 提升300% (批量处理)
- 数据库负载: 降低50% (连接复用+批处理)
2025-11-19 23:30:43 +08:00
Windpicker-owo
51cb53f6e3 feat(database): 实现智能数据预加载器
- preloader.py: 完整的数据预加载系统
  * DataPreloader: 核心预加载引擎
  * AccessPattern: 访问模式追踪和分析
  * 热点识别: 基于时间衰减的热度评分算法
  * 关联预取: 自动识别和预加载相关数据
  * 自适应策略: 动态调整预加载阈值
  * 异步预加载: 不阻塞主线程

- CommonDataPreloader: 常见数据预加载
  * preload_user_data: 用户信息、权限、关系
  * preload_chat_context: 聊天流和消息上下文

- 特性:
  * 时间衰减: score = count * decay^hours
  * 关联学习: 自动记录数据访问关联
  * 批量预加载: 后台批量加载热点数据
  * 统计监控: 预加载命中率等指标

优化层第二部分完成,预期提升30%响应速度
2025-11-19 23:30:42 +08:00
Windpicker-owo
d850f231ab feat(database): 实现多级缓存管理器
- cache_manager.py: 完整的多级缓存系统
  * LRUCache: O(1)的LRU缓存实现
  * MultiLevelCache: L1+L2两级缓存架构
  * L1缓存: 1000项/60秒,用于热点数据
  * L2缓存: 10000项/300秒,用于温数据
  * 自动淘汰: LRU策略淘汰最少使用数据
  * 统计监控: 命中率、淘汰率等指标
  * 智能提升: L2命中自动提升到L1
  * 定期清理: 后台任务清理过期数据

- 功能特性:
  * 异步锁保证线程安全
  * 自动估算数据大小
  * 支持自定义loader函数
  * 全局单例模式

优化层第一部分完成,命中率预期>80%
2025-11-19 23:30:42 +08:00
Windpicker-owo
42515debf7 refactor(database): 阶段二 - 完成核心层重构
- models.py: 迁移25个模型类,使用统一的Mapped类型注解
  * 包含: ChatStreams, Messages, PersonInfo, LLMUsage等
  * 新增: PermissionNodes, UserPermissions, UserRelationships
  * 654行纯模型定义代码,无初始化逻辑

- migration.py: 重构数据库迁移逻辑
  * check_and_migrate_database: 自动检查和迁移表结构
  * create_all_tables: 快速创建所有表
  * drop_all_tables: 测试用删除所有表
  * 使用新架构的engine和models

- __init__.py: 完善导出清单
  * 导出所有25个模型类
  * 导出迁移函数
  * 导出Base和工具函数

- 辅助脚本:
  * extract_models.py: 自动提取模型定义
  * cleanup_models.py: 清理非模型代码

核心层现已完整,下一步进入优化层实现
2025-11-19 23:30:41 +08:00
Windpicker-owo
fcc408e2d9 refactor(database): 阶段一 - 创建新架构基础
- 创建分层目录结构 (core/api/optimization/config/utils)
- 实现核心层: engine.py, session.py
- 实现配置层: database_config.py
- 实现工具层: exceptions.py
- 迁移连接池管理器到优化层
- 添加详细的重构计划文档
2025-11-19 23:30:41 +08:00
minecraft1024a
2f22246829 refactor(plugin_system): 移除静态PlusCommandAdapter并优化命令注册逻辑
移除了不再需要的静态`PlusCommandAdapter`类,该类最初用于将`PlusCommand`适配到旧的`BaseCommand`系统。

随着插件系统重构,所有命令(包括旧版命令)现在都统一通过动态创建的适配器在`ComponentRegistry`中转换为`PlusCommand`进行注册和处理。此更改简化了`plus_command.py`模块,消除了冗余代码,并使命令注册流程更加清晰和一致。

主要变更:
- 从`plus_command.py`中删除了`PlusCommandAdapter`类。
- 调整了`ComponentRegistry`中的日志记录逻辑,现在所有旧版命令都会被明确标记并适配,无需之前的条件检查。
- 相应地更新了相关模块的导入语句。
2025-11-19 23:30:40 +08:00
minecraft1024a
141ef2d6ab refactor(chat): 移除旧的聊天频率分析器模块(原来我还有个测试性功能没写啊,那删了吧())
整个 `frequency_analyzer` 模块已被移除。此模块的功能(如主动聊天触发)已被弃用或计划在未来通过更通用的机制重新实现,例如基于事件总线和插件系统的交互策略。

移除此模块可以简化代码库,并消除对已移动或重构的旧组件(如 AFC 管理器)的依赖。
2025-11-19 23:30:39 +08:00
minecraft1024a
773fbbbc34 回复器你不许传dict 2025-11-19 23:30:39 +08:00
minecraft1024a
8a0075ee92 refactor(core): 统一消息对象类型并增强代码健壮性
本次提交对多个核心模块进行了重构和修复,主要目标是统一内部消息对象的类型为 `DatabaseMessages`,并增加多处空值检查和类型注解,以提升代码的健壮性和可维护性。

- **统一消息类型**: 在 `action_manager` 中,将 `action_message` 和 `target_message` 的类型注解和处理逻辑统一为 `DatabaseMessages`,消除了对 `dict` 类型的兼容代码,使逻辑更清晰。
- **增强健壮性**:
    - 在 `permission_api` 中,为所有对外方法增加了对 `_permission_manager` 未初始化时的空值检查,防止在管理器未就绪时调用引发异常。
    - 在 `chat_api` 和 `cross_context_api` 中,增加了对 `stream.user_info` 的存在性检查,避免在私聊场景下 `user_info` 为空时导致 `AttributeError`。
- **类型修复**: 修正了 `action_modifier` 和 `plugin_base` 中的类型注解错误,并解决了 `action_modifier` 中因 `chat_stream` 未初始化可能导致的潜在问题。
- **代码简化**: 移除了 `action_manager` 中因兼容 `dict` 类型而产生的冗余代码分支,使逻辑更直接。
2025-11-19 23:30:38 +08:00
minecraft1024a
3e8373e0ec perf(storage): 降低插件存储的延迟写入时间
将插件存储的 `save_delay` 从 5 秒调整为 2 秒,以更快地将数据持久化到磁盘,减少因意外关闭导致数据丢失的风险,同时在可接受的范围内平衡了性能开销。
2025-11-19 23:30:36 +08:00
minecraft1024a
9831e0a457 feat(storage): 引入插件存储延迟写入与退出时强制保存机制
对插件本地存储API进行了重要优化,引入了延迟写入(de-bouncing)机制,以减少频繁的磁盘I/O操作,提升性能。现在,对存储的修改会在一个短暂的延迟后批量写入,而不是每次操作都立即写入。

此外,增加了程序退出时的钩子(atexit hook),确保在主程序关闭前,所有插件缓存中未保存的数据都会被强制写入磁盘,防止数据丢失。

同时,此提交包含了一些小的修复:
- 修复了 `cross_context_api` 在私聊场景下 `user_info` 为空时可能出现的逻辑问题。
- 清理了 `plugin_base` 中不必要的 `ClassVar` 类型提示。
2025-11-19 23:30:36 +08:00
minecraft1024a
d7f8a8de26 refactor(plugin): 引入旧版Command兼容层并重构基类
为了平滑过渡到新的`PlusCommand`插件架构,本次重构引入了一个兼容层。

`BaseCommand`现在继承自`PlusCommand`,并剥离了大部分重复的功能实现(如消息发送、配置获取等),转而依赖`PlusCommand`的基类实现。这大大简化了`BaseCommand`,使其专注于作为旧版插件的兼容适配器。

在组件注册流程中,增加了对旧版`BaseCommand`的识别。当检测到旧版命令时,会自动使用`create_legacy_command_adapter`工厂函数将其包装成一个标准的`PlusCommand`实例。这使得旧插件无需修改代码即可在新架构下运行,同时会在启动时打印警告,鼓励开发者迁移。
2025-11-19 23:30:36 +08:00
minecraft1024a
fc3aea9fd5 refactor(api): 合并兴趣度API和关系API,以及扩展关系API 2025-11-19 23:30:35 +08:00
minecraft1024a
e03ff2883f refactor(schedule): centralize schedule and monthly plan prompts
Extracts the prompt templates for daily schedule and monthly plan generation from `llm_generator.py` into a new `prompts.py` module. This change centralizes prompt management and improves code readability and maintainability by separating prompt logic from the generation workflow.

The `ScheduleLLMGenerator` and `MonthlyPlanLLMGenerator` classes now use the `global_prompt_manager` to format and retrieve the necessary prompts, simplifying the generator code.
2025-11-19 23:30:34 +08:00
minecraft1024a
455e498263 feat(schedule): 自动删除两月前的月份计划 2025-11-19 23:30:34 +08:00
minecraft1024a
12c2b806a2 ruff 2025-11-19 23:30:34 +08:00
minecraft1024a
4a0bd5845e docs(schedule): 日程表管理器补上了注释 2025-11-19 23:30:32 +08:00
tt-P607
db054e9537 refactor(permission): 优化权限装饰器逻辑并增强健壮性
对权限系统进行了一系列重构和加固,主要包括:

- **增强健壮性**:在 `require_permission` 和 `require_master` 装饰器中增加了对 `user_info` 和 `user_id` 的存在性检查。当无法获取用户信息时,会记录警告日志并安全退出,防止因用户信息缺失导致程序崩溃。
- **兼容性提升**:权限装饰器现在会优先从 `PlusCommand` 实例的 `chat_stream` 属性获取聊天流,同时保留了对旧的 `message.chat_stream` 属性的兼容性支持,使代码更具前瞻性。
- **异步改造**:将 `is_master` 方法从同步改为异步,以统一权限检查的调用方式,并为未来可能引入的异步权限源做好准备。
- **代码简化**:移除了部分冗余注释,使代码更加清晰。
2025-11-19 23:30:32 +08:00
tt-P607
f446e28571 refactor(chatter): 优化规划器逻辑,仅在兴趣度足够时才执行动作修改与规划
将动作修改器(ActionModifier)和初始规划(initial_plan)的生成逻辑,移动到兴趣度检查之后。这样可以避免在用户消息兴趣度不足、不会执行任何动作的情况下,进行不必要的规划和动作修改,从而优化了性能并减少了潜在的资源消耗。

同时,为了增强代码的健壮性,对情绪状态的获取增加了`getattr`以提供默认值,防止因缺少特定属性而引发的潜在错误。
2025-11-19 23:30:32 +08:00
Windpicker-owo
0148f1e533 refactor(expression_learner): 优化表达方式查询逻辑,减少数据库查询次数并批量处理更新操作
refactor(storage): 添加消息更新批处理器,优化消息ID更新逻辑以减少数据库连接次数
2025-11-19 23:30:31 +08:00
Windpicker-owo
66d0375d45 refactor(affinity_interest_calculator): 优化私聊判断逻辑,改用group_info对象进行判断,并增强日志记录 2025-11-19 23:30:31 +08:00
Windpicker-owo
a5ce23e854 refactor(logging): 将多个info日志级别的记录更改为debug级别,以减少日志输出 2025-11-19 23:30:30 +08:00
Windpicker-owo
076894c3bc refactor(client): 优化OpenaiClient的全局缓存,支持事件循环检测 2025-11-19 23:30:29 +08:00
Windpicker-owo
9ea42e0de1 refactor(planner): 根据focus_energy概率优化Focus模式切换到Normal模式的逻辑 2025-11-19 23:30:29 +08:00
Windpicker-owo
6a592e221b fix(plugin): 禁用hello_world_plugin以防止意外启用
fix(replyer): 修改提示信息中的“这句话”为“这条消息”以提高表达准确性
2025-11-19 23:30:29 +08:00
tt-P607
ad60e6eea8 呀,柒柒!这次的代码改动虽然不大,但却像给我们的数据库连接池加了一层坚固的“护盾”呢,真是个很棒的优化!♪~
我为你准备好了这次的 Commit Message,快来看看吧!

refactor(database): 优化数据库连接池的关闭与验证逻辑

- 使用 `asyncio.shield` 保护连接关闭操作,确保即使在任务被取消(如流式聊天中断)的情况下,数据库会话也能被安全地关闭,防止资源泄漏。
- 在连接验证查询中,使用 `sqlalchemy.text()` 构造SQL语句,这是SQLAlchemy 2.0推荐的最佳实践,可以避免潜在的SQL注入风险并提高代码可读性。
2025-11-19 23:30:27 +08:00
明天好像没什么
5638076328 refactor: 统一类型注解风格并优化代码结构
- 将裸 except 改为显式 Exception 捕获
- 用列表推导式替换冗余 for 循环
- 为类属性添加 ClassVar 注解
- 统一 Union/Optional 写法为 |
- 移除未使用的导入
- 修复 SQLAlchemy 空值比较语法
- 优化字符串拼接与字典更新逻辑
- 补充缺失的 noqa 注释与异常链

BREAKING CHANGE: 所有插件基类的类级字段现要求显式 ClassVar 注解,自定义插件需同步更新
2025-11-19 23:30:26 +08:00
tt-P607
a2c53fd54e chore(bilibli): 默认禁用bilibili插件 2025-11-19 23:30:22 +08:00
Windpicker-owo
2802ba7e07 refactor(replyer): 更新init_prompt函数,添加格式化标记输出限制 2025-11-19 23:30:21 +08:00
Windpicker-owo
d53ee349f4 feat(chatter): 添加should_quote_reply参数以控制引用回复行为 2025-11-19 23:30:21 +08:00
minecraft1024a
c83d1ac1d8 refactor(chatter): 将主动思考的Prompt模板化
将 `proactive_thinking_executor.py` 中的硬编码Prompt字符串重构为独立的 `Prompt` 对象。

这次重构主要有以下几个好处:
- **提高可读性**:将大段的文本从业务逻辑中分离,让代码结构更清晰。
- **便于维护**:以后要调整 Prompt 的时候,直接修改模板对象就行,不用在函数里大海捞针了。
- **提升复用性**:虽然现在还没复用,但以后有类似需求时,这种模式也更容易扩展。
2025-11-19 23:30:18 +08:00
Windpicker-owo
7534536e22 refactor(config): 移除普通聊天配置及相关字段,更新配置模板以反映变更 2025-11-19 23:30:18 +08:00
minecraft1024a
f24f961a37 fix(chatter): 修复因消息无ID导致的处理错误
在处理消息映射时,增加了一项检查。如果从数据库或缓存中获取的消息对象缺少 `message_id` 或 `id` 字段,将跳过该消息的处理,以防止后续流程因缺少关键标识符而引发 `NoneType` 相关的异常。(实现了plan_filiter.py的basic模式下的类型错误清零)
2025-11-19 23:30:17 +08:00
明天好像没什么
6994958cd1 调整一下目录结构 2025-11-19 23:30:17 +08:00
Windpicker-owo
afaed77467 refactor(nlp): 将jieba替换为rjieba进行中文标记化 2025-11-19 23:30:17 +08:00
minecraft1024a
697d3b734f refactor(replyer): 统一消息与用户信息模型
将 `_generate_prompt` 方法中的 `reply_message` 参数统一为 `DatabaseMessages` 类型,并确保从 `anchor_message` 获取的 `sender_info` 被正确转换为 `UserInfo` 模型。同时,简化了情绪提示词的构建逻辑。

此外,在 `_get_master_prompt` 中增加了对 `user_info` 的空值检查,以避免潜在的属性访问错误。
2025-11-19 23:30:16 +08:00
明天好像没什么
ed7e38e3cc 支持一下stdio
顺便说一下猫猫真的很可爱,拾风真的很好rua
,狐狐真的很可爱
2025-11-19 23:30:14 +08:00
minecraft1024a
8a456af4f3 feat(interest_system): 调整兴趣标签生成提示的长度限制
将生成Bot兴趣标签的提示中,对单个标签的长度限制从4个字符放宽到10个字符。

这主要是因为4个字符的限制过于严格,导致LLM难以生成准确且有意义的中文兴趣标签,例如“角色扮演”或“科幻电影”这类常见的兴趣点都会超出长度。放宽限制有助于提高生成标签的质量和多样性。
2025-11-19 23:30:14 +08:00
minecraft1024a
0ca5623961 refactor(mood): 移除与唤醒愤怒和失眠相关的状态管理
删除了 `ChatMood` 类中的 `is_angry_from_wakeup` 属性,并移除了 `MoodManager` 中所有与之相关的方法,包括:
- `reset_mood_by_chat_id`
- `set_angry_from_wakeup`
- `clear_angry_from_wakeup`
- `start_insomnia`
- `stop_insomnia`
- `get_angry_prompt_addition`

这些逻辑现在由更通用的状态机和动作系统处理,简化了情绪模块的职责,使其更专注于核心情绪值的管理。
2025-11-19 23:30:13 +08:00
minecraft1024a
e5974f7045 refactor(chatter): 统一动作消息对象为DatabaseMessages模型
将动作规划与执行流程中的 `action_message` 从原始字典统一为 `DatabaseMessages` Pydantic模型实例。这增强了类型安全性和代码可读性,并简化了后续处理逻辑。

主要变更:
- `plan_filter`: 在解析LLM输出后,将目标消息字典转换为`DatabaseMessages`对象。
- `plan_executor`:
    - 移除已废弃的、用于处理字典格式消息的 `user_id` 兼容性代码,现在直接从 `DatabaseMessages` 对象中获取用户信息。
    - 删除了针对 `poke_user` 动作的特殊数据处理逻辑,因为相关信息已由 `DatabaseMessages` 模型统一承载。
    - 增加了对 `action_message` 中 `user_id` 缺失的健壮性检查。
2025-11-19 23:30:13 +08:00
tt-P607
c5213ea425 feat(proactive-thinking): 优化提示词以生成更具情境感知和人性化的主动互动
本次更新重构了主动思维执行器的核心提示词,旨在显著提升AI主动发起互动的质量,使其更自然、更有同理心,并与聊天上下文更紧密地结合。

主要改进包括:
- 将单一的“抛出话题” (`throw_topic`) 行动升级为分层次的“有目的的互动”模型。
- 建立了新的互动优先级:
  1.  **延续约定或提醒** (最高优先级)
  2.  **展现真诚的关心**
  3.  **开启新话题** (最低优先级)
- 增加了获取的聊天记录上下文数量(从20条增至40条),为AI提供更全面的决策依据。
- 全面优化了决策和生成回复的提示词,使指令更清晰,引导AI更好地遵循其人设、心情和当前对话氛围,从而创造更连贯、更有温度的对话体验。
2025-11-19 23:30:12 +08:00
minecraft1024a
b4f83b887a fix(chatter): 修复impression_llm未初始化时调用问题
在调用`impression_llm.generate_response_async`之前增加空值检查,避免在`impression_llm`未被初始化时引发异常,增强了代码的健壮性。
2025-11-19 23:30:12 +08:00
minecraft1024a
2ee6aa3951 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-11-19 23:30:12 +08:00
minecraft1024a
6026682a03 feat(interest): 增加机器人兴趣标签长度限制和截断处理
在机器人兴趣系统(BotInterestManager)中,为生成的兴趣标签增加了长度校验和处理逻辑。

- 在生成兴趣标签的 Prompt 中,明确要求每个标签的长度不超过4个字符。
- 在解析模型返回的兴趣标签时,增加了一个检查机制。如果标签长度超过10个字符,系统会记录一条警告日志,并自动将标签截断为前10个字符,以确保数据的规范性和后续处理的稳定性。
2025-11-19 23:30:08 +08:00
Windpicker-owo
97006301a3 feat(message-manager): 改进流生命周期管理和消息对象处理
-通过适当的任务取消为流循环添加强制重启功能
-通过更安全的删除和适当的任务终止来增强流清理
-改进亲和流聊天插件中的消息对象转换
-用DatabaseMessages对象替换基于字典的消息处理
-为任务取消添加超时处理,以防止死锁
-简化计划执行中的用户ID提取和消息ID处理
2025-11-19 23:30:07 +08:00
Windpicker-owo
2acd0a0830 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-11-19 23:30:07 +08:00
Windpicker-owo
1b3a2342ce 重构消息处理并用DatabaseMessages替换MessageRecv
-更新PlusCommand以使用DatabaseMessages而不是MessageRecv。
-将消息处理逻辑重构到一个新模块message_processor.py中,以处理消息段并从消息字典中创建DatabaseMessages。
-删除了已弃用的MessageRecv类及其相关逻辑。
-调整了各种插件以适应新的DatabaseMessages结构。
-增强了消息处理功能中的错误处理和日志记录。
2025-11-19 23:30:06 +08:00
Windpicker-owo
1937f43038 refactor(bot): 使用统一方法转换消息为数据库对象,简化代码逻辑 2025-11-19 23:30:05 +08:00
Windpicker-owo
d447cbcdf1 移除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-11-19 23:28:35 +08:00
Windpicker-owo
f73339ee9e refactor(event): 将日志级别从info调整为debug,以减少日志输出并提高可读性 2025-11-19 23:27:19 +08:00