Agent 记忆系统设计:长期记忆与上下文管理的工程方案
Agent 记忆系统设计长期记忆与上下文管理的工程方案一、健忘的 Agent重复对话背后的记忆缺位用过 Agent 的人都有个体感它今天教过的东西明天就忘。同一个问题反复问每次都从头解释。长对话进行到第二十轮前面提到的关键约束已经丢失。这不是模型不够聪明是它根本没有记忆这一层。大模型本身是无状态的。每一次推理都是一次从零开始的计算。所谓的对话历史其实是把上文重新塞进上下文窗口。窗口一满老内容就被截断或压缩。信息流失不可避免。生产场景里这个问题更刺眼。客服 Agent 记不住用户上周的诉求。编程 Agent 记不住项目约定的代码风格。运维 Agent 记不住上个月处理过同类故障的方案。每一次都在重复踩坑每一次都在重新发现轮子。记忆系统要解决的不只是存下来。还要解决什么时候检索、检索什么、什么时候遗忘。存而不检等于没存检而不准等于噪声。不遗忘记忆库会越来越脏最终拖垮检索质量。本文探讨 Agent 记忆系统的工程方案。从短期、工作、长期三层记忆切入落到检索与遗忘策略。目标是让 Agent 真正积累经验而不是每次从零开始。二、分层记忆短期、工作、长期的协作机制记忆不是单一容器而是分层结构。不同层负责不同时间尺度的信息。各司其职才能兼顾速度与容量。短期记忆即上下文窗口。存放当前对话的近期消息。读取零延迟但容量受 token 限制。越靠后的内容越容易被截断。工作记忆是 scratchpad 草稿区。Agent 在推理过程中产生的中间结论。比如用户提到的约束、已尝试过的方案。不进对话历史但参与下一轮决策。长期记忆是持久化的向量库。跨会话存储事实、偏好、历史经验。通过语义检索按需调取。容量几乎无限但检索有延迟和成本。三者协作的链路如下flowchart TD A[用户输入] -- B[短期记忆: 上下文窗口] A -- C[工作记忆: scratchpad] A -- D[长期记忆: 向量检索] B -- E[拼装 Prompt] C -- E D -- E E -- F[模型推理] F -- G[输出响应] F -- H[更新工作记忆] F -- I[写入长期记忆] style D fill:#fff3e0 style I fill:#e8f5e9关键在按需检索。不是每次都把长期记忆全塞进 prompt。而是先用用户输入做语义检索只取相关的几条。否则 prompt 臃肿token 成本飙升模型注意力也被稀释。检索质量决定记忆系统的上限。向量召回不准相关记忆取不到。召回过多噪声淹没信号。需要在 top-k 数量、相似度阈值、rerank 之间找平衡。遗忘同样关键。过时信息不清理会污染检索结果。比如用户上周说要 A 方案这周改主意要 B 方案。旧记忆不遗忘Agent 还会按 A 行事。需要有 TTL、版本标记、显式覆盖等机制。三、生产级实现分层记忆管理器下面用 Python 实现一个分层记忆管理器。聚焦长期记忆的写入与检索含错误处理与遗忘策略。import time import hashlib from dataclasses import dataclass, field from typing import Optional dataclass class MemoryItem: 长期记忆的单条记录内容、元数据、过期时间 content: str scope: str # 所属会话或用户标识 tags: list[str] field(default_factorylist) created_at: float field(default_factorytime.time) ttl: Optional[float] None # 秒None 表示永久 content_hash: str def __post_init__(self) - None: # 用内容哈希做去重键避免相同事实反复写入 self.content_hash hashlib.md5(self.content.encode()).hexdigest() class LongTermMemory: 长期记忆库向量检索 TTL 遗忘 去重 def __init__(self, embed_fn, top_k: int 5, min_score: float 0.6) - None: # embed_fn 由调用方注入便于切换模型与 mock 测试 self._embed embed_fn self._store: dict[str, MemoryItem] {} self._vectors: dict[str, list[float]] {} self.top_k top_k self.min_score min_score def add(self, item: MemoryItem) - bool: # 去重同 scope 下相同内容不重复写入 key f{item.scope}:{item.content_hash} if key in self._store: return False try: vec self._embed(item.content) except Exception as e: # 嵌入失败不阻断主流程仅记录并跳过 # 真实系统接日志与告警这里简化 print(f[memory] embed failed: {e}) return False self._store[key] item self._vectors[key] vec return True def search(self, query: str, scope: str) - list[MemoryItem]: try: q_vec self._embed(query) except Exception as e: print(f[memory] query embed failed: {e}) return [] scored [] for key, item in list(self._store.items()): if not item.scope scope: continue # 过期清理检索时顺手剔除 TTL 到期的记忆 if item.ttl and time.time() - item.created_at item.ttl: self._store.pop(key, None) self._vectors.pop(key, None) continue score self._cosine(q_vec, self._vectors[key]) if score self.min_score: scored.append((score, item)) # 按相似度降序取 top_k scored.sort(keylambda x: x[0], reverseTrue) return [item for _, item in scored[: self.top_k]] staticmethod def _cosine(a: list[float], b: list[float]) - float: # 余弦相似度向量检索的基础度量 # 真实系统用 faiss 或 milvus这里内联便于阅读 dot sum(x * y for x, y in zip(a, b)) na sum(x * x for x in a) ** 0.5 nb sum(y * y for y in b) ** 0.5 if na 0 or nb 0: return 0.0 return dot / (na * nb) if __name__ __main__: # mock 一个嵌入函数真实环境替换为线上模型 def fake_embed(text: str) - list[float]: return [float(len(text)), float(text.count( ))] mem LongTermMemory(embed_fnfake_embed, top_k3, min_score0.5) mem.add(MemoryItem(content用户偏好 Python, scopeu1, ttl3600)) mem.add(MemoryItem(content用户偏好 Python, scopeu1)) # 去重不会写入 print(f命中 {len(mem.search(用户喜欢什么语言, u1))} 条)真实系统会在几个方向上扩展。向量库换成 faiss、milvus 或 pgvector支撑百万级记忆。检索前加 rerank 模型提升 top-k 的精度。写入前做事实抽取只存结构化结论不存原始对话。遗忘策略叠加显式覆盖用户改主意时主动作废旧记忆。四、Agent 记忆系统设计的代价与边界记忆系统能力强但坑也深。召回质量不稳。向量相似度高不等于语义相关。用户喜欢 Python和用户讨厌 Python向量很近。需要配合 rerank 或基于元数据的过滤。否则错误记忆会误导决策。记忆污染。Agent 把幻觉或错误结论写进长期记忆。下一轮又检索出来当事实用错误被放大。写入前必须做事实校验或人工审核。高风险记忆要标记待确认状态。隐私与合规。长期记忆里可能沉淀用户敏感信息。跨用户共享、跨境传输、留存周期都成问题。需要按 scope 严格隔离敏感字段脱敏。并支持按用户请求彻底删除。成本与延迟。每次检索都要做向量计算和 rerank。高频对话下记忆系统的开销可能超过推理本身。需要对热查询做缓存对冷记忆做分层存储。记忆系统的治理比建库更难。把记忆写进去只是第一步真正的工程量在长期运营定期审计记忆库里的脏数据、监控召回质量指标、处理用户的遗忘请求。另一个被忽视的点是记忆的可解释性Agent 引用了一条记忆做决策必须能追溯到来源时间与上下文否则出错时无法定位是哪条记忆在作祟。最后记忆系统要预留关停开关在召回质量下滑或合规风险出现时能快速降级为无记忆模式保住主链路可用。五、总结Agent 的记忆系统本质是让无状态模型获得跨会话的经验积累。机制上用分层结构兼顾速度与容量用向量检索按需调取。工程上靠去重、TTL、rerank 守住召回质量与成本。落地路线先上短期记忆管理上下文窗口再接工作记忆做中间结论暂存长期记忆用向量库加 rerank最后补审计、隔离与遗忘治理。记忆不是越多越好而是越准越好。

