HarmonyOS7Agent实现分层记忆机制,短期窗口与长期摘要协同提升上下文连贯性

HarmonyOS 7 Agent 引入 MemoryConversationStore 架构,通过短期对话窗口与长期记忆摘要双层管理,解决长对话中关键信息丢失问题;该方案明确区分记忆与RAG功能边界...

人工智能

在构建具备持续对话能力的智能体(Agent)时,如何高效管理上下文成为核心挑战。华为 HarmonyOS 7 的 Agent 开发实践中,开发者提出了一套分层记忆机制——MemoryConversationStore,旨在应对跨轮次、跨会话场景下用户偏好、待办事项与身份信息易被覆盖的问题。

此前基础方案(如 ConversationStore)采用固定窗口截断策略:当对话轮次超过阈值(如 maxMessages=40),直接丢弃最早消息。该方式虽简单,但在实际交互中极易导致关键信息丢失。例如,用户在第5轮提及“我过敏花生”,到第30轮请求订餐时,若该句已被裁剪,Agent 将无法规避禁忌食材。

为解决此问题,HarmonyOS 7 Agent 在原有结构上叠加一层长期记忆模块。其核心逻辑是:当短期窗口超限,系统不再简单丢弃旧消息,而是将最旧的若干非系统消息交由 summarizeFn 函数生成摘要,并提取关键词,归档至 longTermMemory 池;短期窗口仅保留最近 keepRecent 条消息,确保当前轮次响应低延迟、高连贯。

如图所示, MemoryAgent 数据流清晰分为两部分:用户输入经 MemoryConversationStore 处理后,短期记忆(shortTerm)直接喂入大模型底座 LlmClient;而长期记忆(longTermMemory)则以 {summary, keywords} 形式存储,供后续按需检索回注。系统提示(system prompt)始终常驻,且不参与摘要过程,保障角色设定稳定性。

值得注意的是,该设计明确划清了“记忆”与 RAG(Retrieval-Augmented Generation)的功能边界。二者虽可协同,但来源与目标截然不同:

  • 记忆(Memory):检索对象为本场对话历史摘要,目标是“自己之前聊过什么”,属于内生知识复用;
  • RAG:检索对象为外部文档向量库(如产品手册、Wiki),目标是“文档里写了什么”,属于外源知识增强。

HarmonyOS 7 Agent 记忆与上下文管理架构图

混淆二者将导致工程误判。例如,试图用 RAG 去召回用户曾说的“下周三要出差”,不仅效率低下,且因缺乏用户专属索引而几乎不可行;反之,若仅依赖短期窗口而无长期记忆,则无法支撑数十轮以上的连续任务。

为何不直接扩大上下文窗口?表面看,将 maxMessages 从 40 提升至 400 似乎一劳永逸。但实测表明,该路径在真机部署中存在三重硬伤:

第一,Token 成本线性增长。400 轮对话平均约 8000 token,远超多数端侧模型推理预算;而摘要机制将每段旧对话压缩为一句结论(如“用户偏好无糖饮品,忌花生”),成本趋近恒定。

第二,首字延迟显著升高。预填充(prefill)阶段需处理全部上下文,窗口越大耗时越长;短期窗口仅保留近期几轮,可维持稳定低延迟。

第三,信息密度下降与注意力衰减。大量冗余表达(如“好的”“明白了”)挤占有效位置;更关键的是,当关键事实埋藏于长上下文中部时,模型注意力机制反而难以捕获——实验显示,将摘要显式回注至问题附近,命中率高于原样全量携带。

四个常见坑与对策示意图

因此,分层策略本质是模拟人类记忆机制:短期工作记忆维持即时连贯,长期语义记忆负责关键信息留存与调用。

在实现层面,MemoryConversationStore 提供了可配置的预算控制接口 enforceBudget,接受三个参数:maxShort(短期窗口上限)、keepRecent(保留最近轮次数)、summarizeFn(摘要函数)。开发者可根据设备算力与场景需求动态调整。例如,在车载场景中可设 keepRecent=5,确保指令响应敏捷;而在智能家居多任务协同场景中,可放宽至 keepRecent=10,并配合更精细的关键词抽取逻辑。

开发实践中还总结出四类高频误区及应对方案:

其一,“把系统提示一起摘要”——后果是角色设定丢失,模型行为失范;对策是系统消息永久常驻,绝不参与裁剪。

其二,“混淆记忆与 RAG”——错误地让记忆模块去查外部文档;对策是先厘清知识里写了什么”。

其三,“窗口设得过大或过小”——过大浪费 token,过小丢失上下文;对策是通过 maxShort/keepRecent 参数按对话轮次动态反推合理值。

其四,“摘要不带关键词”——导致后续检索失效;对策是在摘要生成时同步提取 keywords 字段,供 retrieveMemory 精准匹配。

上述机制已在 HarmonyOS 7 的 Agent 开发实战系列中落地验证。以一个典型用户旅程为例:用户首次对话中说明“家里有老人,需语音播报音量调高”,该信息被摘要为“用户家庭含老年成员,偏好高音量语音反馈”,并标记关键词 [老人, 音量, 语音];数轮后用户询问“客厅灯怎么关”,Agent 在生成回复前先检索长期记忆,发现匹配关键词,随即主动补充“已为您将播报音量设为最高档,确认关闭吗?”,实现上下文感知的主动服务。

该方案的价值不仅在于技术实现,更在于厘清了端侧智能体设计的认知框架:记忆不是 RAG 的子集,也不是上下文窗口的简单扩容,而是一种独立的信息生命周期管理能力。随着 HarmonyOS 生态向多设备协同、跨场景连续交互演进,此类轻量级、高精度的记忆机制将成为端侧 AI 体验升级的关键基础设施。

目前,该 MemoryConversationStore 设计已开源至 HarmonyOS 开发者社区,配套提供 TypeScript 接口定义与默认 summarizeFn 实现,支持接入本地大语言模型或云侧推理服务。后续迭代方向包括引入时间衰减权重、支持多用户会话隔离、以及与分布式设备状态同步联动等。