Day 008:Agent 记得越多越好吗?短期与长期记忆的底层逻辑

作者:kisbad日期:2026/7/18

系列: 100 天系统学习 AI Agent 开发
当前阶段: Agent 基础与环境搭建
今日目标: 搞懂短期记忆与长期记忆的核心差异,建立记忆治理机制。

AI Agent 大模型 Agent开发 LangGraph

很多刚接触 Agent 开发的同学,在加上数据库之后都会有一种错觉:“我的 Agent 终于拥有长期记忆了,它可以记住一切!”

但实操下来往往会遇到这种尴尬场景:学习助手如果每次都问“你学到第几天了”,会显得很智障;可如果它把你随口抱怨的一句“我最近不想学 Python”永久保存,几个月后还在强行给你推 Java 教程,又会显得固执且不可理喻。

“记住一切”听起来很贴心,在工程实现上其实非常危险。

问题不在于有没有记忆,而在于:什么信息该记?保存多久?发生冲突听谁的?谁有权限修改? 今天,我们就来拆解 Agent 的记忆系统。


💡 核心认知:别把聊天记录等同于记忆

很多新手有个误区,觉得放在内存里的叫短期记忆,写进 MySQL/向量数据库里的就叫长期记忆。其实根本不是一回事。真正的区别在于作用域和治理策略。

现在的我,在架构上至少会把记忆拆成这三层:

层次服务范围典型内容生命周期与治理
工作状态 (State)当前一次任务已完成的步骤、工具返回的结果、待确认的动作任务结束即可清理或归档,用完即弃
短期记忆 (Short-term)当前上下文线程代词指代(“它”是谁)、用户刚补充的参数、本轮对话摘要随线程存在,超出上下文窗口可压缩
长期记忆 (Long-term)跨会话 / 全局稳定的用户偏好、明确的目标、经确认的事实需长久落盘,但必须可更新、可过期、可删除

把一整段废话连篇的聊天记录无脑塞进向量数据库,不叫长期记忆,那叫制造上下文噪声和隐私负担。


🛠️ 实战拆解:一个学习 Agent 该怎么存信息?

我以咱们这个「学习助手」为例,盘点了一份记忆分类草案。大家在做自己的业务 Agent 时,可以直接套用这个逻辑来梳理需求:

提取到的信息记忆类型写入条件过期或修正规则(极重要)
当前正在讨论“Day 008”短期记忆会话开始会话结束即丢弃
本轮写文章还缺一个示例工作状态任务被 Agent 拆解后示例补齐后立即删除
用户明确目标是完成100天长期事实用户明确确认永久有效,直到用户主动修改
常用语言为 Python长期偏好多次高频出现 / 主动确认90 天未提及后,使用前需再确认
本轮“联网查询”工具超时报错工作状态工具调用失败写入系统 Log,绝不当做用户偏好
用户的薄弱点是错误处理长期推断评测数据支持,且必须标明是“推断”新一轮评测后可被直接覆盖
密码、密钥或身份证信息🛑 禁止写入规则引擎强制拦截永远不进入记忆系统

这里隐藏了一个极其重要的工程细节:必须把“事实”和“推断”分开。
用户自己说的叫“事实”;系统根据几道错题推测出来的叫“推断”。推断出来的东西,必须保存证据和置信度,且优先级永远低于事实。


⚙️ 一条靠谱的记忆写入流水线

为了避免把垃圾数据和敏感数据写入记忆,在落盘前我们需要一条标准的流水线:

对话或任务事件

大模型提取候选记忆

是否必要且允许保存?
(敏感词/价值判断)

仅留在当前上下文

去重与冲突检查

用户确认或规则验证

带上来源、时间、TTL 落盘

检索时按作用域过滤

到期、修正或删除

如果你现在就想动手敲代码,别急着一上来就搞向量数据库(Vector DB)。先用一个普通的数据结构把约束字段定好。在 Python 里,你的记忆记录实体(Entity)至少应该是这样的:

1from dataclasses import dataclass
2from datetime import datetime
3from typing import Literal
4
5@dataclass
6class MemoryRecord:
7    user_id: str
8    namespace: Literal["profile", "learning", "preference"] # 隔离命名空间
9    key: str
10    value: str
11    source: str               # 来源:用户主动说 / 系统推测
12    created_at: datetime
13    confidence: float         # 置信度:推测的结果置信度要调低
14    expires_at: datetime | None = None  # TTL:很多记忆是会过期的
15    status: Literal["active", "superseded", "deleted"] = "active" # 软删除机制
16
17

