一文搞懂 AI Agent 的记忆系统:从短期到长期,从本地到向量数据库
TL;DRAI Agent 为什么能「记住」你之前说的话背后的记忆系统分为三层短期记忆上下文窗口、长期记忆向量数据库、工作记忆当前会话状态。本文详解三层记忆的原理、存储方式和代码实现。1. 为什么 AI Agent 需要记忆系统对话系统有上下文窗口限制。GPT-4o 最大 128K TokensClaude 3 200K Tokens——听起来很大但一个中型项目的代码库往往超过 100 万 Tokens。如果每次对话都把所有历史塞进上下文每次请求的 Token 成本飙升超出上下文上限后无法处理模型注意力分散效果下降解决方案分层记忆系统。三层记忆架构用户输入 ↓ ┌─────────────────────────────────────┐ │ Layer 1: 工作记忆Working Memory │ │ 当前会话的核心信息LLM 直接访问 │ └─────────────────────────────────────┘ ↓压缩 → 存储 ┌─────────────────────────────────────┐ │ Layer 2: 长期记忆Long-term Memory│ │ 向量数据库支持语义检索 │ └─────────────────────────────────────┘ ↓历史归档 ┌─────────────────────────────────────┐ │ Layer 3: 档案记忆Archive Memory │ │ 历史会话归档冷存储 │ └─────────────────────────────────────┘2. 第一层工作记忆Working Memory 位置LLM 上下文窗口容量当前模型的最大上下文窗口如 128K / 200K Tokens生命周期单次对话工作记忆是 LLM 直接能「看到」的信息。你的 Prompt、历史对话、检索到的内容——都在这里。工作记忆的管理策略2.1 滑动窗口策略保留最近 N 条对话旧的自动丢弃Python - 滑动窗口实现class SlidingWindowMemory: def __init__(self, max_messages: int 20): self.max_messages max_messages self.messages [] def add(self, role: str, content: str): self.messages.append({role: role, content: content}) # 超出窗口大小时从旧到新丢弃 if len(self.messages) self.max_messages: self.messages.pop(0) def get_context(self) - list: return self.messages def count_tokens(self) - int: from tiktoken import encoding_for_model enc encoding_for_model(gpt-4o) return len(enc.encode( .join(m[content] for m in self.messages))) # 使用示例 memory SlidingWindowMemory(max_messages10) memory.add(user, 我想开发一个博客系统) memory.add(assistant, 好的你想要什么技术栈) memory.add(user, 用 FastAPI Vue) # 只保留最近 10 条2.2 摘要压缩策略当对话太长时用 LLM 压缩历史Python - 摘要压缩async def summarize_and_compress(messages: list, client) - list: 当 token 超限时压缩历史对话 old_messages messages[:-5] # 保留最近 5 条其余压缩 summary_prompt f请将以下对话压缩成一个摘要 {messages_to_text(old_messages)} 摘要要求 1. 保留关键信息需求、决策、技术选型 2. 忽略无关细节 3. 输出格式{key_info: ..., decisions: ..., pending: ...} summary_response await client.chat.completions.create( modeldeepseek-ai/DeepSeek-V3, messages[{role: user, content: summary_prompt}] ) # 压缩后的摘要 最近 5 条对话 compressed [ {role: system, content: f【会话摘要】{summary_response.choices[0].message.content}} ] messages[-5:] return compressed3. 第二层长期记忆Long-term Memory 位置向量数据库Qdrant / Chroma / Milvus容量无限制生命周期持久化长期记忆是 AI Agent 的「外部大脑」。当工作记忆不够用时从长期记忆里检索相关信息拼进上下文。3.1 为什么要用向量数据库普通数据库只能做「精确匹配」WHERE name 张三。但人类的记忆是「语义」的——你记不住「张三」这个名字但能记住「那个帮我修过 Bug 的同事」。向量数据库做的就是这件事语义检索。你问「帮我回忆一下上周讨论的技术方案」向量数据库能找到语义相近的历史记录。3.2 完整记忆系统实现Python - 完整 Agent 记忆系统import chromadb import openai from datetime import datetime # 1. 初始化向量数据库 client_db chromadb.Client() collection client_db.create_collection(agent_memory) # 2. 嵌入模型 embedding_client openai.OpenAI( api_keyyour-api-key, base_urlhttps://api.siliconflow.cn/v1 ) def get_embedding(text: str) - list: response embedding_client.embeddings.create( modeltext-embedding-3-small, inputtext ) return response.data[0].embedding # 3. 存储记忆 def store_memory(content: str, metadata: dict): 存储一条记忆到向量数据库 memory_id fmemory_{datetime.now().strftime(%Y%m%d_%H%M%S)} embedding get_embedding(content) collection.add( ids[memory_id], embeddings[embedding], documents[content], metadatas[{**metadata, created_at: datetime.now().isoformat()}] ) print(ff✅ 已存储记忆{memory_id}) # 4. 检索记忆 def retrieve_memories(query: str, top_k: int 5) - list: 语义检索相关记忆 query_embedding get_embedding(query) results collection.query( query_embeddings[query_embedding], n_resultstop_k ) memories [] for i, doc in enumerate(results[documents][0]): memories.append({ content: doc, metadata: results[metadatas][0][i], score: results[distances][0][i] }) return memories # 5. 记忆衰减策略 def decay_memories(threshold: float 0.8): 删除不重要/太久远的记忆释放空间 import time all_memories collection.get() for memory in all_memories[ids]: metadata collection.get(where{id: memory})[metadatas][0] # 1. 时间衰减超过 30 天的重要性 -0.5 created datetime.fromisoformat(metadata[created_at]) days_old (datetime.now() - created).days importance metadata.get(importance, 0.5) - (days_old / 60) if importance threshold: collection.delete(ids[memory]) print(ff️ 删除记忆{memory})3.3 自动存储记忆的时机不是所有对话都要存储。以下几个时机触发存储触发时机存储内容重要性用户明确的需求需求描述、决策结论⭐⭐⭐⭐⭐Agent 执行的关键步骤执行结果、遇到的问题⭐⭐⭐⭐代码变更改了什么文件、为什么改⭐⭐⭐⭐⭐错误和修复Bug 原因、修复方案⭐⭐⭐⭐⭐日常闲聊不存储—4. 第三层档案记忆Archive Memory 位置本地文件 / 对象存储S3容量无限制生命周期永久归档档案记忆是「记忆的记忆」——长期记忆经过压缩后归档到冷存储。Python - 档案归档import json import os from datetime import datetime ARCHIVE_DIR ./memory_archive def archive_session(session_id: str, messages: list): 归档一个完整的会话到本地文件 os.makedirs(ARCHIVE_DIR, exist_okTrue) archive_file f{ARCHIVE_DIR}/{session_id}_{datetime.now().strftime(%Y%m%d)}.json with open(archive_file, w, encodingutf-8) as f: json.dump({ session_id: session_id, archived_at: datetime.now().isoformat(), messages: messages }, f, ensure_asciiFalse, indent2) print(ff 会话 {session_id} 已归档到 {archive_file}) def load_archive(session_id: str) - list: 读取归档的会话 for filename in os.listdir(ARCHIVE_DIR): if filename.startswith(session_id): with open(f{ARCHIVE_DIR}/{filename}, encodingutf-8) as f: data json.load(f) return data[messages] return []5. 完整 Agent 记忆系统集成Python - Agent 记忆系统主类class AgentMemory: def __init__(self): # 三层记忆 self.working SlidingWindowMemory(max_messages20) self.longterm LongTermMemory() # 基于 Chroma self.archive ArchiveMemory() async def process_message(self, user_input: str, client) - str: # Step 1: 从长期记忆检索相关内容 relevant_memories self.longterm.retrieve(user_input) # Step 2: 构建 Prompt工作记忆 相关长期记忆 system_prompt f你是 Agent你的记忆如下 【相关长期记忆】 {relevant_memories} # Step 3: 调用 LLM response await client.chat.completions.create( modeldeepseek-ai/DeepSeek-V3, messages[ {role: system, content: system_prompt} ] self.working.get_context() [{role: user, content: user_input}] ) answer response.choices[0].message.content # Step 4: 自动存储重要内容到长期记忆 self.longterm.store_if_important(user_input, answer) # Step 5: 更新工作记忆 self.working.add(user, user_input) self.working.add(assistant, answer) return answer6. 常见问题Q1Token 爆炸怎么办三层记忆各司其职工作记忆满了 → 压缩 → 归档到长期记忆 → 定期清理。Q2向量数据库选哪个数据库适用场景推荐度Chroma轻量开发/本地⭐⭐⭐⭐⭐Qdrant生产环境/云部署⭐⭐⭐⭐Milvus超大规模数据⭐⭐⭐Pinecone不想运维⭐⭐⭐⭐Q3隐私数据怎么处理向量数据库可以本地部署如 Chroma/Qdrant数据不经过第三方服务器。如果对隐私要求极高建议自建。7. 总结层级存储容量检索方式生命周期工作记忆内存128K-200K Tokens直接访问单次会话长期记忆向量数据库无限制语义检索持久化档案记忆本地文件/S3无限制精确匹配归档三层记忆系统的核心思想热数据放工作记忆温数据放长期记忆冷数据归档。这样既保证了检索速度又不受上下文窗口限制。如果对你有帮助欢迎在评论区聊聊你实现的记忆系统。

