【AI地图 Tech说】第九期:让智能体拥有记忆——打造千人千面的小度想想

导读

在当今数字化快速发展的时代,智能体已经成为我们生活中不可或缺的一部分。从智能手机里的语音助手到地图应用中的智能导航,智能体以其便捷、高效的特点,为我们的生活带来了诸多便利。然而,传统的智能体的核心能力是靠LLM驱动,往往缺乏记忆能力,无法根据用户的个性化需求和使用习惯提供精准的服务。

从理想角度,每个真人都有记忆,使得人与人之间的沟通往往蕴含着很多不必每次都提及的上下文,作为对标真人能力的智能体,其记忆能力的重要性也就不言而喻了。想象一下,当你使用地图应用规划出行路线时,智能体能够记住你每次出行都偏好走高速,那么在你输入目的地后,它会自动为你规划一条包含高速路段的路线,而无需你再次强调要走高速。又或者,当你在与智能体闲聊中提到自己不吃辣后,下次寻找餐厅时,它能自动将"不辣"作为筛选项,为你推荐符合口味的餐厅。这种个性化的服务,正是智能体记忆能力的体现,它能极大地提升用户的使用体验,让用户感受到智能体的贴心与智能。

智能体记忆能力的建设,正成为提升用户体验、推动智能技术发展的关键方向。OpenAI的Lilian Weng曾对智能体整体架构有过系统阐述,智能体的整体架构是以大语言模型(LLM)作为核心基础。LLM具备强大的语言理解和生成能力,能够处理和分析自然语言输入,为智能体提供基础的交互和理解支持。然而,仅依靠LLM还不足以构建一个功能完善、智能高效的智能体,在LLM的基础上,需要搭配一系列其他能力。例如,感知能力可以让智能体获取外部环境的信息,将这些感知能力与LLM结合,智能体就能更好地理解用户所处的环境和场景,从而提供更贴合实际需求的服务。决策能力也是智能体架构中不可或缺的一部分。它可以根据LLM对用户输入的理解以及感知到的环境信息,做出合理的决策。记忆能力同样是关键能力之一,它负责存储和提取用户的各种信息,包括历史交互记录、用户偏好、行为模式等。将记忆能力合理地融入智能体架构,并与LLM、感知能力、决策能力等相互协作,智能体就能实现个性化的服务和持续的学习进化。本文将深入探讨智能体记忆能力的建设,从记忆类型、存储架构、写入与读取机制等多个方面进行详细介绍。

一、改变LLM的无状态特性

这里有必要从产品语言切入到技术语言,先介绍一下无状态服务的定义。无状态服务是指服务的执行不依赖于任何本地存储的上下文或历史数据,每次请求(Request)都包含处理该请求所需的全部信息,服务端无需记录或维护请求之间的状态关联。其核心特点包括:

1.独立性:每个请求内容中包含了所有服务需要知道的信息,服务端无需存储和当前Query相关的会话(Session)或历史数据。

2.可扩展性:由于无状态,服务实例可以随意增减,无需同步状态数据,适合水平扩展(如通过负载均衡分发请求)。

3.容错性:单个实例故障不影响其他请求,因为状态不存储在本地。

因此一个很自然的问题就是LLM到底是有状态还是无状态的?那么进一步想,如果有状态的意味着大模型有着千人千面的参数,从而一个服务亿万用户的智能体服务就要有亿万个不同的大模型在跑着,每个大模型都要占用海量的运行存储资源,从服务架构的角度来说显然是很难做到的。因此,从设计的角度,LLM其模型在运行时就是固化的,也就是说一个"典型的LLM"是典型的无状态服务,其设计初衷是处理独立输入并生成输出。

然而智能体作为LLM的典型应用,从产品需求角度又要求是有状态的,这就是Lilian设计若干"外挂"的原因------需要外部系统管理其状态,这里所谓的"外部系统"之一,就是智能体的记忆模块。

二、智能体记忆分类

从大的角度,智能体的记忆分成短期和长期两类。

1.短期记忆

