优化表达方式学习

This commit is contained in:
LuiKlee
2025-12-16 11:38:56 +08:00
parent 8c451e42fb
commit c3e2e713ef
9 changed files with 526 additions and 260 deletions

View File

@@ -0,0 +1,60 @@
# StyleLearner 资源上限开关(默认开启)
## 概览
StyleLearner 支持资源上限控制,用于约束风格容量与清理行为。开关默认 **开启**,以防止模型无限膨胀;可在运行时动态关闭。
## 开关位置与用法(务必看这里)
开关在 **代码层**,默认开启,不依赖配置文件。
1) **全局运行时切换(推荐)**
路径:`src/chat/express/style_learner.py` 暴露的单例 `style_learner_manager`
```python
from src.chat.express.style_learner import style_learner_manager
# 关闭资源上限(放开容量,谨慎使用)
style_learner_manager.set_resource_limit(False)
# 再次开启资源上限
style_learner_manager.set_resource_limit(True)
```
- 影响范围:实时作用于已创建的全部 learner逐个同步 `resource_limit_enabled`)。
- 生效时机:调用后立即生效,无需重启。
2) **构造时指定(不常用)**
- `StyleLearner(resource_limit_enabled: True|False, ...)`
- `StyleLearnerManager(resource_limit_enabled: True|False, ...)`
用于自定义实例化逻辑(通常保持默认即可)。
3) **默认行为**
- 开关默认 **开启**,即启用容量管理与清理。
- 没有配置文件项;若需持久化开关状态,可自行在启动代码中显式调用 `set_resource_limit`。
## 资源上限行为(开启时)
- 容量参数(每个 chat
- `max_styles = 2000`
- `cleanup_threshold = 0.9`≥90% 容量触发清理)
- `cleanup_ratio = 0.2`(清理低价值风格约 20%
- 价值评分结合使用频率log 平滑)与最近使用时间(指数衰减),得分低者优先清理。
- 仅对单个 learner 的容量管理生效LRU 淘汰逻辑保持不变。
> ⚙️ 开关作用面:
> - **开启**:在 add_style 时会检查容量并触发 `_cleanup_styles`;预测/学习逻辑不变。
> - **关闭**:不再触发容量清理,但 LRU 管理器仍可能在进程层面淘汰不活跃 learner。
## I/O 与健壮性
- 模型与元数据保存采用原子写(`.tmp` + `os.replace`),避免部分写入。
- `pickle` 使用 `HIGHEST_PROTOCOL`,并执行 `fsync` 确保落盘。
## 兼容性
- 默认开启,无需修改配置文件;关闭后行为与旧版本类似。
- 已有模型文件可直接加载,开关仅影响运行时清理策略。
## 何时建议开启/关闭
- 开启(默认):内存/磁盘受限,或聊天风格高频增长,需防止模型膨胀。
- 关闭:需要完整保留所有历史风格且资源充足,或进行一次性数据收集实验。
## 监控与调优建议
- 监控:每 chat 风格数量、清理触发次数、删除数量、预测延迟 p95。
- 如清理过于激进:提高 `cleanup_threshold` 或降低 `cleanup_ratio`。
- 如内存/磁盘依旧偏高:降低 `max_styles`,或增加定期持久化与压缩策略。