相关新闻

2026写论文有没有工具推荐呢?从论文大纲到交稿排版,这篇说明白了

2026写论文有没有工具推荐呢?从论文大纲到交稿排版,这篇说明白了

你以为写论文最难的是“写不出来”。真到开题、返修、答辩前那几天,很多人崩溃的点反而特别一致:文献看了一堆,综述还是串不起来;目录改一次,标题层级跟着乱;参考文献格式东一个西一个;正文里一…

2026/7/7 13:23:56阅读更多 →
深耕车载密码创新 信长城亮相天津智能网联汽车密码前沿高峰论坛

深耕车载密码创新 信长城亮相天津智能网联汽车密码前沿高峰论坛

6 月 4 日,由中国密码学会密码测评专业委员会主办、中汽研软件测评(天津)有限公司承办,北京信长城科技发展有限公司及其他行业伙伴单位鼎力支持的2026 年密码测评理论与关键技术前沿论坛在天津顺利举办,北京信长城受邀…

2026/7/7 13:23:56阅读更多 →
Si/Ge/GaAs 半导体材料对比:5项关键参数与3类应用场景解析

Si/Ge/GaAs 半导体材料对比:5项关键参数与3类应用场景解析

Si/Ge/GaAs半导体材料工程选型指南:5项核心参数与3类应用场景深度解析在芯片设计与功率器件开发领域,材料选型直接决定着产品性能天花板。当硅基半导体逼近物理极限,锗(Ge)与砷化镓(GaAs)等化合物半导体凭借独特性能参数,正在5G射…

