2.1 KiB
2.1 KiB
表情系统重构说明
日期:2025-12-15
目标
- 拆分单体的
emoji_manager.py,将实体、常量、文件工具解耦。 - 减少扫描/注册期间的事件循环阻塞。
- 保留现有行为(LLM/VLM 流程、容量替换、缓存查找),同时提升可维护性。
新结构
src/chat/emoji_system/emoji_constants.py:共享路径与提示/数量上限。src/chat/emoji_system/emoji_entities.py:MaiEmoji(哈希、格式检测、入库/删除、缓存失效)。src/chat/emoji_system/emoji_utils.py:目录保证、临时清理、增量文件扫描、DB 行到实体转换。src/chat/emoji_system/emoji_manager.py:负责完整性检查、扫描、注册、VLM/LLM 描述、替换与缓存,现委托给上述模块。src/chat/emoji_system/README.md:快速使用/生命周期指引。
行为变化
- 完整性检查改为游标+批量增量扫描,每处理 50 个让出一次事件循环。
- 循环内的重文件操作(exists、listdir、remove、makedirs)通过
asyncio.to_thread释放主循环。 - 目录扫描使用
os.scandir(经list_image_files),减少重复 stat,并返回文件列表与是否为空。 - 快速查找:加载时重建
_emoji_index,增删时保持同步;get_emoji_from_manager优先走索引。 - 注册与替换流程在更新索引的同时,异步清理失败/重复文件。
迁移提示
- 现有调用继续使用
get_emoji_manager()与EmojiManagerAPI,外部接口未改动。 - 如曾直接从
emoji_manager引入常量或工具,请改为从emoji_constants、emoji_entities、emoji_utils引入。 - 依赖同步文件时序的测试/脚本可能观察到不同的耗时,但逻辑等价。
后续建议
- 为
list_image_files、clean_unused_emojis、完整性扫描游标行为补充单测。 - 将 VLM/LLM 提示词模板外置为配置,便于迭代。
- 暴露扫描耗时、清理数量、注册延迟等指标,便于观测。
- 为
replace_a_emoji的 LLM 调用添加重试上限,并记录 prompt/决策日志以便审计。