Commit Graph

1461 Commits

Author SHA1 Message Date
Windpicker-owo
21167a2685 feat(expression): 添加表达方式选择模式支持与DatabaseMessages兼容性改进
- 新增统一的表达方式选择入口,支持classic和exp_model两种模式
- 添加StyleLearner模型预测模式,可基于机器学习模型选择表达风格
- 改进多个模块对DatabaseMessages数据模型的兼容性处理
- 优化消息处理逻辑,统一处理字典和DatabaseMessages对象
- 在配置中添加expression.mode字段控制表达选择模式
2025-11-19 23:27:09 +08:00
Windpicker-owo
a80db71cd4 feat(chat): 优化消息处理提示词与兴趣度显示逻辑
- 在默认回复器中移除未读消息的兴趣度显示,简化回复逻辑
- 在亲和流聊天器的计划过滤器中保留兴趣度显示,供planner决策使用
- 更新planner提示词,明确兴趣度优先原则但禁止在思考流中使用技术术语
- 统一历史消息区块的标题描述,提高可读性
2025-11-19 23:27:08 +08:00
Windpicker-owo
f6aa923f06 feat(chat): 优化流处理逻辑与Normal模式性能
- 在StreamLoopManager中添加流能量更新机制,在处理消息前更新能量值用于间隔计算
- 为消息打断系统添加allow_reply_interruption配置选项,控制是否允许在回复时打断
- 重构AffinityFlowChatter规划器,为Normal模式添加简化流程,显著降低延迟
- 实现Normal模式与Focus模式间的智能切换机制,基于focus_energy概率退出Normal模式
- 移除冗余的兴趣度批量更新逻辑,优化数据库写入性能
- 更新配置模板版本至7.5.0

BREAKING CHANGE: 配置文件中新增allow_reply_interruption选项,需要更新配置
2025-11-19 23:27:06 +08:00
Windpicker-owo
90c5eb1274 feat(chat): 添加Chatter处理状态跟踪机制
在StreamLoopManager中添加is_chatter_processing标志来精确跟踪Chatter处理状态,优化消息打断检查逻辑。

- 在distribution_manager中设置和清除Chatter处理标志
- 在message_manager中基于处理状态进行打断检查
- 在数据模型中添加is_chatter_processing字段
2025-11-19 23:27:05 +08:00
tt-P607
ff73f7c0e8 fix(chat): 修复消息打断后的重复处理并优化回复逻辑
本次提交包含两项关键更改:

1.  将 `triggering_user_id` 的设置逻辑从 `ChatterManager` 迁移至 `StreamLoopManager` 的处理循环初期。这确保了触发用户ID能够更早、更可靠地被设置,为回复保护机制提供了正确的上下文,避免了潜在的逻辑错误。

2.  在消息成功打断正在执行的任务后,立即调用 `clear_all_unread_messages`。此举修复了当新消息打断旧任务时,旧消息队列未被清空,导致机器人可能在之后重新处理这些过时消息的缺陷,从而防止了重复响应。
2025-11-19 23:27:04 +08:00
minecraft1024a
bdcd50468c 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-11-19 23:27:04 +08:00
minecraft1024a
7cc31415e4 refactor(chat): 简化回复分割逻辑
移除了对 `split_mode == "llm"` 的显式检查。现在,只要响应文本中存在 `[SPLIT]` 标记,就会使用该标记进行分割。如果不存在,则统一回退到基于标点的传统分割模式。这简化了代码
2025-11-19 23:27:03 +08:00
明天好像没什么
f5e82685a0 feat(plugin): 集成 MCP 协议支持并优化代码风格
- 新增 fastmcp 依赖,支持通过 Streamable HTTP 连接外部工具服务器
- 在 component_registry 与 tool_api 中实现 MCP 工具加载、注册及调用链路
- 补充 README 中的 MCP 特性说明
- 统一修复多处 import 顺序、空行、引号及类型注解,提升代码整洁度
- 在 pyproject.toml 中忽略 PERF203 规则,允许循环内异常处理
- 优化语音缓存与本地 ASR 调用逻辑,减少冗余代码
2025-11-19 23:27:03 +08:00
tt-P607
aea51c60c6 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-11-19 23:27:01 +08:00
Windpicker-owo
4d8fce1fe1 refactor(chat): 简化任务管理架构,移除多重回复支持
- 移除 ChatterManager 中的复杂任务追踪逻辑(_processing_tasks)
- 将流循环任务管理从 StreamLoopManager 转移到 StreamContext
- 简化消息打断机制,通过取消 stream_loop_task 实现
- 移除多重回复相关功能,统一使用单一任务管理
- 优化错误处理和资源清理逻辑