2026/7/7 13:18:56阅读更多 →
Si5351A可编程时钟发生器在电子系统中的应用与优化

Si5351A可编程时钟发生器在电子系统中的应用与优化

1. 为什么电子系统需要高精度频率参考在现代电子系统中,稳定的时钟信号就像人体的脉搏一样关键。从通信基站到车载雷达,从工业PLC到医疗设备,几乎每个数字系统都需要一个可靠的"心跳"来同步各个模块的工作。我在开发汽车电子控制单…

2026/7/7 14:39:08阅读更多 →
合肥新能源汽车崛起,本地硅胶件谁来供

合肥新能源汽车崛起,本地硅胶件谁来供

谈安徽的硅胶代工,要先看合肥。 过去几年,合肥的产业结构发生了一个显著变化:新能源汽车产业链迅速集聚。蔚来中国总部、大众安徽、比亚迪合肥基地相继落地,带动了一大批零部件供应商在合肥及周边设厂。2025年合肥新能源汽车产量…

2026/7/7 14:39:08阅读更多 →
linux应急响应

linux应急响应

一、应急响应前置原则 1.先取证,后操作:不重启、不删进程、不修改日志,避免销毁入侵痕迹; 2.隔离优先:受感染主机立即断网(物理 / 防火墙拉黑 IP),防止横向渗透、数据外传&#xff1…

2026/7/7 14:39:08阅读更多 →
爽翻!输入主题,这几款AI论文网站就能帮你搞定毕业论文

爽翻!输入主题,这几款AI论文网站就能帮你搞定毕业论文

毕业季论文焦虑?还在为选题发愁、查资料耗时、写内容卡顿?别急,输入主题,这几款AI论文网站就能帮你搞定毕业论文!千笔AI、ThouPen、豆包、DeepSeek、元宝,五款热门工具实测上线,从开题报告到结论…

2026/7/7 14:39:08阅读更多 →
告别烧录烦恼:Balena Etcher一站式解决系统镜像写入难题

告别烧录烦恼:Balena Etcher一站式解决系统镜像写入难题

告别烧录烦恼:Balena Etcher一站式解决系统镜像写入难题 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 在数字时代,为树莓派、单板计算机…

2026/7/7 14:39:08阅读更多 →
DS28EC20 EEPROM芯片与PIC18F55K42微控制器的嵌入式存储方案

DS28EC20 EEPROM芯片与PIC18F55K42微控制器的嵌入式存储方案

1. DS28EC20 EEPROM芯片深度解析DS28EC20是Maxim Integrated(现为Analog Devices子公司)推出的一款1-Wire接口EEPROM存储器,具有20Kbit(2560字节)存储容量。这款芯片在嵌入式系统中特别适合用于保存用户设置、配置参数…

2026/7/7 14:34:08阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/7 4:43:43阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/7 2:56:31阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/7 1:03:28阅读更多 →
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8…

2026/7/7 0:02:41阅读更多 →
国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-o…

2026/7/7 0:02:41阅读更多 →
CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…

2026/7/7 0:02:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/7 5:11:21阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/7 5:11:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/7 5:11:21阅读更多 →