上下文是怎么构建出来的:OpenClaw 的 Context Assembly 不是聊天记录拼接一条消息进入 OpenClaw 以后,不会直接被送进模型。OpenClaw 的 Agent Loop 分成几个阶段:intake-> context assembly-> model inference-> tool execution-> streaming replies-> persistence
`context assembly` 是模型推理之前的正式阶段。OpenClaw 在让模型做判断之前,会先把本次运行需要的上下文装配出来。这里的上下文不是最近几轮聊天记录,也不是一段很长的 Prompt,而是 OpenClaw Runtime 围绕一次 Agent Run 组织出来的结构化运行现场。一、Session Context:先确定本次运行属于哪个状态空间OpenClaw 以 session 作为一次连续交互和任务执行的状态边界。Session Context 给本次 Agent Run 划定状态空间。没有这个边界,Agent 会串话、串状态、串工具结果。所以 OpenClaw 的上下文装配第一步,是确定这次运行属于哪个 session。二、Agent Context:确定 Agent 的身份、目录、工作区和运行约束OpenClaw 不是让一个通用模型直接处理所有任务。在 Agent Context 中,OpenClaw 会确定:这些信息不会被简单写进 Prompt,它们由 Runtime 解析并控制。Agent 的能力边界不靠模型自觉,而靠 Runtime 管理。比如一个负责周报的 Agent,不应该默认拥有招聘、审批、文件删除、系统变更等无关能力。一个运行在某个 workspace 下的 Agent,也不应该随意跨目录读写。Agent Context 解决的是:谁在运行,在哪里运行,以什么边界运行。三、Config Context:稳定规则不交给模型猜OpenClaw 会把稳定的业务规则放进配置,而不是塞进 Prompt。{ "timezone": "Asia/Shanghai", "browserProfile": "openclaw", "targetUrl": "https://...", "folderDateMode": "week-start", "weekStartsOn": 1, "folderNameStrategy": "week-range", "rangeDatePattern": "MM.DD", "folderNameSuffix": " 周报", "parentDirectoryLabel": "2026", "templateDirectoryLabel": "周报基础模板", "members": [], "pageModule": "./weekly-report.page.mjs"}
比如用户说“这周周报”,模型可以理解语义,但系统必须明确:OpenClaw 的处理方式是:稳定规则配置化,运行时变量结构化,模型不负责猜业务规则。四、Task Context:把模糊任务变成确定参数OpenClaw 会把它转换成确定的 Task Context:timezonefolderNamefolderDateweekEndDatereferenceDatetargetUrlparentDirectoryLabeltemplateDirectoryLabelexpectedMembers
- `folderName` 决定要创建或检查哪个目录
- `parentDirectoryLabel` 决定父目录
- `templateDirectoryLabel` 决定模板目录
- `expectedMembers` 决定谁应该提交周报
OpenClaw 不会把“这周”直接交给模型自由解释。它会在 Runtime 里完成日期计算、命名策略、目录定位、成员列表等确定性处理。Task Context 的职责,是把用户的模糊意图转换成系统可执行的确定参数。五、Browser Context:浏览器现场也是上下文OpenClaw 的一个重要能力是 Browser Agent。Agent 不只是调用 API,也可以进入真实浏览器环境执行任务。以周报自动化为例,OpenClaw 在真正执行任务前,会先检查页面状态。如果当前页面进入登录页,任务会停止,并提示需要先在 OpenClaw 浏览器 profile 中完成登录。如果页面中读不到业务上下文,比如没有 `bookId`,任务也会停止。OpenClaw 不会让 Agent 在一个错误页面上继续执行。它会先确认 Agent 是否站在正确的浏览器现场。Browser Context 解决的是执行前提问题。六、Page Context:从页面里提取业务现场Page Context 进一步提取页面里的业务状态。在周报自动化里,OpenClaw 会从页面中读取:Page Context 的职责,是把页面中的业务状态转换成 OpenClaw 可以使用的结构化上下文。这也是 Browser Agent 能稳定工作的关键。OpenClaw 不是只让模型看页面截图,也不是让模型自由点击页面。OpenClaw 通过页面适配模块提取业务状态,再让 Agent 基于结构化状态继续执行。七、Tool Context:工具不是裸函数,而是受 Runtime 管理的能力工具能力由 Runtime 注入,并且带有执行边界。以浏览器页面能力为例,OpenClaw 不会把底层浏览器能力无限开放给业务代码。它会包装成明确的 API:openUrlnavigatewaitForLoadwaitForNetworkIdlewaitForSelectorwaitForTextwaitForFunctiondelayevaluatesnapshot
这些 API 定义了 Agent 能怎样使用浏览器,而不是让 Agent 随意控制底层环境。在 OpenClaw 里,工具上下文的核心不是“模型能调什么函数”,而是 Runtime 允许 Agent 在什么边界内执行什么能力。八、Execution Context:OpenClaw 要知道任务执行到了哪一步打开目标页面-> 检查登录态-> 读取页面业务上下文-> 找到父目录-> 找到模板目录-> 判断本周目录是否存在-> 创建或修复目录-> 复制模板内容-> 发布文档-> 收集已提交成员-> 对比预期成员-> 生成通知内容-> 发送通知
它们必须成为 Execution Context。普通聊天机器人只关心这一轮怎么回答。OpenClaw 必须关心任务执行到了哪一步。九、Output Context:回复也受上下文约束{ "createMessage": "@所有人\n大家写周报了了!链接:{link}", "auditMessage": "@所有人\n周报提交检查({folderName})\n已提交:{submitted}\n未提交:{missing}\n链接:{link}"}
OpenClaw 的最终回复不是工具结果透传。它会把结构化执行结果渲染成当前渠道可发送、用户可理解的内容。Output Context 解决的是执行结果如何变成正确的渠道输出。十、Persistence Context:运行结果会进入下一轮上下文OpenClaw 的 Agent Loop 最后一步是 persistence。一次运行结束后,OpenClaw 会把关键结果保存下来。下一次 Agent Run 进行 Context Assembly 时,可以基于之前保存的 session state、工具结果、任务状态继续装配上下文。Persistence Context 让 OpenClaw 具备连续运行能力。OpenClaw 的上下文不是一次性 Prompt,而是可持久化、可追踪、可继续使用的运行资产。群聊、私聊、thread、自动化任务、浏览器任务不能混用同一份上下文。这保证 Agent 不串话、不串任务、不串工具结果。时区、日期规则、命名策略、页面模块、通知模板、成员列表这类规则,不交给模型猜。当前日期、本周目录名、周开始日期、页面状态、任务执行结果,都在运行时生成。OpenClaw 从页面里读取 book、group、目录树、文档状态,而不是只依赖截图或自然语言描述。Agent 拿到的是受控 API,不是底层环境的无限权限。内部结果保持结构化,最终输出根据飞书、企微、Telegram、Webhook 等渠道策略渲染。这让 OpenClaw 可以追踪、审计、回放,也可以支持下一轮继续运行。《Prompt、Agent 与工具调用:系统提示词不是一段咒语,工具调用也不是随便开》这一期会继续围绕 OpenClaw 展开,重点讲:- Prompt 在 OpenClaw 里如何配合 Runtime Context 工作
- 工具为什么不是裸函数,而是 Runtime 管理的执行能力
- Browser Tool 为什么是 OpenClaw 的关键工具形态
- OpenClaw 如何把模型决策变成可控、可追踪、可恢复的真实动作