跳转到内容

Memory

大语言模型本身是无状态的——每次请求都从零开始。ESP-Claw 通过 claw_memory 将两类持久化上下文在请求前注入,使 Agent 表现出「记住」对话与用户的能力。

两类记忆面向不同的时间尺度,解决不同的问题:

ESP-Claw 的记忆模块提供两种记忆模式:

模式行为适用场景
Structured memory management(完整模式)使用结构化记录 + 摘要标签目录;需要时通过 memory_recall 召回详情默认模式,适合持续使用与自动抽取
Lightweight memory(轻量模式)维持 profile 与会话历史,长期记忆以 MEMORY.md 文本注入为主资源受限或希望更简化链路

basic_demo 默认使用完整模式,可在 menuconfig (Top)Basic Demo ConfigMemory management mode 切换。

会话历史解决的是单次对话的上下文连贯问题。没有它,每一轮消息对模型来说都是全新的开始,无法引用之前说过的内容。

ESP-Claw 以 Session ID 为边界管理历史。同一 Session ID 下的轮次串联成一条对话线,切换 Session ID 即切换到另一条独立对话线,历史互不可见。这让系统可以并行处理来自不同来源(如不同 IM 用户、不同渠道)的对话,彼此隔离。

会话历史有容量上限(最大消息条数与单条字符数),超出后自动截断最旧的轮次。这是有意为之的设计:防止历史无限膨胀导致 token 消耗失控,同时引导系统将真正需要长期保留的信息提炼进长期记忆。

长期记忆:跨 session 的持久知识

Section titled “长期记忆:跨 session 的持久知识”

长期记忆跨所有 Session 共享,解决的是超出单次对话生命周期的信息持久化问题:用户偏好、设备状态摘要、跨任务的重要约定等。

结构化长期记忆支持以下基础操作:

操作作用
memory_store写入长期记忆
memory_recall按摘要标签召回相关记忆
memory_list查看当前已存储的记忆
memory_update更新已有记忆
memory_forget删除指定记忆

除了结构化长期记忆,claw_memory 还会维护三份可编辑的 profile 文件,它们会作为系统上下文注入:

文件作用建议写入内容
user.md当前用户画像称呼、偏好语言、常用术语、长期约定
soul.mdAgent 的“灵魂”与价值观助手的核心风格、做事原则、优先级
identity.mdAgent 身份卡名称、角色、能力边界、擅长方向

可以把它们理解为“稳定行为设定”,而 memory_records.jsonl 中的结构化条目更偏向“可检索的事实记忆”。

当前实现中,长期记忆不是固定的 type 枚举,而是结构化条目模型。每条条目主要包含:

字段用途示例
content记忆正文(归一化后的长期事实)“用户偏好中文回复”
tags用于生成摘要标签目录(最多取前 1–3 个)中文,回复风格
keywords用于关键词索引,辅助定位相关条目中文,简洁
source记录来源(如 manualauto_llmauto_llm

ESP-Claw 不依赖向量数据库,而采用 摘要标签 机制实现轻量级检索。每条记忆通常带有 1–3 个 tags,系统从中生成摘要标签目录。完整模式下,请求时系统自动注入该目录,供 LLM 先定位标签,再按需调用 memory_recall 召回正文。

完整模式下,请求开始时会尝试对最新用户消息做自动抽取:将可长期保留的信息写入结构化记忆,并在写入前后做去重/替换处理,避免重复积累同一事实。

需要注意,当前自动抽取主要基于用户消息本身;设备事件是否入库取决于业务侧是否主动调用 memory_store 写入。

内容类型建议放在
助手人格、风格、价值观soul.md
助手名称、角色、能力边界identity.md
用户长期偏好与沟通约定user.md + 长期记忆(memory_ops
用户姓名、偏好、语言习惯长期记忆(完整模式优先通过 memory_ops 管理)
设备当前状态、已完成任务的摘要长期记忆(结构化记录 + 摘要标签)
本次对话的临时指令、中间步骤自然留在会话历史中,无需干预
一次性但跨 session 的状态写入长期记忆,任务完成后主动清除