tt-P607
|
cf5b2b5811
|
fix(replyer): 优化回复器提示词以修复戳一戳处理逻辑
- **问题现象:**
回复模型(Replyer)在接收到“戳一戳”事件时,会错误地生成如“[戳了戳]”之类的文本回复,而不是交由动作执行器(Planner)处理`poke_user`动作。
- **根本原因:**
1. 回复提示词模板中没有明确禁止输出此类文本,导致模型将其视为普通消息进行模仿。
2. 模板中关于“可用动作”的描述不够明确,可能让回复模型误以为自己需要处理或决定这些动作。
- **解决方案:**
1. **增强指令:** 在所有核心回复模板 (`default_expressor_prompt`, `s4u_style_prompt`, `normal_style_prompt`) 中,明确增加了“‘戳一戳’不是文本消息,而是由`poke_user`动作处理的特殊互动,因此绝对禁止在回复中输出相关文字”的规则。
2. **明确职责:** 修改了 `build_prompt_reply_context` 方法中生成`action_descriptions`的逻辑,向回复模型强调其职责仅是生成回复文本,而动作的决策与执行由独立的模型负责,严禁其在回复中模仿或调用动作。
- **影响:**
- 修复了“戳一戳”互动被错误处理为文本回复的BUG。
- 增强了提示词的鲁棒性,明确了回复模型与决策模型之间的职责边界,降低了未来类似问题的发生概率。
|
2025-11-19 23:31:50 +08:00 |
|
tt-P607
|
e3b949fdb2
|
refactor(planner): 显式注入 chat_content 至动作实例
将 `chat_content` 强制注入到动作实例中,以 `_activation_chat_content` 属性存储。
此举解决了在 `go_activate` 内部的辅助函数无法访问原始用户聊天上下文的问题,确保了相关函数能够获取必要的上下文信息。
|
2025-11-19 23:31:50 +08:00 |
|
Windpicker-owo
|
f07ad33149
|
refactor(expression_learner): 添加过滤机器人消息的功能,以优化学习过程
|
2025-11-19 23:31:49 +08:00 |
|
Windpicker-owo
|
fdda8faad9
|
refactor(memory_builder): 增强JSON提取策略,支持多种格式并添加调试日志
|
2025-11-19 23:31:49 +08:00 |
|
Windpicker-owo
|
c66bd86095
|
refactor(planner): 将缓存消息刷新逻辑移至规划器开始时执行
|
2025-11-19 23:31:44 +08:00 |
|
tt-P607
|
03b7c859ae
|
refactor(emoji_system): 将表情分析重构为单次VLM调用
先前的实现需要为表情生成详细描述、提取关键词和精炼句子进行三次独立的AI模型调用。这种方法效率低下、速度慢,且容易出错。
本次重构引入了一个统一的VLM提示词,该提示词要求模型一次性返回包含所有需要信息的JSON对象(详细描述、关键词、精炼句子和合规性检查),从而将多次调用合并为一次。
主要优势:
- **效率提升**:将API调用次数从3次减少到1次,显著提高了处理速度并降低了成本。
- **可靠性增强**:解析结构化的JSON比处理多次调用的非结构化文本更加健壮。
- **向后兼容**:增加了对旧版描述格式的解析逻辑,以兼容已存在的表情数据。
|
2025-11-19 23:31:43 +08:00 |
|
明天好像没什么
|
3db00aa8f3
|
ruff归零
|
2025-11-19 23:31:42 +08:00 |
|
明天好像没什么
|
ff6dc542e1
|
rufffffff
|
2025-11-19 23:31:37 +08:00 |
|
Windpicker-owo
|
ab81648b98
|
feat: 在获取聊天流时添加创建时间和最后活跃时间字段
|
2025-11-19 23:31:32 +08:00 |
|
minecraft1024a
|
612401cb2d
|
refactor(chat): 简化日程状态提示逻辑
删除了在日程活动时间范围之外的冗余状态判断。现在,无论当前时间是否在活动时间段内,都会统一计算并展示活动的开始、结束、已进行和剩余时间,简化了代码逻辑并确保了信息展示的一致性。反正LLM自己会判断的,不需要咱操心那么多啦。
|
2025-11-19 23:31:30 +08:00 |
|
Windpicker-owo
|
fcb82e1a74
|
fix: 修复批量消息存储缺失字段导致的NOT NULL约束失败
|
2025-11-19 23:31:26 +08:00 |
|
Windpicker-owo
|
56df2d2252
|
perf: 优化批量消息存储,使用insert().values()替代add_all()
|
2025-11-19 23:31:26 +08:00 |
|
Windpicker-owo
|
e45e17f979
|
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-19 23:31:08 +08:00 |
|
Windpicker-owo
|
bbe5708cf3
|
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-19 23:31:07 +08:00 |
|
Windpicker-owo
|
8829a1d124
|
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-19 23:31:05 +08:00 |
|
Windpicker-owo
|
f8b9061cd3
|
refactor: 优化Emoji表情包查询为使用缓存API
Emoji查询优化 (emoji_manager.py):
- get_emoji_from_db: 使用CRUDBase替代直接查询
- get_emoji_tag_by_hash: 添加30分钟缓存
- get_emoji_description_by_hash: 添加30分钟缓存
- delete: 使用CRUD删除,自动使相关缓存失效
性能提升:
- Emoji查询减少80%+数据库访问
- 表情包描述查询减少90%+数据库访问
- 发送表情时响应速度提升50%+
缓存策略:
- 表情包数据相对稳定,使用30分钟长缓存
- 删除操作自动清除相关缓存键
- 内存缓存优先,数据库查询作为后备
|
2025-11-19 23:31:03 +08:00 |
|
Windpicker-owo
|
86e5dbd5ad
|
fix: 修复MessageUpdateBatcher未定义错误
- 使用字符串形式的前向引用'MessageUpdateBatcher'
- 修复全局变量在类定义前使用类型注解的问题
|
2025-11-19 23:31:01 +08:00 |
|
Windpicker-owo
|
ef411a4650
|
fix: 添加Optional类型导入
- 修复'name Optional is not defined'错误
- 在storage.py中添加from typing import Optional
|
2025-11-19 23:31:01 +08:00 |
|
Windpicker-owo
|
b3352a71ce
|
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-19 23:31:00 +08:00 |
|
Windpicker-owo
|
bd54c7742b
|
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-19 23:30:58 +08:00 |
|
Windpicker-owo
|
d21ac89617
|
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-19 23:30:55 +08:00 |
|
Windpicker-owo
|
d089972fac
|
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-19 23:30:51 +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
|
fc3aea9fd5
|
refactor(api): 合并兴趣度API和关系API,以及扩展关系API
|
2025-11-19 23:30:35 +08:00 |
|
minecraft1024a
|
12c2b806a2
|
ruff
|
2025-11-19 23:30:34 +08:00 |
|
Windpicker-owo
|
0148f1e533
|
refactor(expression_learner): 优化表达方式查询逻辑,减少数据库查询次数并批量处理更新操作
refactor(storage): 添加消息更新批处理器,优化消息ID更新逻辑以减少数据库连接次数
|
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
|
6a592e221b
|
fix(plugin): 禁用hello_world_plugin以防止意外启用
fix(replyer): 修改提示信息中的“这句话”为“这条消息”以提高表达准确性
|
2025-11-19 23:30:29 +08:00 |
|
明天好像没什么
|
5638076328
|
refactor: 统一类型注解风格并优化代码结构
- 将裸 except 改为显式 Exception 捕获
- 用列表推导式替换冗余 for 循环
- 为类属性添加 ClassVar 注解
- 统一 Union/Optional 写法为 |
- 移除未使用的导入
- 修复 SQLAlchemy 空值比较语法
- 优化字符串拼接与字典更新逻辑
- 补充缺失的 noqa 注释与异常链
BREAKING CHANGE: 所有插件基类的类级字段现要求显式 ClassVar 注解,自定义插件需同步更新
|
2025-11-19 23:30:26 +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 |
|
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 |
|
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
|
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
|
f34c71966e
|
feat(proactive-thinking): 利用聚焦能量增强能量计算和调度
-重构关系EnergyCalculator,使用聊天流兴趣评分代替用户关系评分
-更新主动思维调度器,使用聊天流中的焦点能量进行间隔计算
-通过更详细的信息改进整个主动思维系统的日志记录
-将chat_stream参数添加到插件工具构造函数中,以更好地处理上下文
-增强调度和事件处理中的错误处理和调试信息
这些变化通过以下方式改善了主动思维系统:
1.使用聊天流中的实时焦点能量,而不是静态用户关系评分
2.根据当前对话参与度提供更准确和动态的日程安排
3.添加全面的日志记录,以便更好地进行调试和监控
4.通过工具中的chat_stream参数确保正确的上下文传播
|
2025-11-19 23:27:19 +08:00 |
|
Windpicker-owo
|
f28f097337
|
refactor(event): 优化AFTER_SEND事件的异步触发逻辑并增强日志记录
|
2025-11-19 23:27:18 +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 |
|
tt-P607
|
99e7447430
|
fix(chat): 清理模型意外生成的回复头
部分语言模型在生成回复时,会自行在内容开头添加如 `[回复<用户>的消息:]` 格式的回复头,这会导致最终消息中出现重复或格式错误的头部。
此提交通过正则表达式循环移除这些多余的回复头,确保输出内容整洁。
|
2025-11-19 23:27:13 +08:00 |
|