Agent 记忆:短期上下文、长期向量记忆与遗忘策略
Agent 记忆分两层:短期记忆是当前对话/任务的上下文窗口,长期记忆跨会话保存用户偏好、事实和历史。长期记忆常用向量库、KV 存储或结构化数据库;也有情景记忆(发生过什么)、语义记忆(事实)和程序性记忆(怎么做)的划分。
记忆不是“存得越多越好”。要设计写入策略(什么值得记)、读取策略(何时检索)、遗忘策略(何时删除/过期)和隔离策略(用户/租户不能串)。记忆内容同样可能被注入或包含敏感信息,读写都要做权限和内容校验。
# 短期:保留最近 N 轮,超出后摘要
messages = recent_messages[-20:]
summary = llm.summarize(old_messages)
messages = [{"role": "system", "content": f"历史摘要:{summary}"}] + messages
# 长期:带元数据的向量记忆,按用户隔离
memory_record = {
"user_id": user.id,
"tenant_id": user.tenant_id,
"type": "preference",
"text": "用户偏好简洁回答,使用中文",
"created_at": now(),
"ttl_days": 180,
}
vector_store.upsert(record_id=..., vector=embed(text), payload=memory_record)
# 读取时强制过滤 user_id/tenant_id
memories = vector_store.search(query_vector, filter={"user_id": user.id}, top_k=5)
# LangGraph checkpointer:按 thread_id 保存对话状态
from langgraph.checkpoint.memory import MemorySaver
graph = builder.compile(checkpointer=MemorySaver())
config = {"configurable": {"thread_id": f"user:{user.id}:chat:{chat_id}"}}
graph.invoke(inputs, config)
记忆治理:
- 写入:只记长期有用、可验证的信息;敏感信息脱敏
- 读取:按用户/租户/场景过滤,控制条数和相关性
- 遗忘:TTL、用户删除、纠错覆盖
- 审计:谁写入、何时读取、被哪个回答使用
合上页面,先回答,再展开对照。
小程序版
微信扫码,随时查命令