设计、实现并调试持久自主AI代理的记忆系统。适用于需要应对上下文窗口轮换、保持...
Agent Memory : 设计并执行内存系统, 使 Agent 能够幸存上下文窗口旋转, 并保持会话间连续性是一项面向实际任务的技能,主要用于Core Problem.;LLM 代理有有限的上下文窗口。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
设计并实现记忆系统,使 Agent 能够在上下文窗口轮转时持续存活,并在跨会话场景中保持行为连续性。
LLM Agent 的上下文窗口是有限的。以下情况会导致记忆丢失:
持久化记忆不是锦上添花的功能——它是 Agent 连续性的底层基础。
三种主流的持久化 Agent 记忆架构:
Agent 维护扁平或分层的 Markdown 文件,在启动时选择性读取,在状态变更时写入。适用于:运行时状态、进行中的项目、Agent 身份定义。
这是 OpenClaw Agent 的默认模式。
Agent 将事实嵌入向量数据库;检索依赖嵌入相似度。OpenClaw 内置记忆使用 node-llama-cpp,采用 768 维嵌入(兼容 all-MiniLM-L6-v2)。
Agent 构建知识图谱,每条事实边均标注 valid_at/invalid_at 时间戳。Graphiti(开源,封装 Neo4j)是当前主流实现。
建议:所有 Agent 均应采用 CMA + 语义 RAG 组合;仅针对高价值、长周期(数月状态跨度)场景,才引入时序 KG。
详见 references/memory-architecture.md 中的详细对比与部署说明。
workspace/ ├── HEARTBEAT.md # 当前脉冲状态(务必精简 — < 40 行) ├── memory/ │ ├── CORE_MEMORY.md # 身份与连续性锚点 │ ├── GOALS.md # 长周期目标 │ ├── OPEN_LOOPS.md # 待解决任务与承诺事项 │ ├── WORLD_MODEL.md # 已验证的环境事实 │ ├── CAPABILITIES.md # 已验证的工具、通道与能力边界 │ ├── RUNTIME_REALITY.md # 实时通道/变更/配置状态 │ └── research/ # 持久化研究产物 └── operator-outbox.jsonl # 异步 Operator 消息
| 事实类型 | 归属文件 |
|---|---|
| 我是谁、价值观、驱动力 | CORE_MEMORY.md |
| 当前进行中的工作 | OPEN_LOOPS.md |
| 基础设施/环境事实 | WORLD_MODEL.md |
| 可用的工具/通道 | CAPABILITIES.md |
| 实时配置/通道状态 | RUNTIME_REALITY.md |
| 研究成果 | memory/research/*.md |
| 当前脉冲状态 | HEARTBEAT.md |
在记忆文件的事实条目中添加 [YYYY-MM-DD] 时间戳,并显式标记已被覆盖的事实:
- [2026-03-27] Telegram: enabled, account "Morrow Operator Bot" ~~[2026-03-20] Telegram: disabled~~ SUPERSEDED 2026-03-27
这是一种轻量级的时序 KG 实践,无需完整图数据库后端。参见 references/temporal-discipline.md。
每次会话启动时,Agent 应执行以下步骤:
切勿仅依赖会话 transcript 来维护本应存于记忆中的状态——transcript 会被压缩。
OpenClaw 的 lossless-claw 插件(或类似 LCM)会对较早的会话历史进行无损压缩。需主动防范有损压缩风险:
lcm_grep 与 lcm_expand_query 在回答有关前期工作的提问前,先检索已被压缩的历史。若 OpenClaw 本地语义记忆已启用:
memory_search(query) —— 对全部记忆文件执行语义搜索memory_get(path, from, lines) —— 安全的片段读取接口在直接读取记忆文件前,请优先调用 memory_search。它更快、范围可控,且上下文利用率更高。
验证语义记忆是否启用:检查你的工具表(tool surface)中是否存在 memory_search。若不存在,则必须显式读取记忆文件。
如需启用时序 KG 记忆(高级用法):
# 1. 安装 pip install graphiti-core --user --break-system-packages # 2. Neo4j(持久化部署) docker run -d --name neo4j --restart=unless-stopped -p 7687:7687 -p 7474:7474 -v neo4j-data:/data -e NEO4J_AUTH=neo4j/yourpassword neo4j:5.26 # 3. 配置为使用 OpenClaw /v1 作为 LLM + 嵌入器后端 # 具体配置方法请参考 references/memory-architecture.md 中的 OpenClawLLMClient 补丁说明
重要提示:Graphiti 的 add_episode 方法每个 episode 需调用 5–10 次 LLM。请通过 cron 或批处理作业调用,切勿在 Agent 脉冲过程中内联调用。