在组装 Prompt 时,先按 namespace 隔离,再按相关性提取,最后检查 statusexpires_at


🤔 踩坑复盘:我目前还在纠结的边界

在设计这套系统时,我发现最棘手的问题是冲突解决机制

偏好变了(比如以前喜欢 Python,现在喜欢 Go),我们可以直接用新记录覆盖老记录。但事实冲突却不能简单以“最新”为准。
比如:用户今天在聊天里吹牛说自己“Day 20 已经做完了”,但底层的进度系统查出来他只打卡到了 Day 8。这个时候 Agent 到底信谁?

我目前的暂定解法是:不同来源的信息要设定“可信等级”(系统 API 数据 > 用户随口说的数据)。遇到冲突时,Agent 不应该悄悄覆盖数据,而是把差异抛出来,向用户发起确认。

记忆系统的温度,不在于它像个舔狗一样每次都说“我记得你”,而在于它永远不会拿错误、过期或不该保存的信息,自作主张地替用户做决定。


📦 今日学习小结

老规矩,梳理成我们的 JSON 知识拼图,作为日后复盘的线索:

1{
2    "day": 8,
3    "topic": "记忆系统入门:短期记忆、长期记忆到底差在哪",
4    "why_it_matters": "毫无治理的全局记忆会变成上下文噪声和隐私负担。必须区分工作状态、短期上下文和长期记忆。",
5    "today_task": "定义了记忆实体的核心字段,明确了记忆写入流水线中的拦截、去重和过期规则。",
6    "pitfall": "将大模型推断的结论直接等同于用户事实。推断数据必须附带置信度且允许被事实覆盖。",
7    "next_question": "既然短期和长期记忆理清了,明天该看看主流框架(比如 LangGraph  Checkpointer)是怎么在工程上落地这套机制的?"
8}
9
10

✅ 读者自查清单:

  • 你存记忆的时候,加上创建时间和 expires_at(过期时间)了吗?
  • 你的系统能区分出“用户事实”和“模型推断”吗?
  • 检索记忆时,你是全量丢给大模型,还是做过业务过滤了?

Day 008:Agent 记得越多越好吗?短期与长期记忆的底层逻辑》 是转载文章,点击查看原文


相关推荐


离线优先:无网络权限的鸿蒙 Flutter 应用设计
程序员小Pyy2026/7/10

在万物互联的时代,做一个"断网"应用反而是最激进、也最负责任的设计选择。本文以 E-Brufen 为例,从架构哲学、存储设计、代码实现到用户体验,全面探讨离线优先应用的构建方法。 一、为什么选择离线? 1.1 一句话:零权限 打开 E-Brufen 的 ohos/entry/src/main/module.json5,你会看到这样一行配置: "requestPermissions": [] 一个空数组。没有 ohos.permission.INTERNET、没有 ohos.p


定时任务(root)与 Web(www)权限冲突问题——使用 ACL 彻底解决
半桶水专家2026/7/2

