龙虾-OpenClaw一文详细了解-手搓OpenClaw-7 记忆系统II

张开发
2026/4/14 16:26:23 15 分钟阅读

分享文章

龙虾-OpenClaw一文详细了解-手搓OpenClaw-7 记忆系统II
0. 为什么要手搓 OpenClawOpenClaw 很强但完整工程体量也很大。对于大多数开发者来说直接阅读全量代码会有三个痛点模块多Gateway、Agent、Tools、Sessions、Channels 互相耦合路径长一条消息从输入到回复跨越多个子系统调试难没有自己的“最小版本”很难定位问题所以这个系列采用一个更实用的学习路径先做最小闭环再逐步补齐能力。代码地址: 代码下载1. 目标用 Python 从 0 到 1 复现 OpenClaw 的核心能力Agent Loop工具调用 多轮推理Session 与并发隔离记忆系统短期 长期Skills 系统分层加载Web/Telegram 等渠道接入第一篇的阶段目标是跑起 FastAPI 服务打通一个最小/v1/chat对话接口具备会话隔离与并发控制每会话锁 全局信号量2. 目标架构用户输入: CLI/Web/Telegram/DiscordGateway ServerSessionManagerSession Lock Global SemaphoreAgent LoopPrompt BuilderLLM Provider AdapterTool Runtimeexec/web/search/read/write...Memory Manager短期会话历史长期记忆: MEMORY.md 日志Knowledge RAGBM25 Embedding RRF RerankSkill RegistryL1 元数据L2 指令加载L3 资源加载Cron Scheduler3. 本篇目标在第 6 篇“能写能存”的基础上完成“能找能用”记忆可按 query 召回recall记忆可在会话启动时自动注入boot_context对压缩摘要做长期归档避免历史断层4. 为什么要单独做记忆只解决“写入”不解决“召回”长期记忆就是冷数据仓库。真正有价值的是让 Agent 在正确时机拿到正确记忆并且不把上下文撑爆。5. 关键实现一召回接口文件openclaw_py/app/memory/manager.pydefrecall(self,query:str,top_k:int|NoneNone)-str:all_entriesself.store.list_all()ifnormalized_queryin{,*,all,everything}:return\n.join(f-{k}:{v}fork,vinall_entries.items())query_terms[tfortinre.split(r\s,normalized_query)ift]forkey,valueinall_entries.items():haystackf{key}{value}.lower()scoresum(1forterminquery_termsifterminhaystack)当前是轻量关键词检索优点是简单稳定、零外部依赖。缺点是语义召回能力有限这正是第 8 篇 RAG 的升级点。6. 关键实现二会话启动自动注入文件openclaw_py/app/core/agent.pymemory_snapshotself.memory.boot_context(max_charssettings.long_term_memory_bootstrap_chars,)ifmemory_snapshot:self.history.append({role:system,content:memory_snapshot})这一步让 Agent 在每个 session 起始就具备“基本人设与长期偏好”。同时通过字符预算限制避免注入过长。7. 关键实现三压缩摘要归档到长期记忆日志文件openclaw_py/app/core/agent.pysummaryself._compact_messages(head)ifnotsummary.strip():returnself.memory.store.append_compaction_summary(summary)压缩不是“删除历史”而是“把历史迁移到更便宜的层”。这样即便主上下文被压缩排查和追溯仍有 daily log 可用。8. 与 OpenClaw 的对齐点MEMORY.md作为默认长期记忆入口文件记忆文件纳入 bootstrap 体系与AGENTS.md同类通过“主记忆 记忆目录日志”分层管理控制上下文体积源码参考OpenClawrepos/openclaw/src/hooks/bundled/bootstrap-extra-files/HOOK.mdOnly recognized bootstrap basenames are loaded (AGENTS.md, ..., MEMORY.md, memory.md).9. 下一篇衔接第 8 篇把当前关键词召回升级为 RAGBM25 召回向量召回融合重排RRF / rerank引用片段可解释输出10. 支持一下如果这篇对你有帮助欢迎点赞、收藏、关注。有余力的话欢迎打赏支持我会抽时间多多写博客。

更多文章