相关新闻

STC15W408AS单片机通过SPI驱动ST7567液晶屏的可直接烧录工程包

STC15W408AS单片机通过SPI驱动ST7567液晶屏的可直接烧录工程包

本文还有配套的精品资源,点击获取 简介:基于STC15W408AS单片机,用标准四线SPI(SCLK、SID、A0、RST)驱动ST7567图形液晶屏,工程已完整实现初始化、显存写入、反显控制、睡眠模式切换和对比度调节等功能。…

2026/10/19 23:30:31 阅读更多 →
深入解析ADS8588S同步采样ADC:架构、时序与高精度数据采集系统设计

深入解析ADS8588S同步采样ADC:架构、时序与高精度数据采集系统设计

1. 项目概述:为什么我们需要同步采样ADC?在电力监控、电机驱动、多相电源分析或者振动测试这些领域,我们常常需要同时捕捉多个信号。比如,你想知道一个三相电机的三相电流和电压是否平衡,或者想分析一个机械结构上不同…

2026/10/19 22:11:40 阅读更多 →
TMS320C6746 DSP核心外设深度解析:uPP、VPIF、eCAP与eHRPWM实战指南

TMS320C6746 DSP核心外设深度解析:uPP、VPIF、eCAP与eHRPWM实战指南

1. 项目概述与核心价值在嵌入式DSP系统开发中,尤其是面对视频处理、高速数据采集或精密电机控制这类对实时性和带宽要求极高的场景,芯片自带的外设接口性能直接决定了整个系统的天花板。很多工程师在项目初期选型时,往往只关注CPU主频和内存大…

