Commit Graph

5327 Commits

Author SHA1 Message Date
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
Windpicker-owo
f34c71966e feat(proactive-thinking): 利用聚焦能量增强能量计算和调度
-重构关系EnergyCalculator,使用聊天流兴趣评分代替用户关系评分
-更新主动思维调度器,使用聊天流中的焦点能量进行间隔计算
-通过更详细的信息改进整个主动思维系统的日志记录
-将chat_stream参数添加到插件工具构造函数中,以更好地处理上下文
-增强调度和事件处理中的错误处理和调试信息
这些变化通过以下方式改善了主动思维系统:
1.使用聊天流中的实时焦点能量,而不是静态用户关系评分
2.根据当前对话参与度提供更准确和动态的日程安排
3.添加全面的日志记录,以便更好地进行调试和监控
4.通过工具中的chat_stream参数确保正确的上下文传播
2025-11-19 23:27:19 +08:00
Windpicker-owo
7b728beec7 feat(proactive-thinking): 将情绪与决策历史融入前瞻性思维
- 从情绪管理器中添加当前情绪检索功能,以提供情感背景信息
- 实施最后决策追踪以避免话题重复并优化策略
- 更新决策提示,纳入情绪影响和历史背景因素
- 为所有动作类型(无操作、简单气泡、抛出主题)添加决策记录功能
- 将simple_bubble行为扩展为在执行后暂停主动思考
- 更新配置模板以明确topic_throw_cooldown的用途
- 增强日志记录功能,以便更好地调试情绪与决策整合问题

重大变更:主动思考系统现需依赖mood_manager模块,并调整决策上下文结构,新增情绪和上一次决策字段。
2025-11-19 23:27:18 +08:00
Windpicker-owo
f28f097337 refactor(event): 优化AFTER_SEND事件的异步触发逻辑并增强日志记录 2025-11-19 23:27:18 +08:00
tt-P607
2a49c8171a refactor(llm_models): 使浮点数工具参数的类型定义符合主流标准
为了与主流大语言模型(LLM)的工具调用规范保持一致,对工具参数的类型定义进行了标准化。多数LLM API遵循或类似于JSON Schema标准,其中使用'number'来表示所有数值类型(包括整数和浮点数)。

此次变更将 `ToolParamType.FLOAT` 枚举的底层值从 'float' 更新为 'number',确保了我们生成的工具定义能够被外部API正确解析。

BREAKING CHANGE: `ToolParamType.FLOAT` 枚举的字符串值已由 'float' 更改为 'number'。任何依赖此旧值的代码都需要进行相应调整。
2025-11-19 23:27:17 +08:00
tt-P607
9c5ba585ea docs(tts): 优化TTS工具描述以强调纯文本和标准标点
之前的描述虽然指出了标点符号的限制,但不够明确禁止装饰性符号(如'♪', '~')。这可能导致LLM在生成文本时依然携带其惯有的风格,从而造成语音合成失败或效果不佳。

本次更新通过增加一条独立的规则来明确禁止所有非标准符号,并重申了标点符号的“最终规则”,以确保提供给TTS引擎的文本是纯净且格式正确的。
2025-11-19 23:27:17 +08:00
tt-P607
6510f9685e fix(qq): 修正ID为281的QQ表情文本
将 ID 为 281 的 QQ 表情文本从“[表情:无眼笑]”更正为“[表情:翻白眼]”。

此更正已在 napcat_adapter 和 social_toolkit 插件中同步应用,以确保表情解析的一致性。
2025-11-19 23:27:17 +08:00
Windpicker-owo
94ca637fe2 fix(event): 修复AFTER_SEND事件触发时的参数传递逻辑 2025-11-19 23:27:16 +08:00
Windpicker-owo
543f381863 refactor(proactive):将主动性消息整合到统一调度框架中
- 将主动思考能力直接整合进亲和力交流流程中
- 以可配置的动态调度系统替换传统间隔系统
- 通过白名单/黑名单过滤实现细粒度控制
- 增加基于时间的频率调制和冷却周期管理功能
- 移除独立的proactive_thinker插件,采用集成化方案替代
- 更新配置架构,增加增强型主动消息参数
2025-11-19 23:27:16 +08:00
tt-P607
edd96b4b6d fix(chat): 增强回复内容清理逻辑以处理嵌套回复头
先前的回复头清理逻辑无法有效处理模型生成的复杂或嵌套的回复结构,例如 `[回复<A>:[回复<B>:内容]],说:`,导致清理不彻底。

本次更新通过以下方式提升了清理的健壮性:
- 使用循环和更健壮的正则表达式,以递归方式剥离多层嵌套的回复头。
- 增加了一个基于 `],说:` 的 rsplit 作为最终防线,处理日志中观察到的其他特殊格式。
- 移除了可能存在的 `[SPLIT]` 标记,避免意外的消息分割。

此外,本次提交还更新了 QQ 表情列表,增加了新的表情并修正了一个格式错误。
2025-11-19 23:27:15 +08:00
Windpicker-owo
3e48784e92 fix(affinity-flow): 改进聊天流印象工具的stream_id获取逻辑
增强 ChatStreamImpressionTool 中 stream_id 的获取机制,优先从 function_args 获取,其次尝试从 chat_stream 对象获取。当两种方式都无法获取时,提供更清晰的错误日志信息,便于问题排查。
2025-11-19 23:27:15 +08:00
tt-P607
8a08d1b9f2 fix(llm): 兼容处理部分模型缺失的token用量字段
部分模型(如 embedding 模型)的 API 响应中可能不包含 `completion_tokens` 等完整的用量字段。

此前的直接属性访问会导致 `AttributeError`,从而中断使用记录和统计更新流程。

通过改用 `getattr(usage, "...", 0)` 的方式为缺失的字段提供默认值 0,增强了代码的健壮性,确保系统能够稳定处理来自不同类型模型的响应。
2025-11-19 23:27:14 +08:00