Short-term Memory

Short-term Memory 是 Agent 在单次会话内的对话记忆,包含最近的消息历史和对话摘要。它的生命周期和会话一致。

#type / concept #status / evergreen #tech / ai

[!info] related notes

Short-term Memory

一句话定义

Short-term Memory 是 Agent 在单次会话内的对话记忆。它包含最近的原始消息和更早消息的摘要。会话结束后,短期记忆要么归档要么丢弃。

核心原理

存储结构

class ShortTermMemory:
    def __init__(self, db, max_messages=20):
        self.db = db
        self.max_messages = max_messages

    async def get_recent(self, session_id: str, limit: int = 10) -> list[Message]:
        """获取最近 N 条消息"""
        return await self.db.query(
            "SELECT * FROM messages WHERE session_id = ? ORDER BY created_at DESC LIMIT ?",
            session_id, limit
        )

    async def get_summary(self, session_id: str) -> str:
        """获取对话摘要"""
        result = await self.db.query(
            "SELECT summary FROM conversation_summaries WHERE session_id = ?",
            session_id
        )
        return result.summary if result else ""

    async def append(self, session_id: str, messages: list[Message]):
        """追加消息"""
        for msg in messages:
            await self.db.insert("messages", msg)

    async def is_too_long(self, session_id: str) -> bool:
        """检查是否需要摘要"""
        count = await self.db.count("messages", session_id=session_id)
        return count > self.max_messages

摘要触发

消息数 < 20: 保留全部原始消息
消息数 >= 20: 触发摘要
  - 保留最近 10 条原始消息
  - 更早的消息生成摘要
  - 摘要 + 最近消息 = 上下文

常见坑

  1. 不做截断: 消息无限增长,token 爆炸
  2. 摘要太粗糙: 丢失关键细节
  3. 摘要不更新: 新消息到达后没有重新摘要
  4. 工具调用结果被摘要掉: 下一轮需要引用工具结果时找不到

参考资料

创建于 2026/6/30 更新于 2026/7/15