云计算百科
云计算领域专业知识百科平台

AI Agent 的记忆系统:短期长期与工作记忆

AI Agent 的记忆系统:短期长期与工作记忆

让 Agent 记住一件事很容易,难的是决定"什么时候记、记在哪、什么时候取回来、什么时候丢掉"。上下文窗口只有那么长,而对话可以无限长——这三类记忆的分工就是为此而生。

一、背景与痛点

所有做过 Agent 的人都撞过同一堵墙:上下文窗口有限。

一个客服 Agent 处理一小时的对话可能有上百轮;一个编码 Agent 拆解任务、试错、回滚,中间状态更是一大堆。如果全部塞进上下文:

  • 贵:token 是线性计费的,历史越长每轮成本越高;
  • 慢:prompt 越长,首 token 延迟越大;
  • 反而更差:无关历史会稀释注意力,模型开始抓不住重点(“lost in the middle”)。

但简单粗暴地"只保留最近几轮"也有代价:

  • 用户三轮前提过的偏好(“我倾向直达,不中转”)会被遗忘;
  • 任务做到一半的中间状态(已经确认了日期和目的地)会丢失;
  • 多次会话之间完全失忆,每次都要重新自我介绍。

所以成熟的 Agent 通常同时维护三层记忆,各自解决不同的问题。

二、核心原理

1. 短期记忆:滑动窗口 + 保真

短期记忆保留"最近若干轮对话的原文"。它保真度最高,但容量最小。

budgetshort=窗口轮数×平均轮长度\\text{budget}_{\\text{short}} = \\text{窗口轮数} \\times \\text{平均轮长度}budgetshort=窗口轮数×平均轮长度

代价是线性的。只要窗口滑动,滑出去的信息就永久丢失——所以关键信息必须在滑出前被"下沉"到另外两层。

2. 工作记忆:显式任务状态

工作记忆不存原文,存的是结构化的任务状态:目标、已确认的槽位、已完成的步骤。

state = {
"goal": "订周六杭州火车票",
"slots": {"日期": "周六", "目的地": "杭州", "时间": "上午", "出发地": "上海", "座席": "二等座"},
"done": ["确认时间", "确认出发地"],
}

它的价值在于把"多轮追问"变成"显式状态管理":

  • 不用重复问已经答过的槽位(token 省、体验好);
  • 缺哪个槽位一目了然,可以直接发问;
  • 任务中断后可以恢复。

工作记忆只有几百 token,是三种记忆里性价比最高的一层——但它需要提前设计 schema,属于"工程活"而非"自动能力"。

3. 长期记忆:向量检索

长期记忆把跨会话的知识存进向量库,检索时只注入 top-k 结果:

sim(q,m)=e(q)⋅e(m)∥e(q)∥ ∥e(m)∥\\text{sim}(q, m) = \\frac{\\mathbf{e}(q)\\cdot \\mathbf{e}(m)}{\\|\\mathbf{e}(q)\\|\\,\\|\\mathbf{e}(m)\\|}sim(q,m)=e(q)e(m)e(q)e(m)

代码里的玩具演示中,查询"帮我订周六上午的火车票"命中了两条记忆(“不喜欢中转”、“上次选了二等座”);查询"我应该在哪儿取票"命中的是"取票用身份证"。这两次命中的记忆,都不是最近几轮对话里出现过的——这正是长期记忆的价值。

关键点:注入的只有 top-k,不是整个库。所以长期记忆的容量是"无限"的,但成本只是每次检索的 k 条。

4. 三层的分工与成本

记忆类型容量成本风险
短期(原文窗口) 几千 token token 线性占用 滑出即丢失
工作记忆(状态) 几百 token 结构化、极省 需设计 schema
长期(向量库) 无限 仅注入 top-k 有检索误差、需维护

三者缺一不可:短期保对话流畅,工作记忆保任务正确,长期记忆保个性化。

5. 什么时候"写"进长期记忆

这是最容易做错的一环。常见策略:

  • 显式记住:用户说"记住我偏好直达",直接写入;
  • 自动摘要:会话结束时让模型抽取"值得跨会话复用的事实",过滤掉寒暄与临时信息;
  • 按需提升:短期记忆里被反复引用的信息,提升为长期记忆。

反面模式是"把所有历史都塞进向量库"——检索噪声会急剧上升,命中率反而下降。

三、代码实战

用 numpy 实现三层记忆的最小模型。

import numpy as np

rng = np.random.default_rng(7)

# 短期:滑动窗口
dialogue = [
"用户:帮我查一下上海明天的天气", "助手:上海明天 22-28 度,多云转晴",
"用户:那后天呢", "助手:后天 20-26 度,有小雨",
"用户:周六我要去杭州,那边呢", "助手:杭州周六 19-25 度,阴天",
"用户:好的,帮我订周六的火车票", "助手:请问您想订几点的车次",
"用户:上午的",
]
WINDOW = 4
print("对话 %d 轮,窗口保留最近 %d 轮:" % (len(dialogue), WINDOW))
for line in dialogue[WINDOW:]:
print(" " + line)

