☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜
{"type":"doc","content":[{"type":"paragraph","attrs":{"id":"6986a176-3e15-434c-9942-0de622750a9c","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false}},{"type":"paragraph","attrs":{"id":"0666a031-56d0-42b0-9077-fbf6c8869096","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":" 摘要:我给 workbuddy(一个 ai 编程助手)接入了 openclaw 的开源 agent 框架,给它加了长期记忆能力。本文记录完整的改造过程:为什么要加、遇到了什么坑、具体怎么实现的、效果到底怎么样。如果你也在折腾 agent 框架的二次开发,这篇文章能帮你少踩几个坑。"}]},{"type":"paragraph","attrs":{"id":"a1a016c1-c41f-44d9-9748-a17098db3395","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"hardbreak","attrs":{"id":"1ffe3c19-0c91-43d9-a079-25d9106df090"}},{"type":"text","text":"为什么要给 agent 加\"长期记忆\"?"}]},{"type":"paragraph","attrs":{"id":"98f95701-1703-4e5b-a31e-f79eeca98973","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"我用的 ai 助手叫 workbuddy,日常工作是帮我写代码、改 bug、整理文档。"}]},{"type":"paragraph","attrs":{"id":"02e986b8-b66e-4f7c-97e5-025d94c113f7","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"用了一段时间,我发现一个很烦的问题:每次新对话,它都不记得之前发生过什么。"}]},{"type":"paragraph","attrs":{"id":"57ccf3c8-2d4a-4419-a591-81c1743266f2","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"举个例子:我上周让它帮我重构了一个 python 项目的数据处理模块,花了一下午才把上下文讲清楚。这周我继续做同一个项目,新开一个对话——它又不记得了,我得重新介绍项目背景、重新解释设计决策。"}]},{"type":"paragraph","attrs":{"id":"7e225971-ccdc-4db7-9e4f-5f42280fe1bc","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"这种体验怎么说呢——你就感觉这助手能力是有的,但每次都得从头\"喂\"它上下文,真的很浪费。当时就想,得有个 skill 能帮它记住东西,不然每次开对话都在重复劳动。"}]},{"type":"paragraph","attrs":{"id":"0d196b99-1461-49cf-8afe-2214f5fc94c6","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"市面上主流的解决方案有两种:"}]},{"type":"paragraph","attrs":{"id":"17cd989f-7213-4c74-9ea9-509cd0bd2cc6","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"1. rag(检索增强生成):把历史对话存进向量数据库,需要时检索——但检索精度不稳定,经常捞回不相关的内容。"}]},{"type":"paragraph","attrs":{"id":"4c4e835b-3029-4f83-b915-5f2621feaea8","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"2. 长上下文模型:直接把历史塞进上下文窗口——但成本高,而且窗口再长也终究有个上限。"}]},{"type":"paragraph","attrs":{"id":"17669730-1cfb-4e5d-b459-9df55db5577b","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"我要做的是第三种:基于 openclaw 框架,给 workbuddy 搭建一套结构化的记忆系统,让 agent 能跨会话记住\"我是谁、我在做什么、我做过什么决定\"。"}]},{"type":"paragraph","attrs":{"id":"b44b2594-a1f1-4b84-9b8b-2024d9573790","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"!["},{"type":"text","marks":[{"type":"textstyle","attrs":{"color":"rgb(206, 145, 120)","background":""}}],"text":"配图1:记忆系统三层结构"},{"type":"text","text":"]"}]},{"type":"image","attrs":{"id":"6e795767-c901-4b84-aef1-f611b425ae89","src":"https://developer.qcloudimg.com/http-save/audit-12507981/6010215cd30024c185e00de3e3033842.png","extension":"png","align":"center","alt":"","showalt":false,"href":"","boxshadow":"","width":1100,"aspectratio":"1.777778","status":"success","showtext":true,"ispercentage":false,"percentage":0,"ishoverdraghandle":false}},{"type":"paragraph","attrs":{"id":"6427e8f8-fc86-4923-bd90-79b4790297ca","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"hardbreak","attrs":{"id":"b0b9231c-ad54-4346-ab76-6c5a7f2cc734"}},{"type":"text","text":"openclaw 是什么,为什么选它?"}]},{"type":"paragraph","attrs":{"id":"bea74adf-2b0d-4b18-8867-865c4ba4f682","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"openclaw 是php中文网开源的 ai agent 框架,核心设计理念是\"可插拔\"——agent 的能力不是写死的,而是通过 skill(技能包)动态加载的。"}]},{"type":"paragraph","attrs":{"id":"d55d2dd5-4cb4-4007-9326-4272d6d618ff","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"我选 openclaw 的原因很实际:"}]},{"type":"paragraph","attrs":{"id":"640cd412-fa7a-4924-b9f4-5320b3188928","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"对比维度 | langchain | autogpt | openclaw"}]},{"type":"paragraph","attrs":{"id":"df349aa2-b445-420c-9dc6-1e364677f011","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"---|---|---|---"}]},{"type":"paragraph","attrs":{"id":"f588b985-4ced-4f2e-87d3-596768ef9667","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"上手难度 | 中等 | 高 | 低(有中文文档)"}]},{"type":"paragraph","attrs":{"id":"af0a6d64-3d5c-4ead-82cc-78c23afa6b41","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"技能扩展方式 | chain 拼接 | 插件系统 | skill 包(即插即用)"}]},{"type":"paragraph","attrs":{"id":"9b2f8fe6-512a-49ec-847b-d3b32ddddf14","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"php中文网集成 | 需自行对接 | 需自行对接 | 原生支持"}]},{"type":"paragraph","attrs":{"id":"42d9fd69-b600-49e7-862c-62b4c84f71d6","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"本地部署 | 支持 | 支持 | 支持,且轻量"}]},{"type":"paragraph","attrs":{"id":"57c764ec-f3d6-44de-b7f6-8eb717b63fb7","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"最关键的一点:openclaw 的 skill 机制天然适合做记忆模块。我可以写一个 memory-skill,封装所有的记忆读写逻辑,然后让 agent 在每次对话开始时自动加载。"},{"type":"hardbreak","attrs":{"id":"eaf66b77-7d57-47d8-9e41-6162d146bb2a"}}]},{"type":"paragraph","attrs":{"id":"81713404-1104-4e6c-af70-60e4cccf6f7c","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"!["},{"type":"text","marks":[{"type":"textstyle","attrs":{"color":"rgb(206, 145, 120)","background":""}}],"text":"配图2:三大agent框架对比"},{"type":"text","text":"]"}]},{"type":"image","attrs":{"id":"f1e06fdf-24ec-4797-a257-4d1201016c72","src":"https://developer.qcloudimg.com/http-save/audit-12507981/59cdb2e77ec9d5a43121cd0dab096584.png","extension":"png","align":"center","alt":"","showalt":false,"href":"","boxshadow":"","width":1100,"aspectratio":"1.777778","status":"success","showtext":true,"ispercentage":false,"percentage":0,"ishoverdraghandle":false}},{"type":"paragraph","attrs":{"id":"b14cf963-a1b4-4263-bbef-04a3c9d241a9","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"hardbreak","attrs":{"id":"150ed111-be90-499a-8739-d77bb269ff75"}},{"type":"text","text":"改造过程:从零搭建记忆系统"}]},{"type":"paragraph","attrs":{"id":"d9882835-4c93-4b32-99f6-528050f3f424","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"第一步:分析 workbuddy 的现有架构"}]},{"type":"paragraph","attrs":{"id":"5a48769b-ce4c-4602-9f25-20c5740be6ad","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"workbuddy 本身是基于 claude code 的 ai 编程助手,记忆相关的文件存放在项目的 .workbuddy/ 目录下:"}]},{"type":"paragraph","attrs":{"id":"72191552-2549-4277-bdad-1e7f3491a6be","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":".workbuddy/"}]},{"type":"paragraph","attrs":{"id":"585e927d-0d98-40c0-b703-69512088c398","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"├── memory/"}]},{"type":"paragraph","attrs":{"id":"1caf2b49-42ff-4e7f-8836-feeb104dc9d1","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"│ ├── "},{"type":"text","marks":[{"type":"link","attrs":{"href":"http://memory.md","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"memory.md"},{"type":"text","text":" ← 长期记忆(手动维护)"}]},{"type":"paragraph","attrs":{"id":"78db50e8-453b-4497-8b76-7818132008ea","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"│ └── "},{"type":"text","marks":[{"type":"link","attrs":{"href":"http://yyyy-mm-dd.md","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"yyyy-mm-dd.md"},{"type":"text","text":" ← 每日记忆(自动追加)"}]},{"type":"paragraph","attrs":{"id":"495dc8e9-3d3f-440f-a926-aa1c87c9cf85","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"├── "},{"type":"text","marks":[{"type":"link","attrs":{"href":"http://soul.md","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"soul.md"},{"type":"text","text":" ← 人格定义"}]},{"type":"paragraph","attrs":{"id":"3808297f-bb8b-4a85-9ad6-77135277b95e","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"└── "},{"type":"text","marks":[{"type":"link","attrs":{"href":"http://identity.md","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"identity.md"},{"type":"text","text":" ← 身份信息"}]},{"type":"paragraph","attrs":{"id":"988e2b2d-63c2-4483-b151-986d2dfe6795","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"问题就在这里:记忆文件是存在的,但 agent 不会主动、系统地使用它们。它依赖用户在提示词里硬编码读取规则,而不是真正\"记得\"。"}]},{"type":"paragraph","attrs":{"id":"65e00830-0552-43c0-ba8f-d00953f97c7d","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"第二步:设计记忆系统的三层结构"}]},{"type":"paragraph","attrs":{"id":"f8d7ad8b-7a91-4d42-974b-6b15cdc89238","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"我参考 openclaw 的 skill 设计模式,设计了一个三层记忆结构:"}]},{"type":"paragraph","attrs":{"id":"ae4651ad-a4a8-4fa3-8560-4a8a347b4a9d","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"记忆系统架构"}]},{"type":"paragraph","attrs":{"id":"38358496-2869-494d-ad09-f497ebbe0f66","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"├── 短期记忆(会话内)→ 直接存在上下文里,会话结束即丢弃"}]},{"type":"paragraph","attrs":{"id":"cc258f0e-7dd5-4962-acaa-a3f34ca0130a","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"├── 工作记忆(近期)→ 每日记忆文件("},{"type":"text","marks":[{"type":"link","attrs":{"href":"http://yyyy-mm-dd.md","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"yyyy-mm-dd.md"},{"type":"text","text":"),自动追加"}]},{"type":"paragraph","attrs":{"id":"676d267a-957a-4696-a45e-efe8f25f023a","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"└── 长期记忆(跨项目)→ "},{"type":"text","marks":[{"type":"link","attrs":{"href":"http://memory.md","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"memory.md"},{"type":"text","text":" + 向量检索(可选增强)"}]},{"type":"paragraph","attrs":{"id":"4b75176b-00bf-4173-ad4a-55188ec4f8d6","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"核心思路:不是让 agent \"记住所有事情\",而是让它知道\"在哪里找需要的信息\"。"}]},{"type":"paragraph","attrs":{"id":"8accdfae-f812-42e5-8a8a-effda912f729","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"第三步:用 openclaw skill 机制实现"}]},{"type":"paragraph","attrs":{"id":"02867ebe-321f-4b82-9a22-574c063e74ee","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"我写了一个 workbuddy-memory skill,核心逻辑如下:"}]},{"type":"paragraph","attrs":{"id":"7bc3c18f-6928-47ea-aa98-6878e9152ac6","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"加载阶段(每次对话开始时执行):"}]},{"type":"paragraph","attrs":{"id":"e34c7a09-ec43-46e6-81a5-dd23f28b5c02","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"1. 读取 "},{"type":"text","marks":[{"type":"link","attrs":{"href":"http://memory.md","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"memory.md"},{"type":"text","text":",提取用户偏好、项目约定、技术决策"}]},{"type":"paragraph","attrs":{"id":"c59450fc-ec91-47d0-87ad-878e09399ec4","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"2. 读取今日记忆文件,了解今天已经做了什么"}]},{"type":"paragraph","attrs":{"id":"dd683b5f-2b1f-4a8e-be5b-ea9ee4553ffd","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"3. 如果今日文件不存在,创建它"}]},{"type":"paragraph","attrs":{"id":"a7c6812b-e045-47e0-8025-da985e11fe96","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"写入阶段(每次有实质性工作时执行):"}]},{"type":"paragraph","attrs":{"id":"0a841616-75dc-4ea7-9af1-377e07249702","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"1. 判断当前工作是否值得记录(用 llm 做判断,不是所有对话都写)"}]},{"type":"paragraph","attrs":{"id":"d97fb34f-e0c8-49e7-a30a-0b20fac80feb","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"2. 追加写入今日记忆文件"}]},{"type":"paragraph","attrs":{"id":"4e92565c-fe78-4e58-8515-89cdae9b5ce7","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"3. 如果发现了跨项目的通用经验,提示用户是否更新 "},{"type":"text","marks":[{"type":"link","attrs":{"href":"http://memory.md","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"memory.md"}]},{"type":"paragraph","attrs":{"id":"a0560439-3da8-4c8b-82e0-f45bcf1c399d","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"(代码部分省略,详见 markdown 版本)"}]},{"type":"paragraph","attrs":{"id":"00661b4b-8402-4b25-a648-a8d4c210337e","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"这套逻辑被封装成一个 openclaw skill,然后在 workbuddy 的系统提示词里加入一条指令:"}]},{"type":"paragraph","attrs":{"id":"37a512b6-001f-4073-b993-5e8ffb90f276","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"\"每次开始对话时,先调用 workbuddy-memory skill 加载记忆,并在回复中隐性使用这些信息。\""}]},{"type":"paragraph","attrs":{"id":"77ed9d50-952c-4b8c-9c5e-08f5c0d18084","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"hardbreak","attrs":{"id":"056ee705-c9ef-4bec-b14d-175acfe918b6"}},{"type":"text","text":"["},{"type":"text","marks":[{"type":"textstyle","attrs":{"color":"rgb(206, 145, 120)","background":""}}],"text":"配图3:记忆系统架构图"},{"type":"text","text":"]"}]},{"type":"image","attrs":{"id":"b7d7eaf7-b520-42af-81ce-64cabbb558c2","src":"https://developer.qcloudimg.com/http-save/audit-12507981/1113e5ec916d5b29dd028271905cdc22.png","extension":"png","align":"center","alt":"","showalt":false,"href":"","boxshadow":"","width":1100,"aspectratio":"1.777778","status":"success","showtext":true,"ispercentage":false,"percentage":0,"ishoverdraghandle":false}},{"type":"paragraph","attrs":{"id":"f3076deb-55de-4be8-8c33-4b6d6a05d9ac","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"hardbreak","attrs":{"id":"44506fd9-5604-471e-9913-e85eb2f3e96f"}},{"type":"text","text":"实际效果:有没有用?"}]},{"type":"paragraph","attrs":{"id":"366fb6fc-561b-41c5-90bc-95a3904a32eb","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"说实话,改完之后的第一感觉就是:能用就好。它不会让你觉得\"哇 agent 变聪明了\",但至少不用每次都从头\"喂\"上下文了。"}]},{"type":"paragraph","attrs":{"id":"53301371-ad47-47c3-9b15-15aa175aab4a","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"有效果的部分"}]},{"type":"paragraph","attrs":{"id":"3856c7ad-4c2f-43ec-b952-5b6d2980e6b7","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"场景一:项目约定能被记住了"}]},{"type":"paragraph","attrs":{"id":"009a1378-3fd9-4b16-9295-ad2271dd9b0c","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"之前:每次新对话都要重新告诉 agent \"这个项目用 python 3.11,依赖管理用 poetry\"。"}]},{"type":"paragraph","attrs":{"id":"d0531e84-1854-40a5-bd44-0d427b7e136c","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"之后:agent 从 "},{"type":"text","marks":[{"type":"link","attrs":{"href":"http://memory.md","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"memory.md"},{"type":"text","text":" 里读到这条,主动用 poetry 而不是 pip。"}]},{"type":"paragraph","attrs":{"id":"7dd29f3d-2b07-42ed-a176-f4ddbf36dad7","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"场景二:设计决策有延续性了"}]},{"type":"paragraph","attrs":{"id":"412fb7bb-d785-458f-a7eb-5813d58dcb54","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"之前:上周决定\"用 redis 做缓存层\",这周 agent 可能建议用 memcached,因为它不记得了。"}]},{"type":"paragraph","attrs":{"id":"0f358d7f-591b-4219-9dd6-8dd18d2db57e","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"之后:"},{"type":"text","marks":[{"type":"link","attrs":{"href":"http://memory.md","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"memory.md"},{"type":"text","text":" 里记录了技术决策和原因,agent 的新建议会考虑已有决策。"}]},{"type":"paragraph","attrs":{"id":"97464b34-85e7-49bd-9013-592ccbc06269","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"还不够好的部分"}]},{"type":"paragraph","attrs":{"id":"d76cb4a6-0d24-4b21-afd5-1f76cebf0542","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"问题一:记忆文件需要手动维护质量"}]},{"type":"paragraph","attrs":{"id":"219af097-28f3-473a-a1f6-7d950dfc3bbb","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","marks":[{"type":"link","attrs":{"href":"http://memory.md","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"memory.md"},{"type":"text","text":" 不是\"写了就完事\"的。用久了里面会有过时的信息、重复的内容、已经不再适用的决策。需要定期整理,但目前没有自动化工具做这件事。"}]},{"type":"paragraph","attrs":{"id":"6e94eead-f27f-4c95-b397-c510cecaf539","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"问题二:agent 有时候\"过度引用\"记忆"}]},{"type":"paragraph","attrs":{"id":"2b4720d5-49c7-406d-b899-0287b42c7fac","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"比如 "},{"type":"text","marks":[{"type":"link","attrs":{"href":"http://memory.md","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"memory.md"},{"type":"text","text":" 里记录了\"用户偏好简洁回复\",结果 agent 连本来应该详细解释的技术概念也一句话带过了。记忆变成了束缚。"}]},{"type":"paragraph","attrs":{"id":"9c379f6e-d024-4964-9e6a-86a241732098","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"问题三:多项目场景下的记忆隔离"}]},{"type":"paragraph","attrs":{"id":"046923ba-821c-4cee-81bb-0c88565b3f66","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"目前所有项目共享同一套记忆文件结构,但不同项目的上下文是应该隔离的。这个问题我还没有很好的解决方案。"}]},{"type":"paragraph","attrs":{"id":"6063414c-687b-47b7-9b04-8f9d76ef330b","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"["},{"type":"text","marks":[{"type":"textstyle","attrs":{"color":"rgb(206, 145, 120)","background":""}}],"text":"配图4:改造前后效果对比"},{"type":"text","text":"]"}]},{"type":"image","attrs":{"id":"da0a5e89-0c29-4dbc-823a-53ada9aa18da","src":"https://developer.qcloudimg.com/http-save/audit-12507981/a47d12c01d0c177962a36cfedd18061d.png","extension":"png","align":"center","alt":"","showalt":false,"href":"","boxshadow":"","width":1100,"aspectratio":"1.777778","status":"success","showtext":true,"ispercentage":false,"percentage":0,"ishoverdraghandle":false}},{"type":"paragraph","attrs":{"id":"9c2f43a6-0793-4e75-bc95-4548c82c7af8","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"hardbreak","attrs":{"id":"0043f499-5957-42d9-9f03-2af75e03f472"}},{"type":"text","text":"踩过的坑"}]},{"type":"paragraph","attrs":{"id":"2feb5dd6-eee8-4e23-913e-47994a35fbc7","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"最头疼的一件事:记忆注入方式搞错了"}]},{"type":"paragraph","attrs":{"id":"06ff487c-4196-4e6a-9c4f-17c9fd4031a1","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"我最开始的做法很直接——把记忆文件内容直接拼接到系统提示词里。听起来没问题对吧?跑起来才发现,记忆内容一旦多了,上下文窗口被大量占掉,agent 的回复质量反而下降。明明是想让它\"更聪明\",结果它变得更笨了。"}]},{"type":"paragraph","attrs":{"id":"c1f58680-9f63-4f86-857e-4de270a2e11e","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"折腾了两三天,最后改成了\"索引式注入\":系统提示词里只放记忆的索引和摘要,具体内容按需读取。跟操作系统的虚拟内存一个道理——不是把硬盘全塞进内存,而是按需换页。"}]},{"type":"paragraph","attrs":{"id":"5dbb4265-4ec3-4c2b-938b-15e435a0a886","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"另外还有两个小坑顺带说一下:"}]},{"type":"paragraph","attrs":{"id":"84aa2304-226e-421a-a114-12ee275edf2d","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"- agent 每次有实质性工作就追加记忆,同一件事在每日文件里出现好几次。后来加了写入前去重判断,多花一次 llm 调用,但值得。"}]},{"type":"paragraph","attrs":{"id":"fc52cf31-0809-4043-89e8-925471805398","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"- openclaw skill 里 python 代码出错时,错误信息被框架吞了,只看到\"skill execution failed\"。排查费劲,最后自己在 skill 里加了日志输出到固定文件。"}]},{"type":"paragraph","attrs":{"id":"0d9d360a-f9fa-4b38-9229-1c9a0fdf83ff","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"==="}]},{"type":"paragraph","attrs":{"id":"d3c8df56-3f4d-420a-8593-310c8babafa4","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"下一步计划"}]},{"type":"paragraph","attrs":{"id":"bab0fdce-9420-4369-ad84-0a6b4f90bd49","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"目前这个记忆系统还是\"能用\"阶段,离\"好用\"还有距离。接下来打算做几件事:"}]},{"type":"paragraph","attrs":{"id":"47b648ac-c02e-4b31-b735-dea890ad2107","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"1. 自动记忆整理:定期用 llm 对 "},{"type":"text","marks":[{"type":"link","attrs":{"href":"http://memory.md","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"memory.md"},{"type":"text","text":" 做去重和结构化整理,类似\"记忆压缩\"。"}]},{"type":"paragraph","attrs":{"id":"d0dcdb0a-8a70-46b2-8135-4d75a52b2397","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"2. 多项目记忆隔离:为每个项目创建独立的记忆空间,同时在更高层级维护跨项目的通用记忆。"}]},{"type":"paragraph","attrs":{"id":"78905106-a127-49ae-911c-f73717f1ea99","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"3. 记忆质量评分:给每条记忆打\"新鲜度\"和\"重要性\"分数,对话时优先加载高分记忆。"}]},{"type":"paragraph","attrs":{"id":"e9a6749f-8090-4595-a6e0-87a2681a8fac","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"如果你也在做 agent 记忆相关的改造,或者想用 openclaw 做二次开发,欢迎在评论区交流。新的事物出现,我们都是勇敢的探索者。"}]},{"type":"paragraph","attrs":{"id":"946bf63f-e0ae-41fa-bc59-cdd35338b267","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"==="}]},{"type":"paragraph","attrs":{"id":"c254bf5d-0385-4720-a357-9dbc6a194068","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"参考资料"}]},{"type":"paragraph","attrs":{"id":"ec906504-a668-4ad1-a01b-0dc726e2fe33","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"- openclaw 官网"}]},{"type":"paragraph","attrs":{"id":"714ab81e-0815-4ce8-b4bf-9b4f57315a91","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"- openclaw github 仓库"}]},{"type":"paragraph","attrs":{"id":"d2bbb2e3-3266-4de1-9f2c-c1ccfd756f66","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"- workbuddy 项目"}]},{"type":"paragraph","attrs":{"id":"71d00768-7220-475f-ba9d-49ec1ab339a8","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false},"content":[{"type":"text","text":"- php中文网开发者社区 - ai agent 钳王争霸"}]},{"type":"paragraph","attrs":{"id":"73e21468-c2a8-469f-ac65-ebd911f404db","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false}},{"type":"paragraph","attrs":{"id":"6d36797f-9070-456c-9136-8509588cb074","textalign":"inherit","indent":0,"color":null,"background":null,"ishoverdraghandle":false}}]}