""" Storage Protocols - 存储接口定义 使用 Protocol 定义接口,允许不同的存储实现(内存、PostgreSQL、Neo4j 等) TraceStore 已移动到 agent.execution.protocols """ from typing import Protocol, List, Optional, Dict, Any, runtime_checkable from agent.memory.models import Experience, Skill @runtime_checkable class MemoryStore(Protocol): """Experience + Skill 存储接口""" # ===== Experience 操作 ===== async def add_experience(self, exp: Experience) -> str: """添加 Experience""" ... async def get_experience(self, exp_id: str) -> Optional[Experience]: """获取 Experience""" ... async def search_experiences( self, scope: str, context: str, limit: int = 10 ) -> List[Experience]: """ 搜索相关 Experience Args: scope: 范围(如 "agent:researcher") context: 当前上下文,用于语义匹配 limit: 最大返回数量 """ ... async def update_experience_stats( self, exp_id: str, success: bool ) -> None: """更新 Experience 使用统计""" ... # ===== Skill 操作 ===== async def add_skill(self, skill: Skill) -> str: """添加 Skill""" ... async def get_skill(self, skill_id: str) -> Optional[Skill]: """获取 Skill""" ... async def get_skill_tree(self, scope: str) -> List[Skill]: """获取技能树""" ... async def search_skills( self, scope: str, context: str, limit: int = 5 ) -> List[Skill]: """搜索相关 Skills""" ... @runtime_checkable class StateStore(Protocol): """短期状态存储接口(用于 Task State,通常用 Redis)""" async def get(self, key: str) -> Optional[Dict[str, Any]]: """获取状态""" ... async def set( self, key: str, value: Dict[str, Any], ttl: Optional[int] = None ) -> None: """ 设置状态 Args: key: 键 value: 值 ttl: 过期时间(秒) """ ... async def update(self, key: str, **updates) -> None: """部分更新""" ... async def delete(self, key: str) -> None: """删除""" ...