# 长期:向量检索(玩具嵌入)
memories = [
"用户常住上海,出差常去杭州", "用户偏好上午出发的火车",
"用户不喜欢中转,倾向直达", "用户有 12306 账号,取票用身份证",
"用户上次订票选了二等座",
]

def embed(text, dim=32):
v = np.zeros(dim)
for i, ch in enumerate(text):
v[(ord(ch) + i) % dim] += 1.0
return v / (np.linalg.norm(v) + 1e-9)

MEM = np.stack([embed(m) for m in memories])
for q in ["帮我订周六上午的火车票", "我应该在哪儿取票"]:
sims = MEM @ embed(q)
order = np.argsort(sims)[:2]
print("查询「%s」→ 命中:" % q)
for i in order:
print(" [%.3f] %s" % (sims[i], memories[i]))

# 工作记忆:任务状态
state = {"goal": "订周六杭州火车票",
"slots": {"日期": "周六", "目的地": "杭州", "时间": None, "座席": "二等座"},
"done": []}
for k, v in [("时间", "上午"), ("出发地", "上海")]:
state["slots"][k] = v
state["done"].append("确认" + k)
missing = [k for k, v in state["slots"].items() if v is None]
print("工作记忆槽位:", state["slots"])
print("待补槽位:%s" % (missing if missing else "无(可以执行下单)"))

运行结果:

对话 9 轮,窗口保留最近 4 轮:
助手:杭州周六 19-25 度,阴天
用户:好的,帮我订周六的火车票
助手:请问您想订几点的车次
用户:上午的
查询「帮我订周六上午的火车票」→ 命中:
[0.401] 用户不喜欢中转,倾向直达
[0.382] 用户上次订票选了二等座
查询「我应该在哪儿取票」→ 命中:
[0.294] 用户上次订票选了二等座
[0.197] 用户有 12306 账号,取票用身份证
工作记忆槽位: {'日期': '周六', '目的地': '杭州', '时间': '上午', '座席': '二等座', '出发地': '上海'}
待补槽位:无(可以执行下单)

三点值得注意:

  • 早期的天气信息已经滑出窗口(只留最近 4 轮),但用户偏好仍能通过长期记忆找回;
  • 长期记忆命中与检索词相关:"取票"命中了身份证那条,与对话最近的几轮无关;
  • 工作记忆把"两轮追问"压缩成两个键值对,没有占用对话上下文。

四、关键经验/避坑

  • 不要把全部历史塞进上下文。 既贵又会稀释注意力,通常"最近 N 轮 + 摘要"比"全部原文"效果更好。
  • 摘要要定期做,不要等到溢出。 上下文快满时再做摘要,往往已经丢掉了最重要的细节。
  • 长期记忆的写入要有过滤。 只写"跨会话可复用"的事实,别把寒暄和临时状态也写进去,否则检索质量会持续下降。
  • 检索数量 k 要小。 注入过多"相关但无用"的记忆,等于给模型加噪声;一般 k=3~5。
  • 记忆要可删除、可更新。 用户说"我不再偏好直达了",旧记忆必须能失效,否则 Agent 会一直用错误偏好。
  • 别忘了一致性。 三层记忆可能互相矛盾(工作记忆说"周六",长期记忆说"用户通常周日出差"),要有明确的优先级规则(当前会话 > 长期记忆)。
  • 五、完整系列推荐

    📚 本文选自《AI Agent 工程实战》系统教程(第 015 期:记忆系统——短期/长期/工作记忆),每期配可运行 Python 代码。

    完整系列已在 ima 知识号【Kruptos】持续更新:

    • 🗂 73+ 技术知识库:AI Agent 工程实战、AI 大模型与边缘智能、大模型微调实战、端侧大模型推理引擎、多模态大模型详解、推荐系统详解、数据库系统、凸优化与数值方法……几乎覆盖全部软硬件技术栈
    • 🧠 8 款 AI 技能:系列生产、知识库管理、CMMI 受管开发、自进化 Agent 等,已在 ima 技能广场上架,即装即用
    • ✅ 全部免费订阅,后续更新自动推送

    🔍 订阅方式:打开 ima(腾讯智能工作台)→ 搜索「Kruptos」→ 一键订阅;或在 ima 内直接搜索《AI Agent 工程实战》。


    作者:Kruptos(西电毕业,13 年无线通信/DSP/嵌入式科研,现深耕 AI 与云原生)
    原创内容,转载注明出处。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » AI Agent 的记忆系统:短期长期与工作记忆
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!