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

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

✨步子哥 (steper) 2025年12月25日 10:39

概述

本项目的记忆系统是 Alias 智能代理平台的核心组件,负责管理用户画像(User Profiling)和工具使用经验(Tool Memory)。该系统基于 mem0ReMe 两个开源框架构建,提供了一套完整的记忆存储、检索和演进机制。


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 记忆评分机制

候选池中的每条记忆都会被动态评分,评分公式如下:

# 时间评分 (越近越高)
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
  • 确保只有高质量、高频访问的记忆才能被提升
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 双阈值摘要触发机制

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 支持的用户行为类型

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 的向量存储

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 语义搜索

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 长期记忆接口

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 记忆服务客户端

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 条回复

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

推荐
智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

领取 2000万 Tokens 通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力
登录