上下文修改

Hawa Code 支持上下文自动修改。当上下文窗口占用率相对较高时,会自动修改上下文内容,把占用体积较大的内容替换为占位符,同时在需要的时候可以还原为原始内容。

如何使用

斜杠命令 Config 可以配置上下文修改功能

  • Message Archiving:开启或禁用上下文修改功能
  • Archive Tool Use Inputs:开启或禁用 Tool Use 参数修改功能
  • Archive Thinking:开启或禁用 Thinking 修改功能

核心作用

Hawa Code 上下文修改可以在有限的上下文体积下,执行更长时间、更复杂的任务;同时因为大体积上下文内容被替换为占位符,可以更大程度地节省 Token。

模型主动操作

Hawa Code 上下文修改,主要支持两个操作:

  • 归档:把指定的上下文内容替换为占位符。Thinking 内容是无法被归档的,一旦被归档就会被删除。
  • 回档:把已归档为占位符的内容还原为原始内容。

Hawa Code 秉承的理念是模型会越来越“聪明”,因此归档操作直接让模型在主循环中执行,而不是交给后台的另一个模型去操作。这样可以更好地保证任务连续性,模型不会觉得丢失了内容,并且对归档了什么内容非常清楚,从而提高归档的准确性,不影响当前任务的执行。

当前 Hawa Code 依然保留了上下文压缩机制:当上下文体积超出阈值时会自动压缩,这个动作是被动执行的。上下文压缩更多是作为保护机制,长时任务可以更多地依赖上下文修改机制。

归档内容

Hawa Code 可以归档的内容包括:

  • tool use input:处理工具调用的入参,主要处理 Write 这类入参可能是长文本的工具。
  • tool result:处理工具调用的结果,主要处理 Read 这类结果可能是大体积内容的工具。
  • thinking:处理过期的 thinking 内容。

Hawa Code 可以对任何工具进行归档和回档操作,包含 MCP 工具。

成本优化

对上下文进行修改会导致 Prompt Cache 前缀失效,如果高频执行小内容的归档,收益就会变小,Hawa Code 进行如下优化:

  • 批量进行归档,而不是对同一批内容分多次归档,理想状态下一次归档后上下文体积占用率会下降 10 ~ 20 个百分点。
  • Hawa Code 对归档操作进行了智能抑制,减少连续进行归档操作。
  • 随着上下文体积上涨,Hawa Code 会逐渐增加上下文归档的意识。

示例

以下是一个归档示例,包含了 Tool Use、Tool Result、thinking 内容。归档时会同时生成一段摘要内容,这些摘要内容是回档的主要依据。

以下是被归档的内容占位符结构:

…Archived

{
"type": "tool_use",
"id": "tool_nFCKC3SbOZhakWyRa7iibHso",
"name": "ProxyToolCall",
"input": {
"arguments": {
"file_path": "D:\\Javaworks\\ucode-pages\\HAWA.md",
"new_string": "<system>Archived input field \"arguments.new_string\" [tool_use_id: tool_nFCKC3SbOZhakWyRa7iibHso]. Unarchive via MessageArchiving.</system>",
"old_string": "### 3. Verify the Release\n\nAfter publishing, visit the live site and check that the modified pages (e.g. `/docs/ppt.html`) have been updated."
},
"toolName": "Edit"
}
}
]

"content": [{
"type": "tool_result",
"content": [{
"type": "text",
"text": "<system>Archived result [tool_use_id: tool_8lFq7V0dXwRpgqTCVBGXbcBQ]. Unarchive via MessageArchiving.<system>"
}
],
"tool_use_id": "tool_8lFq7V0dXwRpgqTCVBGXbcBQ"
}, {
"type": "text",
"text": "<system-thinking>Archived thinking [thinking_id: THK_62a5ed07-9fe1-4859-bb86-211f3fed9e21]. Unarchive via MessageArchiving.</system-thinking>"
}
]