在 Linux 服务器中,权限冲突问是一个非常常见的问题。 例如: Cron 定时任务:root 用户执行 PHP(Nginx + PHP-FPM):www-data 或 www 用户执行 Apache:apache 用户执行 Tomcat:tomcat 用户执行 两个不同用户需要共同读写同一目录。 很多人第一反应就是: chmod -R 777 data/ 虽然能解决问题,但非常不安全。 Linux 提供了更好的方案——ACL(Access Contr


MySQL 8.0 实现 JSON 字段全文检索 | ngram 分词支持单字/字母/中英文混合搜索
勿忘初心12212026/6/23

MySQL 8.0 实现 JSON 字段全文检索 | ngram 分词支持单字/字母/中英文混合搜索 前言一、业务场景二、技术痛点三、概念解释3.1 ngram 中日韩分词器3.2 生成列(Generated Column)3.3 全文索引(FULLTEXT INDEX)3.4 停用词表3.5 BOOLEAN MODE(布尔检索模式) 四、环境五、MySQL 全局配置(my.cnf / my.ini)5.1 完整配置文件5.2 重启 MySQL 服务5.3 验证配置是否生效 六、创


Claude Codde 入门教程—— 从零到独立完成项目
fa_lsyk2026/6/15

Claude Code 入门教程 适合人群:技术小白、编程初学者、对 AI 编程感兴趣的所有人 学习目标:读完本文后,你能够独立使用 Claude Code 完成一个完整的 OCP 项目 阅读时间:约 45-60 分钟 难度等级:★☆☆☆☆(零基础友好) 目录 前言:你即将拥有的"超能力"什么是 Claude Code?—— 你的 AI 编程伙伴安装 Claude Code —— 3 步搞定第一次对话 —— 跟 AI 说"你好"核心概念:理解 Claude Code 的"


HDFS 频繁进入安全模式的原因及解决方案
数据小羊2026/6/8

你是否遇到过 HDFS 集群时不时进入安全模式(Safe Mode)的问题?这不仅会影响数据的读写,还可能导致整个 Hadoop 生态系统的应用出现异常。本文将深入分析 HDFS 安全模式的触发机制,以及如何有效解决这个棘手问题。 什么是 HDFS 安全模式? HDFS 安全模式是一种保护机制,在这种状态下,文件系统只允许读操作,不允许任何修改文件系统的操作。通常在 NameNode 启动时会进入安全模式,以确保文件系统的元数据和数据块信息的一致性。 为什么 HDFS 会频繁进入安全模


【Redis】网络高并发模型
步十人2026/6/1

目录 一、 核心场景:百万并发下的秒杀大考1. 传统多线程服务器会怎么样?2. Redis 凭什么能抗住?第一步:建立连接(非阻塞 + epoll)第二步:读取请求(非阻塞 I/O)第三步:执行命令(单线程串行,纯内存操作)第四步:返回结果(非阻塞写) 二、 深度对比:多线程阻塞 vs 单线程非阻塞三、 演进:Redis 6.0+ 的多线程 I/O 革命四、 微观视角:一个秒杀请求的时间线拆解五、 致命死穴:如果某个命令很慢怎么办?本篇总结 一、 核心场景:百万并发


你写的代码没有测试,就像出门不锁门——Jest + Testing Library 从入门到不慌
kyriewen2026/5/11

你改了一行代码,手动点了一遍页面,觉得没问题就上线了。结果用户反馈“登录按钮点不动了”。你心里咯噔:我根本没改登录相关代码啊。今天我们来给你的代码装一把“智能门锁”——单元测试。用 Jest + Testing Library,把常见 Bug 锁在门外,让你改代码时不再心惊胆战。 前言 很多前端对测试的态度是:项目那么赶,哪有时间写测试?结果修 Bug 的时间比写代码还多。你花 20 分钟写的测试,可能帮你省掉 2 小时的通宵排查。 测试不是“额外工作”,而是安全网。当你需要重构、升级依赖、添


Git Worktree: AI 编程 Agent 并行开发的秘密武器
陈佬昔编程人生2026/5/1

你在 AI 编程工具里开发一个新功能,突然产品过来让修复一个紧急 bug。于是你开了两个 AI Agent: Agent A:在 feature/new-dashboard 上写新功能 Agent B:在 fix/login-bug 上修一个登录 Bug 你心想:"两个 Agent 同时干活,效率翻倍。" 但三分钟后你回到编辑器,看到的是一幅这样的画面: app/ ├── dashboard.tsx ← Agent A 刚改了这里,但没写完 ├── login.tsx ←


我把 Hermes 里的模型几乎测了一遍,得出一个很扎心的结论:越贵的,往往越强
孟健AI编程2026/4/23

大家好,我是孟健。 这几周我在 Hermes 里来回切了很多模型。真跑下来,我越来越确认一件事:模型的水平,很多时候早就写在价格里了。把性价比榜倒过来看,八九不离十就是质量排行。 这不是 benchmark 结论。 是我把 Hermes 当生产底座,拿它去跑多 Agent、长流程、代码任务、资料整理之后,交出来的体感排序。 01 先给排序:贵,很多时候不是乱贵 先看这张图。 图里是按价格排的:便宜的在前,贵的在后。 但我这轮实际测下来,如果你把它倒过来看,它反而更像质量榜。 我的主观体感


c++从入门到跑路——string类
小肝一下2026/4/14

c++从入门到跑路——string类 1.为什么学习string类? 1.1 C语言中的字符串 C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列 的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户 自己管理,稍不留神可能还会越界访问。 1.2 两个面试题(暂不做讲解) 把字符串转换成整数_牛客题霸_牛客网 415. 字符串相加 - 力扣(LeetCode) 在OJ中,有关字符串的题目基本以stri

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读