feat(memory): 重构记忆系统并移除插件热重载
重构记忆系统核心模块,引入全局记忆作用域、记忆指纹去重机制和查询规划器,优化多阶段检索性能。移除插件热重载系统及其相关依赖。 主要变更: - 引入全局记忆作用域,简化记忆管理 - 实现记忆指纹去重,避免重复记忆存储 - 新增查询规划器,支持语义查询规划和记忆类型过滤 - 优化多阶段检索,增加语义重排和权重配置 - 改进向量存储,支持嵌入维度自动解析和查询向量生成 - 增强元数据索引,支持主体索引和更新操作 - 记忆构建器支持多主体和自然语言展示 - 移除watchdog依赖和插件热重载模块 - 更新配置模板,简化记忆配置项 BREAKING CHANGE: 移除插件热重载系统,相关API和命令不再可用。记忆系统接口有较大调整,使用该系统的模块需要适配新接口。
This commit is contained in:
@@ -12,6 +12,7 @@ from sqlalchemy import select
|
||||
|
||||
from src.common.logger import get_logger
|
||||
from src.config.config import global_config
|
||||
from src.common.config_helpers import resolve_embedding_dimension
|
||||
from src.common.data_models.bot_interest_data_model import BotPersonalityInterests, BotInterestTag, InterestMatchResult
|
||||
|
||||
logger = get_logger("bot_interest_manager")
|
||||
@@ -28,7 +29,9 @@ class BotInterestManager:
|
||||
# Embedding客户端配置
|
||||
self.embedding_request = None
|
||||
self.embedding_config = None
|
||||
self.embedding_dimension = 1024 # 默认BGE-M3 embedding维度
|
||||
configured_dim = resolve_embedding_dimension()
|
||||
self.embedding_dimension = int(configured_dim) if configured_dim else 0
|
||||
self._detected_embedding_dimension: Optional[int] = None
|
||||
|
||||
@property
|
||||
def is_initialized(self) -> bool:
|
||||
@@ -82,8 +85,11 @@ class BotInterestManager:
|
||||
|
||||
logger.info("📋 找到embedding模型配置")
|
||||
self.embedding_config = model_config.model_task_config.embedding
|
||||
self.embedding_dimension = 1024 # BGE-M3的维度
|
||||
logger.info(f"📐 使用模型维度: {self.embedding_dimension}")
|
||||
|
||||
if self.embedding_dimension:
|
||||
logger.info(f"📐 配置的embedding维度: {self.embedding_dimension}")
|
||||
else:
|
||||
logger.info("📐 未在配置中检测到embedding维度,将根据首次返回的向量自动识别")
|
||||
|
||||
# 创建LLMRequest实例用于embedding
|
||||
self.embedding_request = LLMRequest(model_set=self.embedding_config, request_type="interest_embedding")
|
||||
@@ -350,7 +356,27 @@ class BotInterestManager:
|
||||
|
||||
if embedding and len(embedding) > 0:
|
||||
self.embedding_cache[text] = embedding
|
||||
logger.debug(f"✅ Embedding获取成功,维度: {len(embedding)}, 模型: {model_name}")
|
||||
|
||||
current_dim = len(embedding)
|
||||
if self._detected_embedding_dimension is None:
|
||||
self._detected_embedding_dimension = current_dim
|
||||
if self.embedding_dimension and self.embedding_dimension != current_dim:
|
||||
logger.warning(
|
||||
"⚠️ 实际embedding维度(%d)与配置值(%d)不一致,请在 model_config.model_task_config.embedding.embedding_dimension 中同步更新",
|
||||
current_dim,
|
||||
self.embedding_dimension,
|
||||
)
|
||||
else:
|
||||
self.embedding_dimension = current_dim
|
||||
logger.info(f"📏 检测到embedding维度: {current_dim}")
|
||||
elif current_dim != self.embedding_dimension:
|
||||
logger.warning(
|
||||
"⚠️ 收到的embedding维度发生变化: 之前=%d, 当前=%d。请确认模型配置是否正确。",
|
||||
self.embedding_dimension,
|
||||
current_dim,
|
||||
)
|
||||
|
||||
logger.debug(f"✅ Embedding获取成功,维度: {current_dim}, 模型: {model_name}")
|
||||
return embedding
|
||||
else:
|
||||
raise RuntimeError(f"❌ 返回的embedding为空: {embedding}")
|
||||
|
||||
Reference in New Issue
Block a user