news 2026/4/15 17:56:04

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
龙虾-OpenClaw一文详细了解-手搓OpenClaw-7 记忆系统II

0. 为什么要手搓 OpenClaw

OpenClaw 很强,但完整工程体量也很大。对于大多数开发者来说,直接阅读全量代码会有三个痛点:

  • 模块多:Gateway、Agent、Tools、Sessions、Channels 互相耦合
  • 路径长:一条消息从输入到回复,跨越多个子系统
  • 调试难:没有自己的“最小版本”,很难定位问题

所以这个系列采用一个更实用的学习路径:
先做最小闭环,再逐步补齐能力。

代码地址: 代码下载


1. 目标

用 Python 从 0 到 1 复现 OpenClaw 的核心能力:

  • Agent Loop(工具调用 + 多轮推理)
  • Session 与并发隔离
  • 记忆系统(短期 + 长期)
  • Skills 系统(分层加载)
  • Web/Telegram 等渠道接入

第一篇的阶段目标是:

  • 跑起 FastAPI 服务
  • 打通一个最小/v1/chat对话接口
  • 具备会话隔离与并发控制(每会话锁 + 全局信号量)

2. 目标架构

用户输入: CLI/Web/Telegram/Discord

Gateway Server

SessionManager

Session Lock + Global Semaphore

Agent Loop

Prompt Builder

LLM Provider Adapter

Tool Runtime

exec/web/search/read/write...

Memory Manager

短期会话历史

长期记忆: MEMORY.md + 日志

Knowledge RAG

BM25 + Embedding + RRF + Rerank

Skill Registry

L1 元数据

L2 指令加载

L3 资源加载

Cron Scheduler

3. 本篇目标

在第 6 篇“能写能存”的基础上,完成“能找能用”:

  • 记忆可按 query 召回(recall
  • 记忆可在会话启动时自动注入(boot_context
  • 对压缩摘要做长期归档,避免历史断层

4. 为什么要单独做记忆

只解决“写入”不解决“召回”,长期记忆就是冷数据仓库。
真正有价值的是让 Agent 在正确时机拿到正确记忆,并且不把上下文撑爆。


5. 关键实现一:召回接口

文件:openclaw_py/app/memory/manager.py

defrecall(self,query:str,top_k:int|None=None)->str:all_entries=self.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():haystack=f"{key}{value}".lower()score=sum(1forterminquery_termsifterminhaystack)

当前是轻量关键词检索,优点是简单稳定、零外部依赖。
缺点是语义召回能力有限,这正是第 8 篇 RAG 的升级点。


6. 关键实现二:会话启动自动注入

文件:openclaw_py/app/core/agent.py

memory_snapshot=self.memory.boot_context(max_chars=settings.long_term_memory_bootstrap_chars,)ifmemory_snapshot:self.history.append({"role":"system","content":memory_snapshot})

这一步让 Agent 在每个 session 起始就具备“基本人设与长期偏好”。
同时通过字符预算限制,避免注入过长。


7. 关键实现三:压缩摘要归档到长期记忆日志

文件:openclaw_py/app/core/agent.py

summary=self._compact_messages(head)ifnotsummary.strip():returnself.memory.store.append_compaction_summary(summary)

压缩不是“删除历史”,而是“把历史迁移到更便宜的层”。
这样即便主上下文被压缩,排查和追溯仍有 daily log 可用。


8. 与 OpenClaw 的对齐点

  • MEMORY.md作为默认长期记忆入口文件
  • 记忆文件纳入 bootstrap 体系(与AGENTS.md同类)
  • 通过“主记忆 + 记忆目录日志”分层管理,控制上下文体积

源码参考(OpenClaw):

  • repos/openclaw/src/hooks/bundled/bootstrap-extra-files/HOOK.md
Only recognized bootstrap basenames are loaded (`AGENTS.md`, ..., `MEMORY.md`, `memory.md`).

9. 下一篇衔接

第 8 篇把当前关键词召回升级为 RAG:

  • BM25 召回
  • 向量召回
  • 融合重排(RRF / rerank)
  • 引用片段可解释输出

10. 支持一下

如果这篇对你有帮助,欢迎点赞、收藏、关注。
有余力的话欢迎打赏支持,我会抽时间多多写博客。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 16:25:28

终极指南:如何免费使用Cursor破解工具获取AI编程助手VIP功能

终极指南:如何免费使用Cursor破解工具获取AI编程助手VIP功能 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached yo…

作者头像 李华
网站建设 2026/4/14 16:20:20

TerraSoil:面向农业物联网的Arduino Modbus土壤传感器库

1. 项目概述TerraSoil 是一款专为农业物联网场景设计的 Arduino 库,面向 Shandong Sain Electronic Technology Co., Ltd. 生产的 SN-300*-TR*-*N01 型 10 合 1 土壤传感器。该传感器采用 RS485 接口,基于 Modbus RTU 协议进行通信,可同步采集…

作者头像 李华
网站建设 2026/4/14 16:19:41

SiameseAOE模型与MySQL集成实战:抽取结果存储与查询优化

SiameseAOE模型与MySQL集成实战:抽取结果存储与查询优化 最近在做一个信息抽取相关的项目,用到了SiameseAOE模型来从文本里抽观点。模型跑起来效果不错,但很快就遇到了新问题:抽出来的结构化数据越来越多,怎么存&…

作者头像 李华
网站建设 2026/4/14 16:19:20

Gromacs伞形采样实战:从蛋白质结合自由能计算到结果分析

1. 蛋白质结合自由能计算入门指南 计算蛋白质结合自由能是理解分子识别机制的关键技术。我第一次接触这个领域时,被各种专业术语搞得晕头转向,直到真正动手操作才明白其中的门道。Gromacs作为一款开源分子动力学软件,其伞形采样(umbrella sam…

作者头像 李华
网站建设 2026/4/14 16:19:19

MATLAB实现的负荷需求响应与电价调整程序

负荷需求响应matlab 考虑电价需求弹性系数矩阵的负荷需求响应,采用matlab进行编程,通过价格需求矩阵确定峰谷平负荷调节量,实现了理想的削峰填谷,程序运行可靠,有详实的参考资料。这段代码主要是一个分段电价需求响应的…

作者头像 李华