是指用户在一次使用应用程序的完整周期内生效的记忆。只要用户没有关闭应用程序,之前聊天的内容都会作为上下文作用于本轮对话的参考。例如,当你在地图应用中询问"去首都机场怎么走"后,接着又问"附近有没有停车场",智能体可以根据之前的对话内容,理解你所说的"附近"是指首都机场附近,从而为你提供准确的停车场信息。短期记忆的实现相对比较容易,只需要将之前几轮的对话内容附着到当前轮对话的提示词(prompt)中即可。然而,短期记忆也存在局限性,一旦用户关闭应用程序,这些记忆就会失效。

2.长期记忆

是指将之前的对话内容的问答原始文本作为上下文存储起来,并定期挖掘一些文本层面上的关键信息,在本次对话中作为提示词追加进去。与短期记忆不同,长期记忆可以跨越多个应用程序使用周期,为用户提供更加持久的服务。例如,智能体可以记住用户在几个月前提到的饮食偏好、出行习惯等信息,并在用户再次使用应用程序时,根据这些记忆信息为用户提供个性化的服务。长期记忆的实现重点在于压缩,因为历史上几个月甚至几年的输入是不可能完全作为上下文喂给大模型的。因此,需要采用一些技术手段,如关键信息提取、语义索引等,对存储的记忆信息进行压缩和处理。

一般来说,在论文和实际工程中指的记忆多数是指长期记忆,细分来看,长期记忆一般包括下面这些内容。

  • 原始对话记忆:智能体对与用户的全部原生对话文本的长期存储,无加工、无删减保留对话时序、上下文和原始表述,是所有记忆的基础数据源。可为后续记忆提取、意图理解提供原始依据,也能支撑对话回溯、上下文衔接,确保智能体还原真实的交互过程,避免信息偏差。
  • 原始用户行为记忆:记录用户与智能体交互过程中的原生行为数据,包括操作动作、输入方式、交互频率、触发功能的选择等非文本行为,保留行为发生的时间、场景和频次。能反映用户的交互习惯,为智能体适配用户操作方式、优化交互体验提供客观行为依据,是行为分析的核心素材。
  • 事实记忆:智能体从对话或行为中提取的客观、可验证、固定不变的用户相关事实信息,多为静态属性类内容,如年龄、家庭构成、职业、所在地等。这类记忆经过加工提炼,去冗余留核心,是智能体个性化服务的基础,能让智能体精准掌握用户基础信息,避免重复询问。
  • 实体图谱记忆:将用户相关的人、事、物、地点等实体及实体间的关联关系,以图谱结构长期存储,形成可视化的实体网络,如 "用户 - 朋友 - 职业""用户 - 爱好 - 相关领域"。能让智能体理解实体间的深层逻辑关系,实现跨信息的关联推理,提升对用户需求的深层解读能力。
  • 场景记忆:记录用户与智能体交互的具体场景信息,包括交互的时间、环境、设备、用户的交互目的等,关联场景与对应的对话、行为。能让智能体感知不同场景下的用户需求差异,实现场景化的服务适配,比如在办公场景下更注重高效,在休闲场景下更注重轻松。
  • 情绪关联记忆:将用户的情绪表现(如开心、焦虑、不满)与对应的对话内容、行为、场景进行关联并长期存储,还记录情绪的触发原因和持续时长。能让智能体识别用户的情绪状态,实现情感化交互,在用户产生负面情绪时及时回应,提升交互的情感温度。
  • 技能记忆:智能体长期存储的自身可执行的各类技能、能力及执行方法,包括基础功能、专业任务处理流程、工具调用方式等,还会记录技能的使用效果、用户反馈。是智能体完成任务的核心能力支撑,能让智能体持续复用已掌握的技能,还可基于反馈优化技能执行效率。
  • 规则 / 约束记忆:智能体长期存储的与用户相关的各类规则、约束和约定,包括用户明确提出的服务要求、交互禁忌,也包括智能体自身的服务边界、行业规范。能让智能体严格遵守交互规则,避免触碰用户禁忌,同时坚守自身服务边界,确保交互行为的合规性和合理性。

三、智能体记忆的分层架构