2026/10/20 15:27:30 阅读更多 →

最新新闻

系统化提升个人技能:从技能地图到学习闭环

系统化提升个人技能:从技能地图到学习闭环

今年我陆续和朋友聊了十几场关于个人成长的私话,发现大家焦虑的点出奇一致:不是没在学,而是学的东西太多太散——今天刷两节剪辑课,明天收藏几个AI工具,后天又报名一个Excel进阶班,忙活大半年,最…

2026/10/21 4:14:42 阅读更多 →
M1 Mac上VS Code配置C++调试环境:从编译器到launch.json完整指南

M1 Mac上VS Code配置C++调试环境:从编译器到launch.json完整指南

先把结论放在前面:M1芯片的Mac配置VS Code的C调试环境,核心就三件事——装好编译器、配好编译任务、配好调试任务。听起来很简单,但网上能找到的教程,十有八九还是Intel Mac时代的写法,直接照搬到Apple Silicon上&…

2026/10/21 4:14:42 阅读更多 →
大模型+阿里云生态:呼叫中心智能升级的架构设计与落地实践

大模型+阿里云生态:呼叫中心智能升级的架构设计与落地实践

做呼叫中心系统这些年,我见过太多团队在“智能升级”这件事上反复折腾。传统的IVR导航让用户按到抓狂,人工坐席被重复问题淹没,质检靠抽检基本形同虚设,知识库更新永远追不上业务变化。这些问题不是靠换一套软件就能解决的。直到大…

2026/10/21 4:14:42 阅读更多 →
Docker常用命令实战指南:镜像、容器、网络与故障排查速查手册

Docker常用命令实战指南:镜像、容器、网络与故障排查速查手册

搞技术这么多年,Docker 的命令翻来覆去就那些,但每次一到关键场景,总有人开始现场查文档。尤其是现在容器化已经成了标配,连写个小的演示项目都要起个数据库容器,Docker 用得熟不熟,直接决定你排查问题的效…

2026/10/21 4:14:42 阅读更多 →
OpenCV day4实战:从灰度化到轮廓提取的图像预处理全流程

OpenCV day4实战:从灰度化到轮廓提取的图像预处理全流程

学习OpenCV到了第4天,正好处在一个很容易让人迷茫,也很容易让人开窍的节点。我经常被刚入门的朋友问到“opencv day_4到底该学什么”,还有人已经跟着教程跑完了前3天,看完图像读取、像素操作、ROI裁剪之后,突然不知道下…

2026/10/21 4:14:42 阅读更多 →
Skills不是标签:构建可验证的能力坐标系

Skills不是标签:构建可验证的能力坐标系

1. “skills”不是标签,是能力坐标系的动态刻度最近在几个技术社区和职业发展类平台反复看到一个现象:大量简历、项目介绍、自我介绍里高频出现“skills”这个词,但点开一看,要么是堆砌一长串技术名词,要么是“精通Pyt…

2026/10/21 4:13:41 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →