Files
zhenxun_bot/zhenxun/services/ai/context/memory/models.py
T
52f7dbdedf ♻️ refactor(core): 重构 AI 编排框架与记忆及 RAG 子系统 (#2149)
* ♻️ refactor(core): 重构 AI 编排框架与记忆及 RAG 子系统

- 【重构】重构 `BaseRunnable` 并引入统一的 `RunIntent` 意图载体,规范 Agent、Team 和 Workflow 的执行流
- 【解耦】将中期记忆槽和长期向量记忆从 `MemoryConfig` 中解耦,转为独立的能力组件与工具箱进行管理
- 【记忆】移除 `MemoryReader` 和 `MemoryWriter`,统一封装为 `SessionMemoryContext` 会话记忆门面
- 【RAG】重构检索器与存储后端接口,统一采用 `QueryRequest` 进行多维度联合检索,并引入 `InMemoryScorer` 提升打分性能
- 【事件】优化 `EventBus` 异步事件分发机制,引入队列机制确保事件按序处理,避免并发竞态问题
- 【依赖注入】移除 `memory` 注入项,优化 `DependencyInjector` 的签名解析缓存以提升性能

* 🚨 auto fix by pre-commit hooks

---------

Co-authored-by: webjoin111 <455457521@qq.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-14 16:48:33 +08:00

99 lines
3.2 KiB
Python

"""
记忆域类型定义
"""
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",
]