BREAKING CHANGE: 移除了多重回复功能,所有流处理现在使用单一任务架构
2025-11-19 23:27:00 +08:00
Windpicker-owo
e230d1d73b 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-11-19 23:26:51 +08:00
tt-P607
d349f3bfcc feat(voice): 实现自身语音缓存以跳过ASR识别
当机器人通过TTS插件发送语音时,会自动将语音数据和对应的原始文本进行缓存。

当机器人接收到自己发送的语音消息时,会优先从缓存中直接读取文本,从而跳过调用ASR(自动语音识别)服务的步骤。

此项优化可以:
- 节省不必要的ASR资源开销和费用。
- 保证对机器人自身语音100%的识别准确性。
- 提升对自身消息的响应处理速度。
2025-11-19 23:25:31 +08:00
minecraft1024a
68d092d13a feat(plugin_system): 引入高级Prompt注入规则系统以取代旧注入点机制
引入了一套全新的、基于规则的Prompt注入系统,以取代原有的 `injection_point` 机制。这套新系统提供了更强大、更灵活的Prompt内容注入能力。

主要变更包括:
- **引入 `InjectionRule` 和 `InjectionType`**:定义了注入规则的数据结构和注入类型(如 `PREPEND`, `APPEND`, `REPLACE`, `REMOVE`, `INSERT_AFTER`),允许插件开发者精确控制注入行为。
- **重构 `PromptComponentManager`**:核心逻辑从简单地拼接字符串 (`execute_components_for`) 重构为按优先级应用注入规则 (`apply_injections`),支持正则表达式匹配和更复杂的注入操作。
- **向后兼容**:`PromptInfo` 中增加了兼容逻辑,能自动将旧的 `injection_point` 定义转换为新的 `injection_rules`,确保现有插件无需立即修改即可正常工作。
- **更新 `BasePrompt`**:废弃了 `injection_point` 属性,并推荐使用新的 `injection_rules` 属性。
- **更新示例插件**:`hello_world_plugin` 已更新,展示了新注入规则的使用方法。

BREAKING CHANGE: `BasePrompt` 中的 `injection_point` 属性已被废弃。虽然目前存在向后兼容逻辑,但未来版本将移除该属性。所有Prompt组件都应迁移至使用 `injection_rules` 以获得更强的控制力和未来的兼容性。
2025-11-19 23:25:29 +08:00
tt-P607
fe7ba2c8d8 feat(voice): 新增本地语音识别(ASR)提供商选项
新增 `voice.asr_provider` 配置项,允许用户在 "api" 和 "local" 之间选择语音识别服务。

当设置为 "local" 时,系统将通过 `local_asr` 工具(由 `stt_whisper_plugin` 插件提供)调用本地 Whisper 模型进行语音转文字。这为用户提供了一个不依赖外部 API、注重隐私的备选方案。

- 默认值仍为 "api",保持现有行为不变。
- 添加 `openai-whisper` 作为新的依赖项以支持此功能。
2025-11-19 23:25:28 +08:00
tt-P607
3bcb566a19 fix(memory): 修复记忆系统初始化逻辑,确保单例唯一性
先前,记忆系统的初始化流程存在问题,可能导致在不同位置获取到未初始化或多个不同的 MemorySystem 实例,引发潜在的运行时错误。

