新闻详情

新闻详情

首页 / 资讯中心 / 详情

Agent 记忆系统设计:让智能体记得住、想得起、用得上

发布时间:2026/9/9 19:37:52来源:尧图网络
Agent 记忆系统设计:让智能体记得住、想得起、用得上
Agent 记忆系统设计让智能体记得住、想得起、用得上一、多轮对话里的记忆黑洞Agent 最常见的失败模式是什么不是推理错误不是工具调用失败而是把上一轮说过的事忘得一干二净。用户告诉它我的数据库在东京区三句话后它又去查 global endpoint。这种体验比报错更糟糕——因为用户会直接丧失信任。传统方案是往 prompt 里塞聊天历史。但 token 成本按上下文长度线性增长GPT-4 的 128K 窗口跑长对话时单次请求轻松破 $0.1。更隐蔽的问题是迷失在中间Lost-in-the-Middle模型对长文本中间部分的注意力衰减导致早期记忆照样丢失。一个工程上可行的解法是分层记忆架构工作记忆短程、情节记忆中程、语义记忆长程三层协同。flowchart TD A[用户输入] -- B[工作记忆缓冲区] B -- C{触发归档?} C --|摘要阈值达| D[情节记忆提取器] C --|未触发| E[直接注入Prompt] D -- F{冲突检测} F --|新信息| G[语义记忆写入] F --|冲突| H[记忆合并/覆盖] G -- I[向量数据库] H -- I I -- J[语义检索] E -- K[LLM推理] J -- K二、分层记忆的工程实现工作记忆Working Memory就是当前对话的完整上下文。不做压缩但限制长度建议最近 10 轮。关键设计点是滑动窗口 优先级标记——不是所有历史轮次都同等重要。情节记忆Episodic Memory会话级别的摘要归档。核心思路在对话达到 N 轮或 token 超过阈值时异步触发摘要提取。这里有一个容易被忽略的细节——摘要粒度要与检索场景对齐。如果按整段对话摘要检索时只能返回一大坨不够细。应该按语义块拆分每块标注时间戳和重要性权重。语义记忆Semantic Memory跨会话的持久化知识。存储到向量数据库Milvus/Qdrant/Pinecone检索时做 hybrid search向量相似度 关键词 BM25取交集。元数据里必须带时间衰减因子——两周前的偏好权重应低于昨天的。三、生产级记忆写入代码import asyncio import time from dataclasses import dataclass, field from typing import Optional import numpy as np from openai import AsyncOpenAI dataclass class MemoryEntry: content: str embedding: Optional[list[float]] None timestamp: float field(default_factorytime.time) importance: float 1.0 session_id: str ttl_days: int 30 class SemanticMemoryStore: 语义记忆存储层。 设计决策 - 使用异步客户端避免阻塞 Agent 主循环 - 时间衰减嵌入在检索阶段计算而非写入阶段减少存储耦合 - 重要性评分由 LLM 生成而非规则引擎——规则跟不上场景变化 def __init__(self, vector_dim: int 1536, decay_halflife: int 14): self._client AsyncOpenAI() self._store: list[MemoryEntry] [] self._vector_dim vector_dim self._decay_halflife decay_halflife async def embed(self, text: str) - list[float]: 文本转向量带重试和超时保护 for attempt in range(3): try: resp await asyncio.wait_for( self._client.embeddings.create( modeltext-embedding-3-small, inputtext ), timeout5.0, ) return resp.data[0].embedding except asyncio.TimeoutError: if attempt 2: raise await asyncio.sleep(1 * (attempt 1)) except Exception: if attempt 2: raise await asyncio.sleep(2**attempt) raise RuntimeError(unreachable) async def write( self, content: str, session_id: str, importance: float 1.0, ttl_days: int 30, ) - None: 异步写入记忆不阻塞 Agent 推理链路 embedding await self.embed(content) entry MemoryEntry( contentcontent, embeddingembedding, session_idsession_id, importanceimportance, ttl_daysttl_days, ) self._store.append(entry) def _time_decay(self, entry: MemoryEntry, now: float) - float: 指数衰减半衰期默认 14 天 age_days (now - entry.timestamp) / 86400.0 return np.exp(-np.log(2) * age_days / self._decay_halflife) async def search(self, query: str, session_id: str, top_k: int 5) - list[MemoryEntry]: 向量检索 时间衰减 重要性加权 q_embed await self.embed(query) now time.time() scored: list[tuple[float, MemoryEntry]] [] for entry in self._store: if entry.session_id ! session_id: continue if now - entry.timestamp entry.ttl_days * 86400: continue if entry.embedding is None: continue similarity np.dot(q_embed, entry.embedding) decay self._time_decay(entry, now) score similarity * decay * entry.importance scored.append((score, entry)) scored.sort(keylambda x: x[0], reverseTrue) return [entry for _, entry in scored[:top_k]]注释要点write不阻塞推理链路是刻意的——记忆归档优先级低于实时响应。时序解码用指数模型而非线性因为人类记忆遗忘曲线是指数级。四、边界分析与架构权衡适用场景对话式 Agent单会话轮次 20跨会话偏好记忆用户总问同类问题企业知识库场景需要人机联合记忆不适用场景单次问答 Agent记忆无关紧要对延迟极度敏感的系统每次检索增加 50-200ms需要精确审计的场景摘要过程不可逆原始对话可能丢失核心缺陷摘要精度损失摘要器压缩时必然丢失细节且这个损失不可恢复记忆冲突用户改口时旧记忆和新偏好之间的冲突处理策略是启发式的冷启动问题新用户没有记忆积累时系统退化为普通对话成本敏感性向量检索的 QPS 费用随存储量线性增长。10 万条记忆 1536 维向量Qdrant 单次检索约 10ms。如果加到 Agent 的每个 tool call 前都检索总延迟可能翻倍。五、总结分层记忆不是银弹。它的核心价值在于用可控的成本换取可预期的记忆能力。工作记忆保下限情节记忆提效率语义记忆做持久化。三层解耦后可以独立调优——这是最大的架构红利。但别指望它能完美复现人类记忆它只是把遗忘从随机丢失变成了可配置衰减。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

