Agent-memory-召回设计里分段过滤的重要性

我们都知道,记忆存储后,怎么能够在用户提问时召回几个质量高的记忆是核心之一。

在实战中,我在记忆存储时,让agent给其分配我给定的几个类型,并在召回时设计为,匹配到对应的关键词,并进行综合打分(语义相似度+时间匹配+置信度),结果返回的记忆一塌糊涂。

特征分配

在教程中,我观察到给定的代码是给记忆分配对应类型,进而方便后续召回。但是实际上,我发现并不是每条记忆的信息都很简单,有的记忆有时间信息,有的记忆有任务信息,到这里为止用单一关键词分配记忆类型都没问题,但一旦记忆信息里不止一条,比如"昨天会议总结了项目经验"。

那问题就来了,究竟是分配哪个关键词好呢?分配了历史关键词,那如果召回的记忆里全部是昨天只有少数会议呢,agent根本无法分辨哪个关键词更重要,也无法预知后续召回时用户的意图。那么相对好的办法,其实就是让agent根据记忆信息,自动生成多个特征,先保证不遗漏信息。

那么也许有人会问,那么多个关键词,agent怎么判断哪个优先级高呢。

分段过滤

在RAG中,有粗排和精排。从这个角度出发,我们在召回后可以一个过滤来达到粗排的作用。具体做法是,来了一个用户问题,我们先用embedding+BM25,先召回一部分记忆,然后在这一步,结合用户问题做意图解析,做硬过滤。

以我们刚才的喝水为例,用户问的是昨天会议内容细节,一开始的召回记忆就是找出了与"昨天","会议"相关的记忆,然后我们在第二部做硬性筛选,只召回同时有"昨天"+"会议细节"的记忆内容,然后再进一步做综合得分,这样除了可以去掉上周领导喝水这类垃圾记忆,更关键的是,可以不需要我们去优化综合得分的评判公式,因为如果不这么做,我们需要纠结有些记忆没有时间权重,是否要做权重补偿,即缺失了时间维度的信息,会相对提高其他维度的信息,但这样做很难调整,容易出现质量不高但是综合得分被补偿权重拉上来出现在top-k里的场景

相关推荐
杨超越luckly1 小时前
一线加新一线占61.7%,506家店,西西弗书店的“贵地生存法则”
数据分析·agent·可视化·西西弗书店·生意经
半糖程序员2 小时前
从零构建 Agent(11):压缩过长的上下文
typescript·agent
析数塔2 小时前
rea 逆向工具体验:把 Electron 应用、Native 模块、.NET 程序都交给 Agent 追问
开源·agent
北京地铁1号线2 小时前
为大模型创建一个简单的skill:在12306网站查询车次(仅作查询,不提供购票功能,仅作学习使用)
自然语言处理·大模型·agent·技能·skill
架构师那点事儿2 小时前
Agent Skill: 视频/PPT 内容提取 Skill —— 从 0 到 1 诞生记 + 使用指南
llm·agent·ai编程
sarasuki2 小时前
MCP 为什么是一个协议而不是一个框架呢?
设计模式·agent·mcp
全栈Agent 小李2 小时前
【无标题】
前端·后端·agent·ai编程·全栈·cursor·mcp
bazingaedward3 小时前
别让 AI Agent 碰到你的 API Key:给 Claude Code 做一个"只给名字、不给值"的密钥层
agent·claude
ADark3 小时前
FDE 入门 · 08|没人爱做的交付尾巴
人工智能·agent
Topskys3 小时前
模型上下文协议(MCP)
agent