本次修改统一了应用的启动逻辑,在 main.py 中明确调用 `initialize_memory_system` 来初始化全局唯一的记忆系统实例。

此外,在记忆系统的关键生命周期节点(创建、初始化、获取)添加了详细的日志记录,以便于追踪实例ID,从而在未来能更好地诊断类似问题。
2025-11-19 23:25:27 +08:00
tt-P607
9ea92e26c1 fix: 增强系统健壮性,优化核心组件的错误处理
在多个核心模块中增加了前置检查和更详细的错误处理逻辑,以防止因组件初始化失败或外部数据格式不符预期而导致的运行时崩溃。

主要变更:
- **记忆系统:** 在执行记忆构建、融合和价值评估前,增加对相关引擎是否初始化的检查。优化了向量数据库初始化失败时的处理流程,并增强了向量搜索结果的解析安全性。
- **插件系统:** 统一并优化了LLM可用工具定义的获取方式,增加了错误捕获。调整了工具执行器以安全地解析LLM返回的工具调用请求。
- **向量数据库:** 当ChromaDB连接失败时,显式抛出 `ConnectionError`,使上层调用者能更好地捕获和处理该特定问题。
2025-11-19 23:25:26 +08:00
minecraft1024a
c7b97b7386 refactor(memory): 简化记忆系统架构,移除 MemoryManager
将 `get_message_collection_context` 方法从 `MemoryManager` 移动到 `MessageCollectionStorage`,并直接在 `MemorySystem` 中调用它。这一变更简化了依赖关系,并消除了 `MemoryManager` 类,使其职责更加清晰。

主要变更:
- 从 `MemoryManager` 中移除 `get_message_collection_context` 并将其功能迁移。
- 更新 `MemorySystem` 以直接使用 `MessageCollectionStorage` 来检索上下文。
- 移除 `MemoryManager` 的初始化和依赖,因为它不再需要。
- 将 `MemorySystem` 的初始化改为单例模式,以确保全局唯一实例。
2025-11-19 23:25:22 +08:00
minecraft1024a
453e31765c refactor(memory): 引入 MemoryManager 统一管理瞬时记忆
引入 `MemoryManager` 类来封装和统一处理瞬时记忆(消息集合)的检索和管理逻辑。此举将瞬时记忆的相关操作从 `MemorySystem` 中解耦,提高了代码的模块化和可维护性。

主要变更:
- 创建 `MemoryManager` 类,负责消息集合的初始化、上下文检索等。
- `MemorySystem` 现在通过 `MemoryManager` 实例来获取瞬时记忆,简化了其内部实现。
- 移除了 `MemorySystem` 中原有的、分散的瞬时记忆检索代码,使其职责更单一。
2025-11-19 23:25:20 +08:00
minecraft1024a
2200a9ff2a feat(memory): 引入基于向量的瞬时记忆系统
引入了一个新的瞬时记忆系统,该系统将短期对话片段(消息集合)存储在专门的向量数据库中,以提供更即时、更相关的上下文。

该系统通过以下组件实现:
- **MessageCollection**: 用于封装一组相关消息的数据结构。
- **MessageCollectionStorage**: 负责将消息集合向量化并存入专用的ChromaDB集合,同时管理集合的生命周期(基于数量和时间清理)。
- **MessageCollectionProcessor**: 缓冲每个聊天的消息,当达到阈值时,将它们组合成一个`MessageCollection`并交由Storage处理。
- **集成**: `MemoryManager`和`MemorySystem`已更新,将瞬时记忆无缝融合到现有的记忆检索流程中,优先展示来自当前聊天的上下文。

此外,还进行了以下调整:
- 移除`orjson.dumps`中的`ensure_ascii=False`参数,以遵循`orjson`的默认行为,该行为始终返回UTF-8字节串,从而简化了编码处理。
- 在配置文件中增加了瞬时记忆最大集合数和保留时间的选项。
2025-11-19 23:25:19 +08:00
minecraft1024a
dcab3b2a0f refactor(memory): 移除硬编码的向量数据库集合名称
将向量数据库的集合名称配置移出代码和配置文件,改为在ChromaDB客户端初始化时动态创建和管理。这提高了灵活性,并为未来支持多集合或动态集合名称奠定了基础。