AionUi 完全指南:开源 24/7 AI 代理协作(Cowork)平台的功能架构与实战入门 2026/9/10 12:33:47

AionUi 完全指南:开源 24/7 AI 代理协作(Cowork)平台的功能架构与实战入门

AionUi 完全指南:开源 24/7 AI 代理协作(Cowork)平台的功能架构与实战入门 【免费下载链接】AionUi Open-source 24/7 Cowork app for OpenClaw, Hermes, Claude Code, Codex, OpenCode and 20 more CLI Agent | Customize your assistants |…

阅读更多 →
基于残差学习的红外图像非均匀性校正方法 2026/9/10 12:33:47

基于残差学习的红外图像非均匀性校正方法

简介:本资源是一份面向本科生的毕业设计实践项目,聚焦红外图像非均匀性校正这一典型图像预处理难题,适用于计算机视觉、红外成像或深度学习方向的初学者与课程设计者。项目提出基于残差学习的RNUC网络模型,通过双残差块级联结构实…

阅读更多 →
思科Webex+思必驰会议系统:4K视频与AI降噪实战解析 2026/9/10 12:33:47

思科Webex+思必驰会议系统:4K视频与AI降噪实战解析

1. 企业高端会议系统选型实战:思科视频会议思必驰音频系统深度解析当企业会议室里传来断断续续的语音、模糊不清的画面,或是频繁的设备调试声,这场会议的价值就已经折损大半。作为经历过上百场企业级会议系统部署的老兵,我深刻体会…

阅读更多 →
Matlab数字调音台实战:从滤波器设计到C代码生成 2026/9/10 12:33:46

Matlab数字调音台实战:从滤波器设计到C代码生成

简介:数字调音台是音频信号处理中常用的混音与路由控制设备。围绕基于Matlab实现的数字调音台课程设计,这一源码包提供完整可运行代码与配套文档,适合信号处理、数字音频、Matlab GUI编程方向的学生或开发者用于课程设计、实验参考和功能扩展…

阅读更多 →
Ruffle 桌面版拖放加载 SWF:3 步把老 Flash 文件变成能播的动画 2026/9/10 12:33:46

Ruffle 桌面版拖放加载 SWF:3 步把老 Flash 文件变成能播的动画

Ruffle 桌面版拖放加载 SWF:3 步把老 Flash 文件变成能播的动画 【免费下载链接】ruffle A Flash Player emulator written in Rust 项目地址: https://gitcode.com/GitHub_Trending/ru/ruffle 手上有几个多年前的 .swf 文件(SWF 是 Flash 时代的…

阅读更多 →
ABAP开发中替代OPTIONAL参数的4种设计模式 2026/9/10 12:30:46

ABAP开发中替代OPTIONAL参数的4种设计模式

1. 为什么我们需要替代ABAP中的OPTIONAL参数在ABAP开发中,OPTIONAL参数长期以来都是方法定义中的常见设计。这种设计允许调用方在不需要某些参数时省略它们,表面上看似乎提供了灵活性。但经过多年实践,我发现这种"便利性"实际上带来…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