Windpicker-owo
|
a1d60ab026
|
启用数据库预加载器,清理日志
|
2025-12-08 17:17:53 +08:00 |
|
Windpicker-owo
|
fbc37bbcaf
|
refactor(logging): 简化日志记录,移除冗余调试信息
delete(connection_pool): 移除连接池管理器相关代码
|
2025-12-07 15:19:12 +08:00 |
|
Windpicker-owo
|
06a45b3639
|
refactor: 移除对 MySQL 的支持,更新文档和配置以仅支持 SQLite 和 PostgreSQL
|
2025-12-04 23:30:43 +08:00 |
|
tt-P607
|
2671a6e7e5
|
feat(profile):对用户关系和分析系统进行重构,采用结构化数据和异步更新
此提交完全重写了用户关系和分析系统,创建了一个更强大、详细和响应式的框架。旧系统已被弃用,取而代之的是一个集中式的`UserRelationships`模型。
主要变更:
1. ‌**增强数据库模型(`UserRelationships`):**‌
- 添加`impression_text`用于长期、叙述式印象。
- 引入`key_facts`(JSON)存储结构化数据如生日、工作和位置。
- 添加`relationship_stage`跟踪关系进展(如陌生人、朋友、挚友)。
- 添加`first_met_time`和`last_impression_update`的时间戳。
2. ‌**重设计`UserProfileTool`:**‌
- 工具的用途被限定为仅捕捉重要新信息,防止用于小聊。
- 更新现在在后台异步处理,确保机器人回复不被延迟。
- 引入`key_info_type`和`key_info_value`参数供LLM提交结构化事实。
3. ‌**复杂的印象和情感逻辑:**‌
- 关系追踪LLM现在分析最近聊天历史生成更丰富、更上下文的印象。
- 用渐进的`affection_change`(最大±0.03)取代直接情感分数设置,使关系发展更真实。
4. ‌**数据源整合:**‌
- `RelationshipFetcher`重构为仅依赖`UserRelationships`表作为唯一数据源。
- 简化`get_user_relationship` API并移除其缓存,确保分析的实时数据访问。
破坏性变更:`UserProfileTool`已重设计,新增参数(`key_info_type`、`key_info_value`)并改变用途。移除`affection_score`参数。此外,`get_user_relationship`数据库API签名简化为仅接受`user_id`。
|
2025-12-03 16:53:40 +08:00 |
|
Windpicker-owo
|
bcdd987e4c
|
feat(statistic): 优化内存使用,添加分批查询和统计处理上限
feat(typo_generator): 实现单例模式以复用拼音字典和字频数据
feat(query): 添加分批迭代获取结果的功能,优化内存使用
|
2025-12-02 12:45:10 +08:00 |
|
拾风
|
28c54dbec6
|
Merge branch 'dev' into feature/kfc
|
2025-12-01 16:06:47 +08:00 |
|
Windpicker-owo
|
fc85338d0b
|
feat: 更新消息管理和数据库操作日志,增强调试信息
|
2025-11-30 15:13:01 +08:00 |
|
ikun-11451
|
acafc074b1
|
依旧修pyright喵喵喵~
|
2025-11-29 22:20:55 +08:00 |
|
ikun-11451
|
72e7492953
|
依旧修pyright喵~
|
2025-11-29 21:26:42 +08:00 |
|
Windpicker-owo
|
2bd7e93af7
|
fix: 更新数据库会话管理,确保事务在正常退出时自动提交,并在异常时安全回滚
|
2025-11-28 13:24:41 +08:00 |
|
Windpicker-owo
|
3538716515
|
fix: 更新版本号至 0.13.0,增强数据库迁移功能,注册通知事件处理
|
2025-11-27 22:37:50 +08:00 |
|
Windpicker-owo
|
43483b934e
|
feat: 更新机器人配置并添加数据库迁移脚本
- 将bot_config_template.toml中的版本升级至7.9.0
- 增强数据库配置选项以支持PostgreSQL
- 引入一个新脚本,用于在SQLite、MySQL和PostgreSQL之间迁移数据
- 实现一个方言适配器,用于处理特定于数据库的行为和配置
|
2025-11-27 18:45:01 +08:00 |
|
Windpicker-owo
|
0908fb50a0
|
优化日志
|
2025-11-26 21:16:16 +08:00 |
|
Windpicker-owo
|
6ecf5a36f2
|
增强聊天管理器和数据库API,添加自动注册和异步清理功能,优化模型转换为字典的逻辑
|
2025-11-20 16:48:18 +08:00 |
|
Windpicker-owo
|
03c80a08fb
|
优化缓存条目大小估算,添加向量存储标记,清理待处理消息逻辑
|
2025-11-20 12:17:43 +08:00 |
|
拾风
|
0cb51674b0
|
Potential fix for code scanning alert no. 26: Use of a broken or weak cryptographic hashing algorithm on sensitive data
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
|
2025-11-13 21:04:02 +08:00 |
|
拾风
|
589256aff5
|
Potential fix for code scanning alert no. 15: Use of a broken or weak cryptographic hashing algorithm on sensitive data
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
|
2025-11-13 20:54:42 +08:00 |
|
minecraft1024a
|
e1622ca6be
|
refactor(config): 移除废弃的数据库配置模块
旧的数据库配置模块 `src/common/database/config` 已被完全移除。该模块已被标记为废弃,其功能已统一整合到 `global_config` 中。
本次重构旨在:
- 简化代码库,消除冗余和过时的文件。
- 统一配置管理,提高可维护性。
此外,对 `AttentionOptimizer` 中的类变量添加了 `ClassVar` 类型注解,以增强代码的清晰度和类型安全性。
|
2025-11-13 12:51:42 +08:00 |
|
minecraft1024a
|
0e1e9935b2
|
style: 统一代码风格并采用现代化类型注解
对整个代码库进行了一次全面的代码风格清理和现代化改造,主要包括:
- 移除了所有文件中多余的行尾空格。
- 将类型提示更新为 PEP 585 和 PEP 604 引入的现代语法(例如,使用 `list` 代替 `List`,使用 `|` 代替 `Optional`)。
- 清理了多个模块中未被使用的导入语句。
- 移除了不含插值变量的冗余 f-string。
- 调整了部分 `__init__.py` 文件中的 `__all__` 导出顺序,以保持一致性。
这些改动旨在提升代码的可读性和可维护性,使其与现代 Python 最佳实践保持一致,但未修改任何核心逻辑。
|
2025-11-12 12:49:40 +08:00 |
|
Windpicker-owo
|
d007b98f5c
|
fix(cache-manager): 修复类型注解,使用Optional以提高代码可读性和一致性
|
2025-11-08 22:34:25 +08:00 |
|
Windpicker-owo
|
04c6c204e8
|
fix(cache-manager): 修复并行获取缓存统计信息和内存使用,避免死锁和重复计数
fix(scheduler): 改进调度任务的多阶段取消机制,彻底避免死锁风险
|
2025-11-08 22:17:12 +08:00 |
|
Windpicker-owo
|
98bfa05b96
|
feat(scheduler): 新增死锁检测器,改进任务取消机制,优化异步通知
|
2025-11-08 18:20:00 +08:00 |
|
Windpicker-owo
|
96dbb8fc55
|
fix(config): 增加缓存生存时间和最大内存占用限制
|
2025-11-08 11:03:01 +08:00 |
|
明天好像没什么
|
c8d7c09625
|
ruff
|
2025-11-07 21:01:45 +08:00 |
|
Windpicker-owo
|
eeb77e0e3c
|
feat(emoji): 使用QueryBuilder优化数据库查询并启用缓存
|
2025-11-03 15:36:30 +08:00 |
|
Windpicker-owo
|
4e2b598164
|
feat(cache): 提升内存管理与监控能力
- 在CacheManager中添加健康监控系统,并提供详细的内存统计信息
- 使用新的memory_utils模块实现精确的内存估算
- 添加基于大小的缓存条目限制,以防止过大项目
- 通过去重内存计算优化缓存统计
- 在MultiLevelCache中添加过期条目的自动清理功能
- 增强批处理调度器缓存功能,支持LRU驱逐策略和内存追踪
- 更新配置以支持最大项目大小限制
- 添加全面的内存分析文档和工具
重大变更:CacheManager 的默认 TTL 参数现改为 None 而非 3600。数据库兼容层默认禁用缓存,以防止旧版代码过度使用缓存。
|
2025-11-03 15:18:00 +08:00 |
|
Windpicker-owo
|
99785d09ad
|
feat(cache): 添加自定义TTL支持和内存限制配置
|
2025-11-02 13:25:39 +08:00 |
|
明天好像没什么
|
30658afdb4
|
ruff归零
|
2025-11-01 21:32:41 +08:00 |
|
明天好像没什么
|
cb97b2d8d3
|
rufffffff
|
2025-11-01 21:10:01 +08:00 |
|
Windpicker-owo
|
2aeb06f708
|
fix: 修复批处理中的多次commit问题,bulk_create后清除缓存
|
2025-11-01 17:31:31 +08:00 |
|
Windpicker-owo
|
029d133e48
|
fix(critical): 在session内部完成字典转换,彻底解决detached对象greenlet错误
|
2025-11-01 17:27:40 +08:00 |
|
Windpicker-owo
|
a352c69043
|
fix(critical): 修复SQLite事务未提交的严重bug - 在connection_pool.get_session()中添加自动commit
|
2025-11-01 17:19:05 +08:00 |
|
Windpicker-owo
|
a43ed42fb2
|
perf: 使用列表推导式替换循环 - 优化group_by性能
|
2025-11-01 17:07:11 +08:00 |
|
Windpicker-owo
|
cabaf74194
|
style: ruff自动格式化修复 - 修复180个空白行和格式问题
|
2025-11-01 17:06:40 +08:00 |
|
Windpicker-owo
|
d187174353
|
feat: 实现方案A - 缓存字典而非SQLAlchemy对象
核心改进:
- 添加 _model_to_dict() 和 _dict_to_model() 辅助函数
- CRUD.get/get_by/get_multi 现在缓存字典而非对象
- QueryBuilder.first/all 现在缓存字典而非对象
- 从缓存恢复时重建detached对象,所有字段已加载
优势:
- 彻底避免'not bound to Session'错误
- 缓存数据独立于Session生命周期
- 对象反序列化后所有字段可直接访问
- 提高缓存可靠性和数据可用性
技术细节:
- 缓存层存储纯字典数据(可序列化)
- 查询时在session内预加载所有列
- 返回前转换为字典并缓存
- 缓存命中时从字典重建对象
- 重建的对象虽然detached但所有字段已填充
|
2025-11-01 16:50:50 +08:00 |
|
Windpicker-owo
|
fa6cf44697
|
fix: QueryBuilder预加载列避免detached对象lazy loading
- 在QueryBuilder.first()和all()中预加载所有列
- 防止在session外访问属性导致greenlet_spawn错误
- 与CRUD层修复保持一致的模式
|
2025-11-01 16:30:05 +08:00 |
|
Windpicker-owo
|
216c88d138
|
fix(database): 修复 detached 对象延迟加载导致的 greenlet 错误
问题:
- CRUD 返回的对象在 session 关闭后变为 detached 状态
- 访问属性时 SQLAlchemy 尝试延迟加载,但没有 session
- 导致: greenlet_spawn has not been called
根本原因:
- SQLAlchemy 对象在 session 外被访问
- 延迟加载机制尝试在非异步上下文中执行异步操作
修复方案:
1. CRUDBase.get_by(): 在 session 内预加载所有列
2. CRUDBase.get_multi(): 在 session 内预加载所有实例的所有列
3. PersonInfo.get_value(): 添加异常处理,防御性编程
影响:
- 所有通过 CRUD 获取的对象现在都完全加载
- 避免了 detached 对象的延迟加载问题
- 可能略微增加初始查询时间,但避免了运行时错误
|
2025-11-01 16:22:54 +08:00 |
|
Windpicker-owo
|
e927e88a06
|
chore: 清理旧数据库实现文件
- 删除old/目录下的旧实现文件
- 删除sqlalchemy_models.py.bak备份文件
- 完成数据库重构代码清理工作
|
2025-11-01 15:39:43 +08:00 |
|
Windpicker-owo
|
dcc2bafc9f
|
feat: 为高频查询添加多级缓存支持
- 为get_or_create_person添加10分钟缓存(PersonInfo高频查询)
- 为get_user_relationship添加5分钟缓存(关系查询优化)
- 为get_or_create_chat_stream添加5分钟缓存(聊天流优化)
- 在update_person_affinity和update_relationship_affinity中添加缓存失效
- 新增generate_cache_key辅助函数用于手动缓存管理
- 使用现有的@cached装饰器和MultiLevelCache系统
性能提升:
- PersonInfo查询命中缓存时可减少90%+数据库访问
- 关系查询在高频场景下显著降低数据库压力
- L1/L2缓存架构确保热数据快速访问
|
2025-11-01 15:39:26 +08:00 |
|
Windpicker-owo
|
e773bbc532
|
refactor: 移除旧的数据库配置管理模块,整合配置到全局配置中
|
2025-11-01 15:14:35 +08:00 |
|
Windpicker-owo
|
8f1af7ce23
|
fix: 在兼容层重新导出get_db_session和get_engine
- 兼容层应该提供对核心函数的访问
- 从core重新导出get_db_session和get_engine
- 修复从compatibility导入这些函数的代码
|
2025-11-01 14:45:27 +08:00 |
|
Windpicker-owo
|
f6318fdb65
|
refactor: 清理旧数据库文件并完成导入更新
- 将6个旧数据库文件移动到 old/ 目录归档
* sqlalchemy_models.py
* sqlalchemy_database_api.py
* database.py
* db_migration.py
* db_batch_scheduler.py
* sqlalchemy_init.py
- 更新剩余2个文件的导入路径
* src/schedule/database.py
* src/plugins/built_in/napcat_adapter_plugin/src/database.py
- 数据库重构基本完成,系统使用新的6层架构
|
2025-11-01 14:29:22 +08:00 |
|
Windpicker-owo
|
62c644c179
|
fix: 修复get_or_create返回值和MODEL_MAPPING
- 修复adapter.py db_save函数中get_or_create的元组解包
- 添加缺失的5个模型到MODEL_MAPPING: Videos, BotPersonalityInterests, BanUser, AntiInjectionStats, MonthlyPlan
- 修改test_retry_decorator使用exceptions参数支持通用Exception
- Stage 4-6测试现在100%通过 (26/26)
|
2025-11-01 14:09:17 +08:00 |
|
Windpicker-owo
|
51940f1d27
|
fix(database): 修复get_or_create返回元组的处理
- 所有get_or_create调用解包(instance, created)元组
- 更新函数返回类型: get_or_create_person, get_or_create_chat_stream返回tuple
- 修复store_action_info, update_relationship_affinity中的get_or_create调用
- 重要:get_or_create遵循Django ORM约定,返回(instance, created)元组
|
2025-11-01 13:57:59 +08:00 |
|
Windpicker-owo
|
59d2a4e918
|
fix(database): 修复record_llm_usage函数的字段映射
- 更新使用正确的LLMUsage模型字段名:
* input_tokens -> prompt_tokens
* output_tokens -> completion_tokens
* stream_id, platform (兼容参数,不存储)
- 添加所有必需字段支持:
* user_id, request_type, endpoint, cost, status
* model_assign_name, model_api_provider
* time_cost (可选)
- 保持向后兼容的参数接口
- 修复后测试通过率提升至69.2% (18/26)
|
2025-11-01 13:48:31 +08:00 |
|
Windpicker-owo
|
b58f69ec77
|
fix(database): 修复decorators循环导入问题
在cached装饰器中延迟导入get_cache,避免以下循环依赖:
decorators -> optimization.get_cache -> batch_scheduler -> session -> engine -> utils.exceptions
这个修复确保了所有装饰器可以正常导入和使用
|
2025-11-01 13:35:37 +08:00 |
|
Windpicker-owo
|
61de975d73
|
feat(database): 完成API层、Utils层和兼容层重构 (Stage 4-6)
Stage 4: API层重构
=================
新增文件:
- api/crud.py (430行): CRUDBase泛型类,提供12个CRUD方法
* get, get_by, get_multi, create, update, delete
* count, exists, get_or_create, bulk_create, bulk_update
* 集成缓存: 自动缓存读操作,写操作清除缓存
* 集成批处理: 可选use_batch参数透明使用AdaptiveBatchScheduler
- api/query.py (461行): 高级查询构建器
* QueryBuilder: 链式调用,MongoDB风格操作符
- 操作符: __gt, __lt, __gte, __lte, __ne, __in, __nin, __like, __isnull
- 方法: filter, filter_or, order_by, limit, offset, no_cache
- 执行: all, first, count, exists, paginate
* AggregateQuery: 聚合查询
- sum, avg, max, min, group_by_count
- api/specialized.py (461行): 业务特定API
* ActionRecords: store_action_info, get_recent_actions
* Messages: get_chat_history, get_message_count, save_message
* PersonInfo: get_or_create_person, update_person_affinity
* ChatStreams: get_or_create_chat_stream, get_active_streams
* LLMUsage: record_llm_usage, get_usage_statistics
* UserRelationships: get_user_relationship, update_relationship_affinity
- 更新api/__init__.py: 导出所有API接口
Stage 5: Utils层实现
===================
新增文件:
- utils/decorators.py (320行): 数据库操作装饰器
* @retry: 自动重试失败操作,指数退避
* @timeout: 超时控制
* @cached: 自动缓存函数结果
* @measure_time: 性能测量,慢查询日志
* @transactional: 事务管理,自动提交/回滚
* @db_operation: 组合装饰器
- utils/monitoring.py (330行): 性能监控系统
* DatabaseMonitor: 单例监控器
* OperationMetrics: 操作指标 (次数、时间、错误)
* DatabaseMetrics: 全局指标
- 连接池统计
- 缓存命中率
- 批处理统计
- 预加载统计
* 便捷函数: get_monitor, record_operation, print_stats
- 更新utils/__init__.py: 导出装饰器和监控函数
Stage 6: 兼容层实现
==================
新增目录: compatibility/
- adapter.py (370行): 向后兼容适配器
* 完全兼容旧API签名: db_query, db_save, db_get, store_action_info
* 支持MongoDB风格操作符 (\, \, \)
* 内部使用新架构 (QueryBuilder + CRUDBase)
* 保持返回dict格式不变
* MODEL_MAPPING: 25个模型映射
- __init__.py: 导出兼容API
更新database/__init__.py:
- 导出核心层 (engine, session, models, migration)
- 导出优化层 (cache, preloader, batch_scheduler)
- 导出API层 (CRUD, Query, 业务API)
- 导出Utils层 (装饰器, 监控)
- 导出兼容层 (db_query, db_save等)
核心特性
========
类型安全: Generic[T]提供完整类型推断
缓存透明: 自动缓存,用户无需关心
批处理透明: 可选批处理,自动优化高频写入
链式查询: 流畅的API设计
业务封装: 常用操作封装成便捷函数
向后兼容: 兼容层保证现有代码无缝迁移
性能监控: 完整的指标收集和报告
统计数据
========
- 新增文件: 7个
- 代码行数: ~2050行
- API函数: 14个业务API + 6个装饰器
- 兼容函数: 5个 (db_query, db_save, db_get等)
下一步
======
- 更新28个文件的import语句 (从sqlalchemy_database_api迁移)
- 移动旧文件到old/目录
- 编写Stage 4-6的测试
- 集成测试验证兼容性
|
2025-11-01 13:27:33 +08:00 |
|
Windpicker-owo
|
f7bb8058a8
|
feat(database): 完成优化层实现 - 自适应批量调度器
- batch_scheduler.py: 全新的自适应批量调度器
* AdaptiveBatchScheduler: 核心调度引擎
* 自适应批次: 10-100动态调整,根据负载优化
* 优先级队列: LOW/NORMAL/HIGH/URGENT四级优先级
* 智能等待: 50-200ms动态调整,平衡吞吐和延迟
* 超时保护: 防止操作长时间阻塞
* 拥塞控制: 实时监控队列状态,自动调节
- 性能优化算法:
* 批次自适应: congestion > 0.7 增大批次
* 等待时间调整: duration > 2*wait 增加等待
* 缓存集成: 5秒TTL,减少重复查询
- 批量执行能力:
* SELECT: 智能合并相似查询
* INSERT: 批量插入,减少事务开销
* UPDATE/DELETE: 单条执行但复用会话
- 统计监控:
* 吞吐量: 总操作数/批处理数
* 性能: 平均批次大小/执行时间
* 质量: 缓存命中率/超时率/错误率
* 拥塞: 实时拥塞评分(0-1)
优化层三大组件全部完成:
1. MultiLevelCache - L1+L2两级缓存
2. DataPreloader - 智能预加载引擎
3. AdaptiveBatchScheduler - 自适应批处理
预期性能提升:
- 查询响应: 减少60% (缓存+预加载)
- 写入吞吐: 提升300% (批量处理)
- 数据库负载: 降低50% (连接复用+批处理)
|
2025-11-01 12:50:43 +08:00 |
|
Windpicker-owo
|
8a2a2700a5
|
feat(database): 实现智能数据预加载器
- preloader.py: 完整的数据预加载系统
* DataPreloader: 核心预加载引擎
* AccessPattern: 访问模式追踪和分析
* 热点识别: 基于时间衰减的热度评分算法
* 关联预取: 自动识别和预加载相关数据
* 自适应策略: 动态调整预加载阈值
* 异步预加载: 不阻塞主线程
- CommonDataPreloader: 常见数据预加载
* preload_user_data: 用户信息、权限、关系
* preload_chat_context: 聊天流和消息上下文
- 特性:
* 时间衰减: score = count * decay^hours
* 关联学习: 自动记录数据访问关联
* 批量预加载: 后台批量加载热点数据
* 统计监控: 预加载命中率等指标
优化层第二部分完成,预期提升30%响应速度
|
2025-11-01 12:48:45 +08:00 |
|
Windpicker-owo
|
572485a3f4
|
feat(database): 实现多级缓存管理器
- cache_manager.py: 完整的多级缓存系统
* LRUCache: O(1)的LRU缓存实现
* MultiLevelCache: L1+L2两级缓存架构
* L1缓存: 1000项/60秒,用于热点数据
* L2缓存: 10000项/300秒,用于温数据
* 自动淘汰: LRU策略淘汰最少使用数据
* 统计监控: 命中率、淘汰率等指标
* 智能提升: L2命中自动提升到L1
* 定期清理: 后台任务清理过期数据
- 功能特性:
* 异步锁保证线程安全
* 自动估算数据大小
* 支持自定义loader函数
* 全局单例模式
优化层第一部分完成,命中率预期>80%
|
2025-11-01 12:47:29 +08:00 |
|