Memory Retrieval
记忆检索从长期记忆里挑出和当前问题相关的那一小部分塞进上下文。
详解
记忆检索是长期记忆系统的「读」操作:在每次对话开始时,根据当前用户输入,从外部存储的大量历史信息中挑选出与本次问题最相关的若干条,注入到上下文里,让 Agent 仿佛「想起来了」相关经历。这是解决一个核心矛盾的方案:长期记忆可能积累了数千条历史,但上下文窗口只能容纳有限 token——你不可能每次都把所有历史都塞进去,必须只取最相关的那部分。检索的技术手段主要有两种:一是关键词/精确匹配(适合结构化事实,如「用户名 = 小明」);二是向量相似度搜索(适合语义内容,把当前问题和历史记忆都转成向量,找最近邻)。实践中最常见的是向量检索:把每段历史存成向量,检索时把用户问题也转成向量,用余弦相似度找出最接近的 Top-K 条历史,拼入 system prompt 或 context 开头。记忆检索的质量直接决定 Agent 的「记性」好不好——检索召回率低,该记的记不住;检索精确度低,不相关的信息进来反而干扰模型。
一个类比
就像你在找一本几年前读过的书里的某段话:你不可能把整本书重新从头读一遍,而是先回忆「应该在哪个章节讲过」,翻到那里,找到那段话,摘出来。向量检索就是那个「感觉应该在这里」的直觉——只不过它是用数学来算相关度的,比人类直觉更系统。
举个例子
# 演示最简向量检索原理(使用内存模拟,生产环境用 Chroma/pgvector 等)
import anthropic
import math
client = anthropic.Anthropic()
# 伪 embedding 函数:只演示检索流程,生产中替换为 OpenAI / Cohere / BGE 等向量模型
def get_embedding(text: str) -> list[float]:
# 注意:Anthropic 目前没有 embedding 端点
import hashlib, struct
h = hashlib.sha256(text.encode()).digest()
return [struct.unpack('f', h[i:i+4])[0] for i in range(0, 16, 4)] # 4 维演示向量
def cosine_similarity(a: list[float], b: list[float]) -> float:
dot = sum(x * y for x, y in zip(a, b))
norm_a = math.sqrt(sum(x**2 for x in a))
norm_b = math.sqrt(sum(x**2 for x in b))
return dot / (norm_a * norm_b + 1e-9)
# 模拟长期记忆库:每条记录是 (文本, 向量)
memory_store = [
("用户小明是 Python 初学者,不喜欢复杂术语", None),
("上次对话讨论了列表推导式,用户觉得很有用", None),
("用户问过异步编程,当时说太难了先跳过", None),
]
memory_store = [(text, get_embedding(text)) for text, _ in memory_store]
def retrieve_memory(query: str, top_k: int = 2) -> list[str]:
"""检索与 query 最相关的 top_k 条长期记忆"""
q_vec = get_embedding(query)
scored = [(cosine_similarity(q_vec, vec), text) for text, vec in memory_store]
scored.sort(reverse=True)
return [text for _, text in scored[:top_k]]
# 每次对话开始时先检索相关记忆,注入上下文
user_question = "能帮我复习一下上次学的内容吗?"
relevant = retrieve_memory(user_question)
context = "\n".join(f"- {m}" for m in relevant)
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=256,
system=f"根据以下用户历史记忆来回答:\n{context}",
messages=[{"role": "user", "content": user_question}],
)
print(resp.content[0].text)PYTHON 示例
相关概念
- → Long-term Memory· 长期记忆
- → Retrieval / Top-K· 检索