简单的智能体记忆的实现,直接将主Agent和记忆存储相连,但因为主Agent承载了复杂的业务逻辑,往往很难实现非常精细的记忆能力,因此为了提升记忆能力的上界,需要构建专门的记忆体存储架构,这也是业内的共识(源图来自《A-Mem: Agentic Memory for LLM Agents》)。

该架构分为三个主要层次:API层、操作层和基础设施层。每个层次都承担着不同的功能,共同协作完成智能体记忆的存储、写入和读取操作。这个架构就是将记忆存储相关的各种能力,如接口调用、数据操作、底层存储等能力,合理地放置在不同层次,以实现高效稳定的记忆功能。

1.API层:API层位于记忆存储架构的最上层,主要用于应用程序各个产品功能读写记忆的接口。它支持常规API的形式,也支持自然语言调用的形式。例如,当用户说"我的女儿今年18岁,请更新记忆"时,API层可以自动解析用户的自然语言输入,并将其转换成合适的内部接口来执行记忆写入操作。这种自然语言调用的方式对多智能体架构更加友好,使得智能体能够更加灵活地与用户进行交互。从翁丽莲的架构理念看,API层就像是智能体与外界交互的"窗口",将外部的需求准确地传递到内部,同时也将内部的处理结果反馈给外部。

2.操作层:操作层位于API层和基础设施层之间,支持记忆采集(写入)和记忆调度(读取)操作。在记忆调度过程中,操作层还支持从多处获取类似的记忆,并对其进行重要性排序。例如,当用户询问"周末去哪儿"时,操作层可以从记忆库中获取与用户周末活动相关的记忆信息,如用户之前提到的周末喜欢带孩子去博物馆、经常去的亲子场所等,并根据这些记忆信息的重要性进行排序,为智能体提供更加准确的推荐依据。操作层在智能体架构中起到了"调度中心"的作用,合理地安排记忆的读写操作,确保记忆信息能够高效地被利用。

3.基础设施层:基础设施层是记忆存储架构的最底层,主要负责原始的记忆存储。它包含两类库:语义索引库和图谱索引库。语义索引库利用通用的语义相关性匹配能力,对记忆信息进行存储和检索。例如,当用户输入一个查询时,语义索引库可以根据查询的语义与记忆库中的信息进行匹配,找到相关的记忆信息。图谱索引库则是对语义索引库的有效补充,它存储了记忆信息之间的属性相关性。

四、关键技术:实体图谱和遗忘机制的构建

对于对话过程涉及到的记忆写入是指在与智能体进行对话的过程中,将有价值的对话内容写入记忆库。需要提取出对话中有价值的内容,放弃无效内容。实际这是一个需要有产品态度的技术实现,例如只存储用户的家庭状况、饮食偏好等重要信息,而不存储一些无关紧要的对话内容。如果没有明确的产品态度,即使将对话内容交给大语言模型(LLM),由于缺少指引,LLM也无法实现恰到好处的提取。

这里有一个重要的点实体关系图谱生成以用户为核心,经实体抽取 - 关系识别 - 图谱建模 - 迭代维护四步落地,全程轻量化适配智能体交互需求。这里是一个典型的用Json描述的实体记忆图谱

对于非对话过程主要是对用户的出行特点、搜索偏好等进行建模。与对话记忆写入类似,非对话记忆写入也需要有一定的产品态度。例如,对于用户几年前一次偶尔的外出地点,由于时间久远,可能不具有代表性,因此不应该存储;而对于用户近期的出行规律,如每周五都会去机场回家等,则应该进行详细存储。非对话记忆可以用统计方法对用户的出行和搜索数据进行聚类分析,然后将分析结果以结构化的形式写入记忆库。从智能体整体架构看,非对话记忆写入是为智能体提供了关于用户行为的"背景知识",与对话记忆相互补充,共同完善智能体对用户的了解。通过图谱索引库,智能体可以更加深入地理解记忆信息之间的关联,为用户提供更加精准的服务。

