如何通过Nanobot源码学习OpenClaw的Context架构?
摘要:【OpenClaw】通过 Nanobot 源码学习架构 (5)Context 目录【OpenClaw】通过 Nanobot 源码学习架构 (5)Context0x00 概要0x01 提示词系统1.1 OpenClaw1.2 Nanoboot
【OpenClaw】通过 Nanobot 源码学习架构---(5)Context
目录【OpenClaw】通过 Nanobot 源码学习架构---(5)Context0x00 概要0x01 提示词系统1.1 OpenClaw1.2 Nanoboot1.3 Claw00x02 ContextBuilder 基本功能2.1 定义2.2 核心特色2.3 如何调用2.3.1 _process_message2.3.2 _run_agent_loop()0x03 图例3.1 关键交互3.2 设计特点0x03 重点函数3.1 build_messages()3.1.1 返回值3.1.2 生成逻辑3.1.3 完整消息构建流程3.2 build_system_prompt()3.2.1 逻辑3.2.2 构建流程图3.3 _build_runtime_context3.4 _build_user_content0x04 代码0x00 参考
0x00 概要
OpenClaw 应该有40万行代码,阅读理解起来难度过大,因此,本系列通过Nanobot来学习 OpenClaw 的特色。
Nanobot是由香港大学数据科学实验室(HKUDS)开源的超轻量级个人 AI 助手框架,定位为"Ultra-Lightweight OpenClaw"。非常适合学习Agent架构。
丰富的上下文信息是 Agent 有效规划和行动的基础。一个 Agent 在工作时需要访问的”上下文”如下:
上下文类型
举例
存储方式
对话历史
用户刚才说了什么
JSON / 数据库
长期记忆
用户偏好、过往总结
向量数据库 / 知识图谱 / 文本
外部知识
RAG 检索的文档
向量数据库 / API / 文本
工具定义
可调用的函数描述
代码 / MCP 协议 / 文本
人类输入
标注、纠正、审核
文本 / 表单
临时草稿
推理中间结果
内存 / 临时文件
这些东西格式不同、存储不同、访问方式不同。如果没有统一抽象,每接一个新资源就得写一堆胶水代码。这些东西怎么存、怎么选、怎么压缩、怎么塞进那个有限的 token 窗口里——这才是真正决定 AI 效果的关键。
ContextBuilder 类是 Nanobot Agent 的「上下文大脑」,将分散的身份、记忆、技能、运行时信息整合为 LLM 可识别的标准化对话上下文;其核心价值为:屏蔽了上下文构建的复杂性,为 Agent 提供「开箱即用」的完整对话上下文,是连接 Agent 各模块与 LLM 的核心枢纽。
注:本系列借鉴的文章过多,可能在参考文献中有遗漏的文章,如果有,还请大家指出。
0x01 提示词系统
1.1 OpenClaw
OpenClaw 的提示词系统由一组放置在工作区目录下的Markdown文件组成,每个文件承担特定职责。这几个被注入的Markdown文件来自Workspace 的一组 .md 文件,每个文件都有独特的作用,而且易于读写:
AGENTS.md:操作手册。Agent 应该如何思考,何时使用哪个工具,遵循什么安全规则,按什么顺序做事。
SOUL.md:性格与灵魂。语气、边界、优先级。希望 Agent 简洁明了不给多余建议?写在这里。想要一个友好的助手?也写在这里。
USER.md:你的用户画像。如何称呼你,你的职业,你的偏好。Agent 在每次回复前都会读取这个文件。
MEMORY.md:长期记忆。绝不能丢失的事实。
YYYY-MM-DD.md:每日日志。今天发生了什么,哪些任务正在进行,你们讨论了什么。到了明天,Agent 会打开昨天的日志并接续上下文。
BOOTSTRAP.md:首次运行仪式(一次性,仅全新工作空间注入),如引导对话等
IDENTITY.md:身份与氛围。很短的文件,但它奠定了整体的基调。
HEARTBEAT.md:定期检查清单。“检查邮件”、“看看监控是否在运行”。
TOOLS.md:本地工具提示。脚本存放在哪里,哪些命令可用。这样 Agent 就不需要去猜,而是确切知道。
