Loading...
正在加载...
请稍候

Alias Memory Service 记忆系统架构与设计思想分析

✨步子哥 (steper) 2025年12月25日 10:39
## 概述 本项目的记忆系统是 Alias 智能代理平台的核心组件,负责管理用户画像(User Profiling)和工具使用经验(Tool Memory)。该系统基于 **mem0** 和 **ReMe** 两个开源框架构建,提供了一套完整的记忆存储、检索和演进机制。 --- ## 1. 整体架构设计 ### 1.1 分层架构 ``` ┌─────────────────────────────────────────────────────────────────┐ │ API Layer (FastAPI) │ │ /alias_memory_service/* REST API Endpoints │ ├─────────────────────────────────────────────────────────────────┤ │ Service Layer │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ AsyncUserProfilingMemory │ ToolMemory (ReMe) │ │ │ └─────────────────────────────────────────────────────────┘ │ ├─────────────────────────────────────────────────────────────────┤ │ Memory Pool Layer │ │ ┌──────────────────┬──────────────────┬──────────────────┐ │ │ │ Candidate Pool │ UserProfiling │ UserInfo Pool │ │ │ │ (候选池) │ Pool │ (用户信息池) │ │ │ │ │ (用户画像池) │ │ │ │ └──────────────────┴──────────────────┴──────────────────┘ │ ├─────────────────────────────────────────────────────────────────┤ │ Base Memory Layer │ │ BaseAsyncVectorMemory (mem0) │ ├─────────────────────────────────────────────────────────────────┤ │ Storage Layer │ │ ┌──────────────────┬──────────────────┬──────────────────┐ │ │ │ Qdrant │ SQLite │ Redis │ │ │ │ (向量存储) │ (历史记录) │ (缓存/可选) │ │ │ └──────────────────┴──────────────────┴──────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ ``` ### 1.2 核心组件关系 ``` BaseMemory (ABC) │ ┌───────────────┴───────────────┐ ▼ ▼ AsyncUserProfilingMemory ToolMemory │ │ ┌─────────┼─────────┐ │ ▼ ▼ ▼ ▼ Candidate UserProfiling UserInfo ReMeApp Pool Pool Pool (工具记忆) │ │ │ └─────────┼───────────┘ ▼ BaseAsyncVectorMemory (mem0) │ ┌─────────┼─────────┐ ▼ ▼ ▼ Qdrant SQLite Embedding (向量库) (历史) (LLM) ``` --- ## 2. 记忆系统的两大核心模块 ### 2.1 用户画像记忆 (User Profiling Memory) 用户画像记忆系统基于 **mem0** 框架构建,通过收集和处理用户行为数据来构建全面的用户画像。 #### 2.1.1 三层记忆池架构 | 池名称 | 用途 | 设计特点 | |--------|------|----------| | **Candidate Pool (候选池)** | 临时存储待验证的用户偏好记忆 | 基于访问频率和时间衰减计算评分 | | **User Profiling Pool (画像池)** | 存储已确认的稳定用户偏好 | 只有高质量记忆才能进入 | | **User Info Pool (信息池)** | 存储从对话中提取的基本用户事实 | 个人信息、背景等 | #### 2.1.2 记忆评分机制 候选池中的每条记忆都会被动态评分,评分公式如下: ```python # 时间评分 (越近越高) time_score = exp(-temperature * time_diff_hours) normalized_time = time_score / max_time_diff # 访问次数评分 (访问越多越高) normalized_visit = 1 / (1 + exp(-visited_count / 10)) # 综合评分 score = 0.7 * normalized_time + 0.3 * normalized_visit ``` **设计思想**: - **时间衰减**:使用指数衰减函数,近期记忆权重更高 - **访问频率**:使用 Sigmoid 函数平滑访问次数的影响 - **加权组合**:时间因素占 70%,频率因素占 30%,强调时效性 #### 2.1.3 记忆演进机制 (Candidate → Profiling) ``` 用户交互 → 候选池 → 评分计算 → 阈值判断 → 画像池 │ ▼ threshold = 0.95 * (1 - 1/n) (n = 候选池中记忆数量) ``` **动态阈值设计**: - 当候选池只有1条记忆时,阈值 = 0(容易晋升) - 随着候选数量增加,阈值逐渐趋近 0.95 - 确保只有高质量、高频访问的记忆才能被提升 ```python async def get_highest_score_memory_by_threshold(self, candidates): threshold = 0.95 * (1.0 - (1 / len(candidates))) # 只有得分超过阈值的记忆才能晋升 ``` ### 2.2 工具记忆 (Tool Memory) 工具记忆基于 **ReMe** 框架构建,管理工具执行历史并提供使用指南。 #### 2.2.1 核心功能 ``` 工具调用 → 记录结果 → 阈值检查 → 自动摘要 → 指南生成 ``` | 功能 | 描述 | |------|------| | **结果存储** | 记录工具名称、输入参数、输出结果、执行状态、耗时 | | **自动摘要** | 基于阈值触发历史记录的智能摘要 | | **经验检索** | 根据工具名称检索历史使用模式和最佳实践 | #### 2.2.2 双阈值摘要触发机制 ```python class ToolMemory(BaseMemory): def __init__( self, summary_time_threshold: int = 300, # 时间阈值: 5分钟 summary_count_threshold: int = 5, # 数量阈值: 5次调用 ): ``` **触发条件(满足任一即触发)**: 1. 距离上次摘要超过 300 秒 2. 未摘要的工具调用超过 5 次 **设计思想**: - 避免频繁摘要消耗资源 - 保证及时性,不让信息积压过久 - 每个工具独立追踪状态 --- ## 3. 用户行为记录系统 ### 3.1 支持的用户行为类型 ```python action_handlers = { "LIKE": # 点赞 "DISLIKE": # 踩 "CANCEL_LIKE": # 取消点赞 "CANCEL_DISLIKE": # 取消踩 "EDIT_ROADMAP": # 编辑执行路线图 "EDIT_FILE": # 编辑文件 "START_CHAT": # 开始对话 "FOLLOWUP_CHAT": # 追问 "BREAK_CHAT": # 中断对话 "COLLECT_SESSION": # 收藏会话 "UNCOLLECT_SESSION": # 取消收藏会话 "COLLECT_TOOL": # 收藏工具调用 "UNCOLLECT_TOOL": # 取消收藏工具调用 } ``` ### 3.2 行为处理流程 ``` 用户行为 → record_action() → 行为分发器 → 具体处理器 → 记忆更新 │ ├── LIKE/DISLIKE → 偏好提取 ├── EDIT_* → 编辑偏好提取 ├── *_CHAT → 对话偏好提取 └── COLLECT_* → 工作流提取 ``` ### 3.3 Prompt 驱动的信息提取 系统使用专门设计的 Prompt 从用户行为中提取信息: | 行为类型 | 提取内容 | |----------|----------| | SESSION_SUMMARY | 任务描述、问题分类 | | AGENT_ROADMAP | 多Agent协作路线图 | | AGENT_KEY_WORKFLOW | 高层工作流摘要 | | SUBTASK_ROADMAP | 子任务执行路径 | | EXTRACT_USER_INFO | 用户基本信息 | | EXTRACT_USER_EVENT | 用户事件偏好 | --- ## 4. 向量存储与检索设计 ### 4.1 基于 mem0 的向量存储 ```python class BaseAsyncVectorMemory(MemoryBase): def __init__(self, config: MemoryConfig): # 嵌入模型 - 用于语义向量化 self.embedding_model = EmbedderFactory.create(...) # 向量存储 - Qdrant self.vector_store = VectorStoreFactory.create(...) # LLM - 用于记忆推理 self.llm = LlmFactory.create(...) # 历史数据库 - SQLite self.db = SQLiteManager(config.history_db_path) ``` ### 4.2 记忆的增删改查流程 ``` add() │ ┌────────────┼────────────┐ ▼ ▼ ▼ 直接添加 推理添加 图谱更新 (infer=False) (infer=True) (可选) │ │ │ ┌───────┴───────┐ │ ▼ ▼ │ 提取事实 搜索已有记忆 │ │ │ │ └───────┬───────┘ │ ▼ │ LLM推理决策 │ (ADD/UPDATE/DELETE) │ │ └────────────┼────────────┐ ▼ ▼ 向量存储 历史记录 (Qdrant) (SQLite) ``` ### 4.3 语义搜索 ```python async def search(self, query, user_id, limit=10, threshold=0.3): # 1. 生成查询向量 query_embedding = await asyncio.to_thread( self.embedding_model.embed, query ) # 2. 向量相似度搜索 results = await self._search_vector_store( query, filters, limit, threshold ) # 3. 更新访问元数据(用于评分) await self._update_metadata(memory_ids) return results ``` --- ## 5. Agent 集成架构 ### 5.1 长期记忆接口 ```python class AliasLongTermMemory(LongTermMemoryBase): """Agent 使用的长期记忆接口""" def __init__(self, session_service: SessionService): self.session_service = session_service self.memory_client = MemoryClient() # 记录对话到记忆 async def record(self, msgs: list[Msg]) -> None # 检索用户画像 async def retrieve(self, query) -> Optional[str] # 检索工具使用经验 async def tool_memory_retrieve(self, query: str) -> ToolResponse # 主动记录重要信息 async def record_to_memory(self, thinking, content) -> ToolResponse # 基于关键词检索记忆 async def retrieve_from_memory(self, keywords) -> ToolResponse ``` ### 5.2 记忆服务客户端 ```python class MemoryClient(BaseClient): """通过 HTTP API 访问记忆服务""" # 健康检查 async def is_available() -> bool # 记录用户行为 async def record_action(action: Action) -> dict # 检索用户画像 async def retrieve_user_profiling(uid, query, limit, threshold) # 检索工具记忆 async def retrieve_tool_memory(uid, query) # 添加长期记忆 async def add_to_longterm_memory(uid, content, session_id) ``` --- ## 6. 设计思想总结 ### 6.1 核心设计原则 | 原则 | 实现 | |------|------| | **渐进式记忆** | 通过候选池→画像池的演进机制,避免噪声进入核心记忆 | | **时效性优先** | 评分公式中时间权重(70%)高于频率权重(30%) | | **动态阈值** | 阈值随候选数量动态调整,平衡选择性与包容性 | | **异步优先** | 全异步架构,支持高并发场景 | | **解耦设计** | 用户画像与工具记忆独立模块,互不干扰 | | **插件化存储** | 支持 Qdrant、Redis 等多种后端 | ### 6.2 技术亮点 1. **双记忆系统** - 用户画像记忆:理解用户偏好和习惯 - 工具记忆:积累工具使用经验 2. **智能演进机制** - 避免一次性交互污染长期记忆 - 只有经过验证的高频记忆才能晋升 3. **LLM 驱动的记忆管理** - 使用 LLM 进行事实提取 - 智能决策记忆的增删改 4. **全链路异步** - 后台任务处理 - 并行记忆池操作 ### 6.3 架构优势 ``` ┌─────────────────────┐ │ 高质量用户画像 │ │ (User Profiling) │ └─────────────────────┘ ▲ │ 演进晋升 ┌─────────────────────┐ │ 候选池筛选 │ │ (Candidate Pool) │ └─────────────────────┘ ▲ │ 多源输入 ┌─────────────┬───────────┼───────────┬─────────────┐ │ │ │ │ │ LIKE/DISLIKE EDIT CHAT COLLECT TOOL_USE │ │ │ │ │ └─────────────┴───────────┴───────────┴─────────────┘ 用户行为流 ``` --- ## 7. 文件结构参考 ``` alias/src/alias/ ├── memory_service/ # 记忆服务核心 │ ├── basememory.py # 抽象基类定义 │ ├── user_profiling_memory.py # 用户画像记忆实现 │ ├── tool_memory.py # 工具记忆实现 │ ├── memory_base/ # 记忆基础设施 │ │ ├── base_vec_memory.py # 向量记忆基类 (mem0) │ │ ├── candidate_pool.py # 候选池实现 │ │ ├── userprofiling_pool.py# 画像池实现 │ │ ├── userinfo_pool.py # 信息池实现 │ │ ├── storage.py # SQLite 存储管理 │ │ └── prompt.py # LLM Prompt 模板 │ └── service/ # FastAPI 服务 │ └── api/routers/ # API 路由 │ ├── user_profiling.py │ └── tool_memory.py └── agent/memory/ # Agent 记忆接口 ├── longterm_memory.py # 长期记忆封装 └── longterm_memory_utils.py # 工具函数 ``` --- ## 8. 依赖框架 | 框架 | 用途 | 项目地址 | |------|------|----------| | **mem0** | 用户画像记忆的核心引擎 | https://github.com/mem0ai/mem0 | | **ReMe** | 工具记忆管理系统 | https://github.com/agentscope-ai/ReMe | | **Qdrant** | 向量数据库存储 | https://qdrant.tech/ | | **FastAPI** | API 服务框架 | https://fastapi.tiangolo.com/ | --- ## 总结 本项目的记忆系统采用了创新的双层记忆架构(用户画像 + 工具经验),通过候选池→画像池的演进机制确保记忆质量,利用动态阈值和时间衰减评分实现智能筛选。系统充分利用了 LLM 的语义理解能力进行事实提取和记忆管理,同时保持了良好的架构解耦和异步性能。这种设计使得智能代理能够持续学习和适应用户偏好,提供更加个性化的服务体验。

讨论回复

0 条回复

还没有人回复,快来发表你的看法吧!