容易被忽略的一点是,记忆的写入并不仅仅意味着内容的增加,这是因为智能体记忆能力建设面临的核心挑战之一是记忆信息过载,随着用户使用时间的增长,智能体需要存储的记忆信息呈指数级增长,这不仅占用大量存储空间,还会导致记忆检索效率下降,甚至影响智能体的响应速度。因此记忆的遗忘也是一种重要的"写"场景。智能体记忆遗忘算法核心是模拟人类遗忘规律,实现 "去冗余、留核心、保时效",避免记忆膨胀导致交互延迟,同时贴合智能体个性化服务需求。遗忘的具体实现分两类:一是被动遗忘,清理低价值、过期记忆,如 N个月未调用的弱关联实体、重复对话片段;二是主动遗忘,支持用户手动触发,或按规则遗忘临时记忆、隐私相关记忆。

五、记忆匹配与推荐过程

在实时的对话中,需要快速判断用什么记忆来加强对话的响应,这就是记忆的检索和推荐问题。对于海量长期记忆,传统关键词检索效率低下。向量数据库通过将记忆编码为高维向量,支持基于语义相似度的快速检索,它在记忆读取过程中,智能体会对记忆库进行向量匹配,找到与用户查询最相关的记忆信息。例如,对于用户"周末去哪儿"的查询,智能体从记忆库通过对这些记忆信息和"周末去哪儿"进行向量匹配,发现最相关的一条是"周末喜欢带孩子 + 博物馆",因此在推荐的地点中,将亲子场所和博物馆的权重加大,实现了比较准确的目的地推荐。

六、数据隐私与安全挑战

智能体记忆能力建设面临着极高的数据安全要求,因为一旦这些数据被泄露,将给用户带来严重的损失。因此,获得用户授权是记忆生效的前提,此外,百度还采取了严格的数据加密和访问控制措施,确保用户数据的安全。

在数据存储架构上,采用多端商用加密技术对数据进行加密处理,只有经过授权的系统和人员才能访问这些数据。同时,建立完善的数据安全管理制度,加强对数据访问的审计和监控,及时发现和处理数据安全问题。从智能体整体架构角度看,数据隐私与安全保障就像是给整个架构加上了一层"防护盾",确保记忆信息在存储和使用过程中的安全性。

在业务逻辑上,既能够支持直接物理删除对应数据,对于实体图谱,则更全面地删除所有相关节点和 / 边,同步更新推理规则。最后需要再补充大量相关问题自动化回归验证,确认不仅无相关信息残留,同时也不会因为"多删"导致其他方面问题受到影响。这样方能确保用户记忆的精准、定向地删除。

七、结论

智能体记忆能力的建设是提升用户体验、实现个性化服务、推动智能技术发展的关键。通过记忆的有效写入与读取,智能体可以更加深入地了解用户的需求和使用习惯,为用户提供更加精准、个性化的服务。小度想想2.0构建了跨端记忆体,支持场景记忆、会话记忆、持久记忆、系统记忆,使服务在手机端、车机端、跨场景切换间保持一致与连续。这些创新实践使百度地图智能体真正具备了"理解用户、记忆用户、服务用户"的能力,实现了从"地图工具"到"智能伙伴"的跨越。未来,随着多模态技术语义理解和检索技术的不断发展,智能体记忆能力将在更多场景中发挥核心价值,为用户提供更加智能、便捷的服务,也为未来的智能生活带来更多的便利和惊喜。

相关推荐
臣妾没空2 小时前
Elpis 全栈框架:从构建到发布的完整实践总结
前端·后端
H5开发新纪元2 小时前
Nginx 部署 Vue3 项目完整指南
前端·javascript·面试
喷火龙8号2 小时前
单 Token 认证方案的进阶优化:透明刷新机制
后端·架构
决斗小饼干2 小时前
跨语言移植手记:把 TypeScript 的 Codex SDK 请进 .NET 世界
前端·javascript·typescript
小码哥_常2 小时前
Android Intent.setAction失效报错排查与修复全方案
前端
孟沐2 小时前
Java异常处理知识点整理(大白话版)
后端
ServBay2 小时前
告别面条代码,PSL 5.0 重构 PHP 性能与安全天花板
后端·php
bluceli2 小时前
JavaScript模块化深度解析:从CommonJS到ES Modules的演进之路
前端·javascript
前端人类学2 小时前
前端输入框禁用:disabled、readonly 与.prop (‘disabled‘, true) 完全解析
前端·javascript