Long-term Memory
长期记忆外挂存储——数据库、向量库、文件,跨会话保留。
详解
长期记忆是指存储在 Agent 进程之外的持久化数据——数据库、向量库、文件系统——无论对话结束、程序重启还是换一台服务器,数据都不会消失。短期记忆(messages 列表)只活在一次调用的上下文里;长期记忆打破了这个边界,让 Agent 能在下一次对话时还「记得」上一次发生了什么。在工程上,长期记忆通常分两类:一是结构化存储(SQLite、PostgreSQL),用来保存用户偏好、任务状态、已知事实等结构化信息;二是向量存储(Chroma、Pinecone、pgvector),用来把历史对话或文档嵌入成向量,之后按语义相似度检索——这正是记忆检索(memory retrieval)的基础。长期记忆不是自动的:Agent 需要主动判断「这件事值得保存」,写入存储;下一次对话开始时,再主动检索「哪些历史信息和当前问题相关」,塞入上下文。遗忘策略(何时清理旧记忆)同样是长期记忆系统设计的重要一环。
一个类比
短期记忆是你开会时脑子里暂时记着的东西,散会就忘;长期记忆是你回家后把要点记进笔记本,下次开会前翻出来温习。笔记本在桌上,不管你睡没睡觉,内容都在那里。
举个例子
import sqlite3
import anthropic
client = anthropic.Anthropic()
# 用 SQLite 实现最简单的跨会话长期记忆
conn = sqlite3.connect("agent_memory.db") # 文件保存在磁盘,进程重启不丢失
conn.execute("CREATE TABLE IF NOT EXISTS facts (id INTEGER PRIMARY KEY, content TEXT)")
def remember(fact: str):
"""主动把要点写入长期记忆"""
conn.execute("INSERT INTO facts (content) VALUES (?)", (fact,))
conn.commit()
def recall_all() -> str:
"""读出所有记忆,塞进 system prompt"""
rows = conn.execute("SELECT content FROM facts").fetchall()
return "\n".join(r[0] for r in rows)
# 第一次对话:用户告知偏好,主动保存
remember("用户叫小明,偏好简短回答,母语是中文")
# 下次对话(新进程):读出长期记忆注入上下文
long_term = recall_all()
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=128,
system=f"关于用户的已知信息:\n{long_term}",
messages=[{"role": "user", "content": "你还记得我是谁吗?"}],
)
print(resp.content[0].text)PYTHON 示例
相关概念
- → Vector Database· 向量数据库
- → Memory Retrieval· 记忆检索