本页内容

本页内容

技术参考

沉默的转身和记忆的刷新

静默事务处理(NO_REPLY)

OpenClaw 支持用于后台任务的“静默”轮次,在这些轮次中,用户不应看到中间输出。

  • 助手会返回一个完整的韵母,该韵母会被修剪为大写 NO_REPLY,以请求没有用户可见的文本。小写字母、标点符号、引号、JSON 和尾随标记仍然可见。
  • 终端生产者记录决策并准备输出一次;交付和客户端使用该事实而不是解析文本。前导 NO_REPLY\n 的文字仅删除该控制线,并将其余部分保留为可见文本。
  • Streaming 控制缓冲属于生产者准备,因此可能的控制线不会泄漏到草稿或打字活动中。
  • 使用此选项可以有意静音,而不是丢失输出。即使需要回复,外部也尊重它;内部结果要求的转向仍然需要答案。

压缩前内存刷新

在自动压缩发生之前,OpenClaw 可以运行静默代理转向,通过选定的内存提供程序保持持久状态,因此压缩无法擦除关键上下文。 Memory Core 在代理工作区中写入 memory/YYYY-MM-DD.md;其他提供商可以公开他们自己的持久性工具。 OpenClaw 监视会话上下文使用情况,一旦超过压缩阈值以下的软阈值,它就会使用确切的静默令牌 NO_REPLY 发送静默“立即写入内存”指令,以便用户看不到任何内容。

内存刷新违背了对话的私密、超然的观点。它的内部提示和回复永远不会输入原始记录,包括当新的用户消息打断它时。内存文件写入保持持久。所需的预检不包括已接纳的等待用户;回复后冲洗包括已完成的转弯。刷新内的任何压缩仅影响其私有视图;原始对话有一个单独的压缩步骤。

配置(agents.defaults.compaction.memoryFlush),完整参考/gateway/config-agents:

键 默认值 笔记
enabled true
model 未设置 仅用于刷新轮次的精确 provider/model 覆盖,例如 ollama/qwen3:8b
softThresholdTokens 4000 触发刷新时,距离压缩阈值之下的差值
forceFlushTranscriptBytes "2mb" 一旦当前转录历史达到此估算字节大小(或类似 "2mb" 的字符串),即强制刷新,即使 token 计数器已过时;0 表示禁用

主机在向选定的内存提供者请求刷新内容和持久性之前,从该配置和活动上下文窗口解析保留、软边距、转录字节保护和可选模型。提供者继承这些值,除非他们故意覆盖其计划中的可选计时字段。当 enabled 为 false 时,主机会跳过提供程序解析器。如果没有冲洗计划,维护仍会使用有效的压实储备。

默认 20,000 个代币储备的上限为上下文窗口的四分之一。默认的 4,000 代币软保证金上限为该储备后剩余窗口的一半。因此,对于 32,768 个代币的窗口,主机使用 8,192 个代币的储备和 4,000 个代币的软保证金。早期冲刷从 20,576 个预计代币开始。阻止令牌压缩从 24,576 开始,如果适用的服务器阈值更高,则稍后开始。在这些阈值之间,内存刷新可以在不需要压缩的情况下运行。转录字节保护默认为 2 MiB 并保持独立。非正阈值会抑制其触发。

当内存刷新刷新过时的使用情况时,它会包含在最新的有效提供程序使用情况报告之后附加的预计消息,然后将总数保存为新的。因此,以下压缩检查说明了后来的转录本增长。

注意:

  • 内置提示词和系统提示词都包含一个 NO_REPLY 提示,用于抑制输出。
  • 当设置了 model 时,刷新轮次会使用该模型,且不会继承当前会话的回退链,因此本地仅维护性质的工作在失败时不会悄然回退到付费会话模型。
  • 刷新每个压缩周期只运行一次(由 session 行跟踪)。
  • 刷新仅对嵌入式 OpenClaw 会话运行;CLI 后端和 heartbeat 轮次会跳过它。
  • 当会话工作空间为只读时(workspaceAccess: "ro" 或 "none"),Memory Core 的文件刷新会被跳过。工具臂提供程序不需要可写的工作空间访问权限。
  • 有关工作区文件布局和写入模式,请参见 Memory。

OpenClaw 在扩展 API 中公开了 session_before_compact 挂钩,但上面的刷新逻辑位于网关端(src/auto-reply/reply/memory-flush-plan.ts、src/auto-reply/reply/memory-flush.ts 和 src/auto-reply/reply/agent-runner-memory.ts),而不是在该挂钩上。

本页有帮助吗?