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 条原始消息
- 更早的消息生成摘要
- 摘要 + 最近消息 = 上下文
常见坑
- 不做截断: 消息无限增长,token 爆炸
- 摘要太粗糙: 丢失关键细节
- 摘要不更新: 新消息到达后没有重新摘要
- 工具调用结果被摘要掉: 下一轮需要引用工具结果时找不到