如何通过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 就不需要去猜,而是确切知道。
阅读全文