- 从 `VectorStorageConfig` 中移除了 `memory_collection` 和 `metadata_collection` 字段。
- 从 `MemoryConfig` 中移除了 `vector_db_memory_collection` 和 `vector_db_metadata_collection` 配置项。
- 更新了 `bot_config_template.toml` 模板,删除了相关的集合名称和静态集合定义。
2025-11-19 23:25:18 +08:00
minecraft1024a
1a4d129d2e ~谁在写代码不加注释我就把它炒了😡😡😡😡😡~
feat(prompt): 补全了prompt类的函数注释和内联注释
2025-11-19 23:25:17 +08:00
minecraft1024a
98b43b1ecc fix(chat): 修复当用户ID为空时主人认证失败的问题
在某些情况下(例如,某些平台或匿名使用场景),用户信息中可能不包含`user_id`。之前的代码没有处理这种情况,导致在调用`permission_api.is_master`时会因`user_id`为空而引发异常。

本次修改增加了对`user_id`的空值检查。如果`user_id`不存在,将直接返回空字符串,避免不必要的权限验证和潜在的错误,从而增强了代码的健壮性。
2025-11-19 23:25:16 +08:00
Eric-Terminal
864ec3304c feat(prompt): 添加主人认证提示词功能 (#47) 2025-11-19 23:25:12 +08:00
Windpicker-owo
d13bf18cc0 fix(chat): 在私聊场景禁用引用回复功能
修改 ChatterActionManager 中的回复逻辑,在私聊场景下不设置引用回复标志,因为私聊只有两个人对话,引用回复是多余的。群聊场景仍然保持引用回复功能以帮助定位回复的目标消息。

- 私聊场景:禁用引用回复(set_reply_flag = false)
- 群聊场景:启用引用回复(set_reply_flag = true)
- 更新了相关日志输出以包含私聊状态信息
2025-11-19 23:25:11 +08:00
minecraft1024a
a234e0b8aa chore: 统一代码风格并进行现代化改造
本次提交主要包含以下内容:
- **代码风格统一**:对多个文件进行了格式化,包括移除多余的空行、调整导入顺序、统一字符串引号等,以提高代码一致性和可读性。
- **类型提示现代化**:在多个文件中将旧的 `typing` 模块类型提示(如 `Optional[T]`、`List[T]`、`Union[T, U]`)更新为现代 Python 语法(`T | None`、`list[T]`、`T | U`)。
- **f-string 格式化**:在 `scripts/convert_manifest.py` 中,将 `.format()` 调用更新为更现代和易读的 f-string `!r` 表示法。
- **文件末尾换行符**:为多个文件添加或修正了文件末尾的换行符,遵循 POSIX 标准。
2025-11-19 23:25:09 +08:00
minecraft1024a
1205fb2cc6 refactor(chat): 简化并硬编码prompt模板为s4u模式
移除了动态选择prompt模板的逻辑,直接使用`s4u_style_prompt`。这与最近移除`normal`模式并强制使用`s4u`模式的更改保持一致,简化了代码逻辑。
2025-11-19 23:25:01 +08:00
minecraft1024a
4e8825fb7c refactor(prompt): 移除 normal 模式并强制使用 s4u 模式
删除了旧的 "normal" prompt 模式及其相关逻辑,包括 prompt 模板、上下文构建函数和配置选项。现在系统将统一并强制使用 "s4u" 模式进行回复生成。

主要变更:
- 从 `default_generator.py` 中移除了 `normal_style_prompt` 模板和模式选择逻辑。
- 从 `prompt.py` 中删除了 `_build_normal_chat_context` 和 `_prepare_normal_params` 等相关函数。
- 从 `official_configs.py` 中移除了 `prompt_mode` 配置项。
- 更新了 `bot_config_template.toml` 配置文件,移除了 `prompt_mode` 选项和相关的 normal 模式上下文共享组示例。

此重构简化了 prompt 生成流程,统一了上下文处理方式,减少了代码的复杂性和维护成本。
2025-11-19 23:24:59 +08:00
tt-P607
eaa6681808 fix(chat): 修复动作执行异常时 is_replying 状态未重置的问题
在 `execute_action` 方法中引入 `try...finally` 结构,以确保无论动作执行成功与否,`is_replying` 状态最终都能被可靠地重置为 `False`。

此更改解决了在动作执行期间发生意外错误时,聊天流可能被永久锁定在“正在回复”状态的问题,从而提高了系统的健壮性。
2025-11-19 23:24:57 +08:00
Windpicker-owo
c176ea1a79 feat(chat): 统一消息格式信息处理逻辑
在多个消息处理模块中统一了 format_info 的处理方式,确保适配器支持的消息类型能够正确传递给 action_modifier:

- 在 bot.py、chat_stream.py、optimized_chat_stream.py 中新增 _prepare_additional_config 方法
- 将 format_info 嵌入到 additional_config 中,确保数据库存储一致性
- 增强 action_modifier 中的适配器类型检查逻辑,添加更详细的错误日志
- 修复 storage.py 中的 additional_config 处理逻辑,避免覆盖原始配置

这些改进确保了 Action 能够正确检查适配器支持的消息类型,避免因缺少 format_info 导致的类型检查失败。
2025-11-19 23:24:56 +08:00
minecraft1024a
7a797a1de6 refactor(core): 移除睡眠系统
由于睡眠系统存在设计缺陷、实现复杂且维护成本高,并且实际使用效果不佳,常常导致非预期的行为(如错过重要消息或在不应睡眠时睡眠),现决定将其从核心代码中完全移除。

移除内容包括:
- 删除了整个 `sleep_system` 模块及其所有相关逻辑、状态管理和定时任务。
- 清理了配置文件 `config.py` 和 `official_configs.py` 中的 `SleepSystemConfig`。
- 移除了 `main.py` 中关于睡眠系统的初始化调用。
- 清理了 `message_manager` 和 `proactive_thinker` 中对睡眠状态的检查。
- 更新了 `bot_config_template.toml` 模板文件,移除了所有睡眠系统相关的配置项。

此举旨在简化项目架构,提高系统的稳定性和可预测性。未来的相关功能可能会以更健壮、更模块化的插件形式重新实现。
2025-11-19 23:24:50 +08:00
minecraft1024a
e7f431392a refactor(sleep_system): 重构睡眠系统为单例模式并优化启动逻辑
将睡眠系统的核心组件 `SleepStateManager` 从全局变量实例化改为通过 `get_sleep_state_manager()` 函数获取的单例模式。这一改变解决了模块间的循环导入问题,并提升了代码的组织性和可维护性。

主要变更:
- 引入 `get_sleep_state_manager` 函数以惰性加载方式创建和返回 `SleepStateManager` 单例。
- 将 `sleep_logic.py` 中重复的作息时间计算逻辑提取到新的 `utils.py` 模块中,以实现代码复用。
- 在 `SleepStateManager` 初始化时增加 `_refresh_sleep_state` 方法,用于在程序启动时校准睡眠状态,确保状态与当前时间一致,防止因程序重启导致的状态错乱。
- 更新所有调用点,使用新的 `get_sleep_state_manager()` 函数来访问状态管理器。
2025-11-19 23:24:48 +08:00
Windpicker-owo
01f0a3ca4f feat(chat): 增强消息存储和动作类型检查功能
- 在消息存储中增加additional_config字段支持,用于存储格式信息和其他配置
- 改进动作修改器的类型检查逻辑,新增_get_adapter_supported_output_types方法
- 通过解析additional_config中的format_info动态获取适配器支持的输出类型
- 添加对字符串和字典格式additional_config的兼容处理
- 默认支持NapCat适配器的常见消息类型(text、image、voice等)
2025-11-19 23:24:46 +08:00
minecraft1024a
92f5f9bbd9 feat(plugin_system): 引入高级Prompt注入规则系统以取代旧注入点机制
引入了一套全新的、基于规则的Prompt注入系统,以取代原有的 `injection_point` 机制。这套新系统提供了更强大、更灵活的Prompt内容注入能力。

主要变更包括:
- **引入 `InjectionRule` 和 `InjectionType`**:定义了注入规则的数据结构和注入类型(如 `PREPEND`, `APPEND`, `REPLACE`, `REMOVE`, `INSERT_AFTER`),允许插件开发者精确控制注入行为。
- **重构 `PromptComponentManager`**:核心逻辑从简单地拼接字符串 (`execute_components_for`) 重构为按优先级应用注入规则 (`apply_injections`),支持正则表达式匹配和更复杂的注入操作。
- **向后兼容**:`PromptInfo` 中增加了兼容逻辑,能自动将旧的 `injection_point` 定义转换为新的 `injection_rules`,确保现有插件无需立即修改即可正常工作。
- **更新 `BasePrompt`**:废弃了 `injection_point` 属性,并推荐使用新的 `injection_rules` 属性。
- **更新示例插件**:`hello_world_plugin` 已更新,展示了新注入规则的使用方法。

BREAKING CHANGE: `BasePrompt` 中的 `injection_point` 属性已被废弃。虽然目前存在向后兼容逻辑,但未来版本将移除该属性。所有Prompt组件都应迁移至使用 `injection_rules` 以获得更强的控制力和未来的兼容性。
2025-11-19 23:24:45 +08:00
minecraft1024a
f1dfe64f88 chore: 代码格式化与类型注解优化
对项目中的多个文件进行了代码风格调整和类型注解更新。

- 使用 ruff 工具对代码进行自动格式化,主要包括:
    - 统一 import 语句的顺序和风格。
    - 移除未使用的 import。
    - 调整代码间距和空行。
- 将部分 `Optional[str]` 和 `List[T]` 等旧式类型注解更新为现代的 `str | None` 和 `list[T]` 语法。
- 修复了一些小的代码风格问题,例如将 `f'...'` 更改为 `f"..."`。
2025-11-19 23:24:42 +08:00
tt-P607
fcb11e464d fix(chat): 修复戳一戳等notice事件无法触发聊天流程的问题
该修复解决了机器人对“戳一戳”等 notice 事件没有响应的 bug。

问题根源在于 MessageManager 在处理 notice 消息时,仅将其添加到全局通知管理器后便直接返回,导致消息无法进入后续的聊天处理流程,即使相关配置已开启。

主要变更:

修改 Elysia/Bot/src/chat/message_manager/message_manager.py,在处理 notice 消息时,增加对 bot_config.toml 中 enable_notice_trigger_chat 配置的判断。只有在该配置为 false 时才中断流程,否则将消息继续送入聊天上下文。
修复了 _get_notice_ttl 函数中因 notice_type 可能为 None 而引发的潜在 TypeError。
将 Bot/src/config/official_configs.py 中 enable_notice_trigger_chat 的默认值从 False 修改为 True,以提供更合理的开箱即用体验。
2025-11-19 23:24:36 +08:00
tt-P607
ebf283a891 feat(emoji): 优化表情识别提示词以提升描述质量
重构了表情包识别和描述生成的提示词,以获得更详尽、准确且符合网络文化的描述。同时调整了TTS插件的错误处理机制。

主要变更:
- **表情识别提示词(Prompt)优化**:
  - 为静态和动态表情包设计了更结构化的描述要求,引导模型识别主题、核心元素、角色出处、网络梗以及图片内文字。
  - 强调了对特殊网络文化符号(如“滑稽”表情)的准确识别,避免泛化描述。
  - 优化了“点睛之笔”精炼描述的提示词,使其能更好地结合上下文信息,生成更自然的描述。

- **TTS插件错误处理重构**:
  - 移除了`TTSVoiceAction`中合成失败时向用户发送动态错误消息的逻辑。
  - 改为静默失败,仅在后台记录详细的错误日志,避免在语音服务暂时不可用时对用户造成干扰。
2025-11-19 23:24:34 +08:00
tt-P607
63af866e3d feat(plan): 为月度计划添加软删除并优化状态提示词
为 `MonthlyPlan` 数据库模型增加 `is_deleted` 字段,以支持软删除功能,避免数据直接丢失。

同时,统一并优化了注入到AI上下文中的当前日程活动提示词,指导模型仅在被直接询问时才提及自身状态,使对话更加自然流畅。
2025-11-19 23:24:32 +08:00
Windpicker-owo
87e0a7f079 feat(chat): 改进异步任务管理和取消处理
- 在 StreamLoopManager、MessageManager 和 DefaultReplyer 中增加子任务跟踪机制
- 统一处理 asyncio.CancelledError 异常,确保任务取消时能正确清理子任务
- 使用 child_tasks 集合管理子任务生命周期,防止任务泄漏
- 优化记忆存储等后台任务的创建方式,支持优雅取消
- 改进错误处理逻辑,确保异常情况下也能清理子任务资源
2025-11-19 23:24:30 +08:00
tt-P607
786e4572bc chore(chat): 移除提示词注入中的冗余日志 2025-11-19 23:24:27 +08:00
tt-P607
90d010f1f0 fix(chat): 防止在生成回复时触发消息打断
通过在聊天流上下文中引入 `is_replying` 状态标志,解决了在LLM生成回复期间可能被新消息错误打断的问题。

- 在调用LLM生成内容前将 `is_replying` 设置为 `True`。
- 在消息打断检查逻辑中,如果 `is_replying` 为 `True` 则跳过检查。
- 使用 `finally` 块确保无论生成成功或失败,`is_replying` 状态都会被重置为 `False`。

这确保了回复生成的原子性,防止了因用户快速连续发送消息而导致的自我打断。
2025-11-19 23:24:18 +08:00
tt-P607
54cfbacefa feat(chat): 优化消息打断逻辑,仅限触发用户
为了防止群聊中其他用户的消息意外中断正在进行的AI多重回复,引入了“触发用户”机制。

- 现在,只有发起该轮对话的用户发送的新消息才可能触发打断。
- 此外,表情包和Emoji等非文本消息将被忽略,不再触发打断,以提高交互的流畅性。
2025-11-19 23:24:16 +08:00
tt-P607
02dfed673f fix(knowledge): 修复知识库嵌入生成中的并发处理问题
原有的多线程 (`ThreadPoolExecutor`) 嵌入生成方式已被重构为完全异步的并发模型。

旧的实现为每个线程创建新的 `asyncio` 事件循环来运行协程,这种模式效率低下且不稳定,容易引发难以调试的并发问题。

新的实现统一在单个事件循环中处理所有异步任务,使用 `asyncio.Semaphore` 控制并发等级,并通过 `asyncio.gather` 高效地执行批量嵌入请求。此更改显著提高了代码的稳定性、性能和可维护性。

BREAKING CHANGE: `EmbeddingStore` 和 `EmbeddingManager` 中的多个核心方法(如 `store_new_data_set`, `check_embedding_model_consistency`, `batch_insert_strs` 等)已从同步方法更改为异步方法。所有对这些方法的调用现在都必须使用 `await`。
2025-11-19 23:24:15 +08:00
tt-P607
3eaa0f739a feat(chat): 为知识库段落增加相关性阈值过滤
根据 `qa_paragraph_threshold` 配置,跳过相关性得分低于阈值的知识库段落。

这可以防止低相关性的知识污染上下文,从而提高生成回答的质量和准确性。
2025-11-19 23:24:14 +08:00
tt-P607
4f277c1eed fix(chat): 防止回复媒体内容处理失败的消息
机器人此前会将 "[图片(描述生成失败)]" 等系统提示误解为用户消息并进行回复,导致异常的对话行为。

本次修复通过两个层面解决此问题:
1. 在 `ChatBot` 中添加硬编码过滤器,作为第一道防线,直接静默处理包含失败关键词的消息。
2. 更新 Planner Prompt,明确禁止 AI 回复此类消息,作为第二道保险,确保系统行为的健壮性。
2025-11-19 23:24:13 +08:00
tt-P607
c5bd89d6f5 feat(chat): 在群组静默列表中忽略图片和表情包
原有的群组静默功能只对非@的文本消息生效,导致在静默群组中发送的图片和表情包依然会被消息管理器处理。

本次更新将静默逻辑扩展,现在也会忽略图片和表情包类型的消息,从而更彻底地实现群组消息的静默,减少不必要的资源消耗。
2025-11-19 23:24:12 +08:00
tt-P607
a892642b7d fix(chat): 修复消息处理中的潜在空指针和类型错误
为多个关键步骤增加了健壮性检查,以防止在处理消息时因意外的空值或类型不匹配而导致程序崩溃。

主要修复包括:
- 在记录消息日志前,检查 `user_info` 是否存在。
- 在判断事件是否中断前,检查事件处理结果 `result` 是否为 None。
- 在获取消息时间戳前,使用 `hasattr` 确认 `time` 属性的存在。
- 在检查群组静默状态时,将 `group_id` 转换为字符串以匹配配置列表。
2025-11-19 23:24:11 +08:00
tt-P607
d0c46cdf56 feat(emoji): 优化表情分析提示词以提升描述准确性
本次更新针对表情包描述生成的两个关键环节优化了提示词(Prompt),以提高生成描述的质量和信息完整度。

1.  在初始描述生成中,新增了强制性规则,要求模型必须完整转述图片中包含的清晰文字,确保关键文本信息不被遗漏。
2.  重构了“点睛之笔”的精炼提示词,使其目标更明确(为AI后续处理服务),规则更具体(平衡客观与情感、包含核心文字等),并增加了示例,旨在生成更稳定、结构化的精炼描述。
2025-11-19 23:24:09 +08:00
tt-P607
5786b84ad4 feat(chat): 新增群组静默列表以忽略非@消息
引入了 `mute_group_list` 配置项。对于被添加到此列表的群组,机器人将只在被明确@或回复时才处理消息,从而避免在活跃群组中造成不必要的打扰。

- 在 `MessageReceiveConfig` 中添加 `mute_group_list` 选项。
- 在消息接收逻辑中实现检查,如果消息来自静默群组且不是@或回复,则跳过消息管理器处理。
- 调整了 `is_mentioned` 的计算时机,移至消息内容处理之后,以确保静默判断的准确性。
- 附带修复了处理适配器响应时因数据非字典类型导致的潜在错误。
2025-11-19 23:24:08 +08:00
tt-P607
391204f025 refactor(chat): 简化 GIF 抽帧逻辑为均匀采样
旧的基于均方误差(MSE)的 GIF 抽帧逻辑过于复杂,其参数难以调整且结果不可预测。

现在,该逻辑被重构为一个简单的均匀采样算法,固定抽取 4 帧来代表整个动画。这不仅简化了代码、移除了不必要的参数,还确保了对于任何 GIF 都能生成一致且有代表性的预览图,同时提升了处理性能。

BREAKING CHANGE: `transform_gif` 函数签名已更改,移除了 `similarity_threshold` 和 `max_frames` 参数。
2025-11-19 23:24:05 +08:00
tt-P607
c0d2ddab5a fix(emoji): 为表情包描述生成增加 VLM 调用重试机制
VLM 在生成表情包描述时,其 API 调用可能因网络波动或服务暂时不可用而失败。此前的实现会在首次调用失败后直接中断流程。

为了提高该功能的健壮性,本次提交引入了重试逻辑:
- 在调用 VLM 生成描述时,最多尝试 3 次。
- 如果调用失败或返回空结果,将记录错误并等待 1 秒后重试。
- 这能有效应对暂时性网络或服务问题,显著提高表情包描述生成的成功率。
2025-11-19 23:24:03 +08:00