← [ BACK_TO_NOTES ]

Memory Manager

Memory Manager 是 AI Agent 中负责记忆写入、压缩、检索与上下文注入策略的组件;它管理 memory lifecycle,但不等同于某个具体 memory 工具或全部 Agent 状态。

#concept #evergreen #ai #architecture

[!info] related notes

Memory Manager

一句话定义

Memory Manager 是 AI Agent 中管理记忆的组件。它不只是”保存聊天记录”,而是决定 Agent 能记住什么(短期对话历史、长期用户画像)、怎么压缩(摘要、截断)、怎么注入到上下文中。

它解决什么问题

LLM 的上下文窗口有限。一个长对话可能有 100 条消息,但上下文窗口只能容纳 20 条。Memory Manager 需要:

  • 决定哪些消息保留、哪些摘要、哪些丢弃
  • 维护跨会话的长期记忆(用户画像、偏好)
  • 在每轮对话时组装最优的记忆片段

核心原理

记忆分层

┌─────────────────────────────────────────┐
│           Memory Manager                │
│                                         │
│  ┌──────────────────────────────────┐  │
│  │  Short-term Memory (会话级)      │  │
│  │  最近 N 轮对话 + 对话摘要        │  │
│  └──────────────────────────────────┘  │
│                                         │
│  ┌──────────────────────────────────┐  │
│  │  Long-term Memory (跨会话)       │  │
│  │  用户画像、偏好、历史摘要        │  │
│  └──────────────────────────────────┘  │
│                                         │
│  ┌──────────────────────────────────┐  │
│  │  Working Memory (当前任务)       │  │
│  │  结构化状态、中间结果            │  │
│  └──────────────────────────────────┘  │
└─────────────────────────────────────────┘

Python 实现

class MemoryManager:
    def __init__(self, short_term: ShortTermMemory, long_term: LongTermMemory):
        self.short_term = short_term
        self.long_term = long_term

    async def get_context(self, session_id: str, user_id: str) -> MemoryContext:
        # 1. 获取短期记忆(最近对话)
        recent_messages = await self.short_term.get_recent(session_id, limit=10)
        summary = await self.short_term.get_summary(session_id)

        # 2. 获取长期记忆(用户画像)
        user_profile = await self.long_term.get_user_profile(user_id)

        # 3. 组装记忆上下文
        return MemoryContext(
            recent_messages=recent_messages,
            conversation_summary=summary,
            user_profile=user_profile,
        )

    async def update(self, session_id: str, user_id: str, new_messages: list):
        # 1. 更新短期记忆
        await self.short_term.append(session_id, new_messages)

        # 2. 如果对话太长,生成摘要
        if await self.short_term.is_too_long(session_id):
            messages = await self.short_term.get_all(session_id)
            summary = await self.summarize(messages)
            await self.short_term.set_summary(session_id, summary)
            await self.short_term.clear_old_messages(session_id)

        # 3. 提取长期记忆(用户偏好等)
        profile_updates = await self.extract_profile_updates(new_messages)
        if profile_updates:
            await self.long_term.update_user_profile(user_id, profile_updates)

常见设计模式

1. 滑动窗口

只保留最近 N 轮对话,更早的做摘要。

2. 重要性排序

根据消息重要性决定保留哪些(工具调用结果比闲聊更重要)。

3. 自动摘要

对话超过阈值时自动生成摘要。

边界:Memory Manager、Memory 与 Agent State

  • Memory 是被保留并可再次取用的信息。
  • Memory Manager 是决定何时写入、压缩、检索、淘汰和注入这些信息的策略组件。
  • Agent State 是当前执行事实,例如 step、tool result、审批状态、幂等键和 durable checkpoint;它不能被“记忆摘要”替代。
  • agent-memory 是一个具体 coding-agent memory 工具资源,不是这个通用组件概念的同义词。

常见坑

  1. 全量历史塞进上下文: token 爆炸
  2. 不做摘要: 长对话的关键信息被截断丢失
  3. 长期记忆不更新: 用户偏好变了但记忆没变
  4. 记忆和上下文不分: 记忆是数据源,上下文是每轮组装的信息包

学习检查

不看正文回答:

  1. Memory Manager 与“把最近 N 条消息拼进 prompt”有什么本质区别?
  2. 为什么长期记忆需要写入、检索和淘汰策略,而不是无限追加?
  3. Memory 与 Agent State 为什么不能互相替代?
  4. 一个 coding agent 的 tool result、用户偏好和当前 approval 状态分别应该落在哪一层?

参考资料

创建于 2026/6/30 更新于 2026/10/1
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本