一、记忆系统整体架构:三层模型
AI Agent的记忆系统与人类认知科学高度对应。一个完整的工程化记忆体系通常分为三个层次:
- Sensory Memory(感觉记忆) —— 原始输入缓存,保留最近1-3轮对话原文,不做任何加工
- Short-Term Memory(短期记忆) —— 当前会话的工作记忆,采用滑动窗口加摘要压缩管理
- Long-Term Memory(长期记忆) —— 跨会话持久化存储,使用向量数据库实现语义检索
三层之间通过Memory Controller协调写入与检索,确保信息在不同时间尺度间高效流转。
二、短期记忆与上下文窗口管理
LLM的上下文窗口有限(如128K token),短期记忆的核心挑战在于如何在有限窗口内保留最有价值的信息。常用策略包括:
- 滑动窗口:保留最近N轮对话,超出部分丢弃或归档
- Token预算池:为不同内容类型分配固定预算(系统指令20%、历史对话40%、工具结果20%、当前输入20%)
- 摘要压缩:对超出窗口的历史内容进行LLM摘要,保留核心信息
- 分层衰减:近期对话保留原文,中期对话保留摘要,远期对话仅保留关键实体
三、长期记忆与向量存储设计
长期记忆解决跨会话信息持久化。关键技术选型与架构如下:
- Embedding模型:将文本转为高维向量表示,如OpenAI text-embedding-3、BGE、m3e等
- 向量索引引擎:FAISS(本地)、Milvus(分布式)、Pinecone(云端)、pgvector(PostgreSQL内嵌)
- 元数据存储:记录时间戳、来源会话ID、记忆类型标签、访问频率、重要性评分
- 分层存储:热数据存内存、温数据存SSD、冷数据归档至对象存储
四、记忆写入策略
并非所有对话内容都应写入长期记忆,否则存储膨胀且检索噪声增大。有效的写入策略包括:
- 语义重要性过滤:仅保留用户偏好、决策结论、纠错记录、工具调用结果等高价值信息;寒暄、重复确认等低价值内容不写入
- 去重与合并:新生成的记忆先与现有记忆做相似度检测,相似度超过阈值则合并更新而非新增
- 时间衰减写入:新信息优先写入,低频访问信息逐步降权乃至淘汰
- 结构化模板:用户偏好类记忆统一使用JSON Schema持久化,便于下游查询
五、记忆检索与相关性排序
检索阶段采用混合策略确保返回结果相关且多样:
- 语义向量检索:用户当前输入做Embedding后做ANN近邻搜索,召回Top-K候选
- 时间衰减权重:乘以时间衰减因子 w_time = e^(-lambda * days_ago),确保时效性
- 访问频率加权:被频繁引用的记忆提升排序权重
- 上下文连贯性评分:与当前对话主题一致性做重排序
- 混合公式:final_score = alpha * semantic_sim + beta * time_decay + gamma * visit_freq + delta * context_coherence
六、跨会话状态持久化
用户画像、历史偏好、项目进度、长期任务状态等状态信息需要跨会话保持连续:
- Profile Summary对象:每个用户维护一个结构化摘要,包含偏好、常用操作、历史项目列表
- 项目状态机快照:正在进行中的任务定期保存状态机快照,新会话加载后可无缝接续
- 会话衔接摘要:每次会话结束时自动生成摘要摘要,作为下次会话的初始上下文
- Goal-Plan追踪:维护长期目标栈与关联计划树的持久记录
七、遗忘机制与记忆淘汰
合理的遗忘是记忆系统健康的标志,避免存储无限膨胀。实现手段包括:
- TTL过期:每条记忆设置生存时间,自动清理过期条目
- LRU淘汰:基于最近访问时间的淘汰策略,保留最常使用的记忆
- 重要性衰减:重要性评分随时间指数衰减,低于阈值自动归档
- 存储容量上限:设置每个用户的记忆容量上限,触发淘汰
- 用户显式清除:提供API供用户主动删除特定记忆或清空全部
八、记忆安全与隐私保护
记忆中可能包含敏感个人信息,安全与隐私不可妥协:
- PII脱敏写入:写入前通过NER识别姓名、手机、身份证、银行卡等敏感实体,替换为占位符
- 存储加密:向量与元数据均加密存储,密钥分级管理
- 访问审计日志:记录每次记忆查询的时间、来源、内容,便于安全追溯
- 租户隔离:多用户场景下严格数据隔离,防止跨租户泄露
- 合规性支持:提供用户数据导出、删除接口,满足GDPR等合规要求
九、完整代码实现示例
以下是一个轻量级MemoryStore的Python实现框架:
class MemoryStore:
def __init__(self, embedding_fn, vector_index, meta_store):
self.embed = embedding_fn
self.index = vector_index
self.meta = meta_store
def write(self, text, metadata=None):
vec = self.embed(text)
memory_id = self.index.add(vec)
self.meta.save(id=memory_id, text=text, meta=metadata)
return memory_id
def recall(self, query, top_k=5, filters=None):
q_vec = self.embed(query)
ids, scores = self.index.search(q_vec, k=top_k)
results = self.meta.batch_get(ids)
return self.rerank(results, query)
def consolidate(self, session_history):
# 摘要压缩历史会话,写入长期记忆
summary = llm_summarize(session_history)
self.write(summary, type="session_summary")
def forget(self, memory_id):
self.index.remove(memory_id)
self.meta.delete(memory_id)
十、与Tool Use和对话系统的协同
记忆系统不是孤立存在的,它与Agent其他核心子系统深度耦合:
- 与Tool Use协同:工具调用的结果、中间状态写入记忆,供后续工具步骤参考;工具可根据记忆选择合适的参数或跳过重复步骤
- 与对话管理协同:对话管理器从长期记忆中提取用户偏好与历史上下文,补充System Prompt,实现个性化对话
- 与响应生成协同:检索到的记忆注入上下文窗口,使LLM能基于用户历史生成更精准、个性化的响应
- 与规划系统协同:历史任务执行记忆为新任务规划提供经验参考,加速决策
至此,我们已完成AI Agent四大核心子系统的完整串联:响应生成 → 对话管理 → 工具调用 → 记忆系统,四者共同构成了Agent的智能闭环。下一篇文章将探讨多Agent协作架构,如何通过专业化分工与通信协议解决单Agent无法胜任的复杂任务。

发表评论 取消回复