静默轮次与记忆刷新
静默维护(NO_REPLY)¶
OpenClaw 支持用于后台任务的“静默”回合,用户不应看到中间输出。
- 助手以精确的静默令牌
NO_REPLY/no_reply开头,表示“不要向用户投递回复”。OpenClaw 会在投递层剥离/抑制它。 - 精确静默令牌抑制不区分大小写:当整个负载仅为静默令牌时,
NO_REPLY和no_reply均有效。 - 自
2026.1.10起,OpenClaw 还会在部分块以NO_REPLY开头时抑制草稿/正在输入流式传输,因此静默操作不会在回合中途泄露部分输出。 - 这仅用于真正的后台/不投递回合——它不是普通可操作用户请求的快捷方式。
压缩前内存刷新¶
在自动压缩发生之前,OpenClaw 可以运行一个静默的代理回合,将持久状态写入磁盘(例如代理工作区中的 memory/YYYY-MM-DD.md),以便压缩不会擦除关键上下文。它会监控会话上下文使用情况,一旦超过压缩阈值下方的软阈值,就会使用精确的静默令牌 NO_REPLY / no_reply 发送静默的“立即写入内存”指令,使用户看不到任何内容。
内存刷新针对对话的私有、分离视图运行。其内部提示和回复永远不会进入原始转录,即使新的用户消息中断它也是如此。内存文件写入保持持久。必需的预检会排除已准入的等待用户;回复后的刷新包含已完成的回合。刷新内部的任何压缩仅影响其私有视图;原始对话有单独的压缩步骤。
配置(agents.defaults.compaction.memoryFlush),完整参考见 /gateway/config-agents:
| 键 | 默认值 | 说明 |
|---|---|---|
enabled |
true |
|
model |
unset | 仅用于刷新回合的精确提供商/模型覆盖,例如 ollama/qwen3:8b |
softThresholdTokens |
4000 |
低于压缩阈值并触发刷新的间隙 |
forceFlushTranscriptBytes |
"2mb" |
当活动转录历史达到此估算字节大小(或类似 "2mb" 的字符串)时强制刷新,即使令牌计数器已过期;0 表示禁用 |
对于 32,768 令牌窗口,内置计划使用 8,192 令牌预留和 4,000 令牌软边距。早期刷新从 20,576 个预测令牌开始。阻塞式令牌压缩从 24,576 开始,或者如果适用的服务器阈值更高则更晚。在这些阈值之间,内存刷新可以在不要求压缩的情况下运行。 所选内存提供商拥有预留和刷新边距;如果没有刷新计划,维护仍使用有效压缩预留。非正阈值会抑制令牌触发器。转录字节保护保持独立。
当内存刷新更新过期的使用情况时,它会在保存总计为最新之前,包含在最新有效提供商使用报告之后追加的预测消息。因此,随后的压缩检查会考虑该后续转录增长。
说明:
- 内置提示和系统提示包含
NO_REPLY提示,以抑制投递。 - 当设置
model时,刷新回合使用该模型,而不继承活动会话的回退链,因此仅限本地的维护不会在失败时静默回退到付费对话模型。 - 刷新每个压缩周期运行一次(在会话行中跟踪)。
- 刷新仅针对嵌入式 OpenClaw 会话运行;CLI 后端和心跳回合会跳过它。
- 当会话工作区为只读(
workspaceAccess: "ro"或"none")时,刷新会被跳过。 - 有关工作区文件布局和写入模式,请参阅 内存。
OpenClaw 在扩展 API 中暴露了 session_before_compact 钩子,但上述刷新逻辑位于 Gateway 端(src/auto-reply/reply/memory-flush.ts、src/auto-reply/reply/agent-runner-memory.ts),而不是该钩子上。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw