Files
zhenxun_bot/zhenxun/services/ai/context/memory/models.py
T

99 lines
3.2 KiB
Python
Raw Normal View History

"""
记忆域类型定义
"""
from pydantic import BaseModel, ConfigDict, Field
from zhenxun.services.ai.utils.scope import ScopeBuilder
from .storage.interfaces import (
BaseChatContext,
BaseMemoryIngestionMiddleware,
BaseMemoryReducer,
)
from .types import (
Isolation,
SessionMetadata,
)
class MemoryScoringConfig(BaseModel):
"""长期记忆的复合打分与检索配置"""
recency_weight: float = Field(default=0.3)
"""时间衰减权重"""
semantic_weight: float = Field(default=0.5)
"""语义相似度权重"""
importance_weight: float = Field(default=0.2)
"""重要性权重"""
recency_half_life_days: int = Field(default=30)
"""时间衰减的半衰期(天)"""
reinforcement_weight: float = Field(default=0.2)
"""访问强化的加权权重 (被检索越多得分越高)"""
class ShortTermConfig(BaseModel):
"""短期对话记忆配置"""
model_config = ConfigDict(arbitrary_types_allowed=True)
enable: bool = Field(default=True)
"""是否启用短期对话记忆上下文"""
backend: str | BaseChatContext | None = Field(default=None)
"""
指定底层短期记忆数据库注册名称,或直接传入 BaseChatContext 实例。
为空则使用全局默认
"""
isolation: ScopeBuilder = Field(default_factory=Isolation.AGENT_USER)
"""单一的记忆隔离级别 (ScopeBuilder),决定短期记忆存储边界"""
class ContextCompressionConfig(BaseModel):
"""上下文压缩与管理配置"""
model_config = ConfigDict(arbitrary_types_allowed=True)
threshold: float | None = Field(default=None)
"""(局部重写) 触发记忆压缩的 Token 阈值"""
max_history_turns: int | None = Field(default=None)
"""(局部重写) 触发记忆压缩的对话轮数上限。设为 0 表示不限制轮数。"""
vision_window: int | None = Field(default=None)
"""多模态滑动窗口大小。0表示关闭该功能,>0表示仅保留最近N轮包含多模态数据的消息,None表示跟随全局配置。"""
policy: list[BaseMemoryReducer] | None = Field(default=None)
"""核心记忆压缩策略管线 (List[BaseMemoryReducer])。为 None 时将应用全局默认策略。"""
class IngestionConfig(BaseModel):
"""记忆入库管线配置"""
model_config = ConfigDict(arbitrary_types_allowed=True)
middlewares: list[BaseMemoryIngestionMiddleware] = Field(default_factory=list)
"""入库中间件列表(按顺序依次执行清洗过滤)"""
class MemoryConfig(BaseModel):
"""统一的记忆配置项声明"""
model_config = ConfigDict(arbitrary_types_allowed=True)
short_term: ShortTermConfig = Field(default_factory=ShortTermConfig)
"""短期对话记忆配置"""
compression: ContextCompressionConfig = Field(
default_factory=ContextCompressionConfig
)
"""上下文压缩与管理配置"""
ingestion: IngestionConfig = Field(default_factory=IngestionConfig)
"""记忆入库前的清洗与过滤管线配置"""
__all__ = [
"BaseMemoryIngestionMiddleware",
"ContextCompressionConfig",
"IngestionConfig",
"Isolation",
"MemoryConfig",
"MemoryScoringConfig",
"SessionMetadata",
"ShortTermConfig",
]