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

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

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

特征分配

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

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

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

分段过滤

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

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

相关推荐
素男9 小时前
两个月不是六十天
人工智能·agent·self-becoming·ai长期记忆·ai自我介绍
lgcgkCQ13 小时前
【AI 转型实战 1】SpringAI 入门:搭建基础大模型对话能力
java·ai·agent·rag·spring ai·mcp·langchain4j
vilya13 小时前
Agent 语音引擎换心记:从「够用」到「稳且好」
人工智能·agent
goehou13 小时前
ReAct 循环跑偏的三种样子,以及怎么在工程上兜住
llm·agent·react·工具调用·工程实践
ZhengEnCi16 小时前
Agent 如何进行工具调用:从一次 Function Calling 到生产级工具编排的完整链路
llm·agent·ai编程
噜哥带你玩转 AI 大模型17 小时前
从 “if-else“ 到 Agent:Dify 进阶实战,让 AI 自己判断、自己调工具
agent·工作流·dify·多轮对话·httpapi
威哥爱编程17 小时前
Python 智能体开发实战 05:一问教材内容它就编?先把答案从你自己的资料里检索出来
python·agent
java_prinln17 小时前
RAG 面试题介绍
python·agent