Context 与缓存¶
每次请求包含的不只是最新消息。minacode 将较稳定的内容放在前面,接着是当前对话,频繁变化的任务状态放在最后。这样既能让 agent 掌握完整信息,也能为支持缓存的 provider 保留一段较长、可复用的 prompt 前缀。
模型会收到什么¶
工具定义与消息 context 一同发送:内置工具;安装 skill 后提供 Skill;以及来自当前已连接 server的 MCP 工具和资源。已配置但未连接的 server 不占用 context。
控制 context 大小¶
过大的工具结果进入对话前会被缩短;agent 之后可以通过 Recall 取回完整结果。重复的 skill 指令和 MCP 描述不会再次完整发送,而是引用首次出现的完整内容。
Compaction¶
当估算的请求接近 runtime.max_context_tokens 时,minacode 会执行 compact:较早的对话被替换为简短摘要,最近的消息保持原样。触发时会预留所配置的 provider 输出上限(未指定时为 16K)、工具 schema 以及至少 4K 的安全余量。Session 会在同一轮中继续,因此长任务无需停止。
active context 中的摘要是有损的,但每次 compaction 都会把被淘汰的消息逐字捕获为一个有界的 history segment。append-only session 日志中较早的快照仍是冷数据式的真实来源,因此 compaction 不会改写它们。
有界的 history index 是 conversation history 之前的独立 context section。agent 会用 RecallContext 直接取回某个 seg.N 摘录,或用正则在已存 segment 的标题和正文中搜索早期细节。任务记忆(goal、plan、facts、checks)位于 conversation history 之后并会原样保留,因此值得保留的决定应写入那里。
运行 /compact 可以立即压缩,而不必等待阈值;例如可在大型重构前使用。/status 会显示当前 session 已执行的 compaction 次数。
Prompt 缓存¶
Prompt 缓存允许 provider 复用请求开头未变化部分的计算。下一次请求通常以相同的指令、环境、工具、history index 和早期对话开始,因此只需处理新增的尾部。任务记忆位于 conversation history 之后,所以更新任务记忆不会使这个更大的前缀失效。连接 MCP server、改变已安装的 skill、切换模型或修改前部内容,都会降低下一次请求的缓存命中。
请求只会复用到首次出现差异的位置。因此,靠前位置发生变化——例如连接 MCP server、安装 skill 或切换模型——会缩短可复用前缀。这也是稳定内容放在前面的原因。
OpenAI-compatible provider 可以自动复用匹配的前缀;provider 支持时,minacode 会提供稳定的 cache key。对于 Anthropic,minacode 会显式将工具和 system 指令标记为临时可缓存前缀。不同 provider 的支持方式和统计口径可能不同。
检查命中率¶
/status 会显示 provider 统计的缓存 prompt token:一组是整个 session,另一组是最近一次请求:
命中率会随 provider、模型、prompt 长度和对话变化。当前缀保持一致时,可达到 90–99%。这是观察值,不是保证值。