news 2026/9/13 23:08:15

Kilo Context Condensing 完整指南:自动压缩、上下文剪枝与配置调优

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kilo Context Condensing 完整指南:自动压缩、上下文剪枝与配置调优

Kilo Context Condensing 完整指南:自动压缩、上下文剪枝与配置调优

【免费下载链接】kilocodeKilo is the all-in-one agentic engineering platform. Build, ship, and iterate faster with the most popular open source coding agent.项目地址: https://gitcode.com/GitHub_Trending/ki/kilocode

导读

Context Condensing(上下文压缩)是 Kilo 应对模型上下文窗口上限的核心机制:当对话因代码片段、文件内容与来回讨论而迅速膨胀时,它会智能地总结历史会话,在保留继续工作所需关键信息的同时显著降低 token 消耗。本文以官方文档为主线,结合仓库源码(packages/core/src/session/compaction.tspackages/opencode/src/session/compaction.ts等)深入讲解压缩的触发条件、默认值、kilo.jsonc配置方式与最佳实践。读完你将掌握如何让长会话不因上下文耗尽而中断,并能按需调优压缩时机、保留尾部的 token 预算与预留缓冲。

问题背景:上下文窗口限制

每个 AI 模型都有一个最大上下文窗口(context window),即一次能处理的文本总量上限。随着对话中不断加入代码片段、文件内容与多轮往返讨论,你会逐渐逼近这个上限,并可能遇到以下现象:

  • 模型需要处理的 token 增多,响应速度变慢;
  • 因 token 用量上升,API 成本随之增加;
  • 最终触及上下文上限,会话无法继续。

Kilo 的 Compaction(压缩)系统正是为此设计:它自动接管上下文管理,让长会话可持续进行。

解决方案:Auto-Compaction 锚定摘要

当对话接近 token 上限时,压缩机制会启动,产出一份锚定摘要(anchored summary),覆盖以下关键信息:

  • 会话的整体目标(overall goal);
  • 过程中你给出的约束与偏好(constraints and preferences);
  • 进度、关键决策与下一步计划(progress, key decisions, and next steps);
  • 继续工作所必需的关键上下文(critical context);
  • 相关文件与目录(relevant files and directories)。

这份摘要会替换更早的对话历史,而 Kilo 在空间允许时会原样保留最近几轮对话。若会话已经被压缩过,Kilo 会在原有摘要基础上进行更新而非推倒重来:保留仍然相关的细节,剔除已过时的信息。

源码层面,摘要的生成遵循一份固定结构模板。在 compaction.ts 中,SUMMARY_TEMPLATE要求模型严格输出## Objective## Important Details## Work State(Completed / Active / Blocked)、## Next Move## Relevant Files五个章节,并规定"保留精确的文件路径、符号、命令、错误字符串、URL 与标识符";而 buildPrompt 则根据是否存在前次摘要,决定提示词是"从对话历史创建新锚定摘要"还是"更新已有摘要、合并新事实并移除过期细节"。

压缩的触发机制

自动触发

Kilo 会在每次响应后检查 provider 上报的用量,并在联系 provider 之前估算即将发送的文本、系统指令与工具定义。当以下两个条件之一先被满足时即触发压缩:

  1. 用量达到compaction.threshold_percent指定的百分比;
  2. 剩余窗口触及预留安全缓冲(reserved safety buffer)

缓冲的取值取决于模型如何声明其限制:

  • 当模型**单独声明了输入上限(input limit)**时,缓冲默认为 20,000 token(或模型最大输出大小,取较小者);
  • 当模型只声明单一上下文窗口时,Kilo 改为预留模型的完整输出上限——最高可达 32,000 token。

compaction.threshold_percent为可选配置,取值1100,表示在模型输入或上下文窗口用量的该百分比处触发压缩。

未声明上下文窗口的自定义模型不会被跟踪,自动压缩对它们不生效(详见自定义模型)。

在核心会话执行器中,这一判断被实现为compactIfNeeded:源码 compaction.ts 先汇总systemmessagestools三部分的估算 token,并与context - max(output, buffer)比较,超出才调用compactAfterOverflow执行真正的摘要生成;若压缩失败(如 provider 报错或产出为空),会安全地返回false,不破坏会话。runner/llm.ts 在每轮开始前调用该判断,压缩完成后会基于压缩后的历史重建请求继续执行。

此外,threshold_percent在 CLI 侧对应更精细的**预检(preflight)**机制:overflow.ts 会按floor(context * percent / 100)计算硬上限,并额外用 1.3 倍的估算系数校正 token 计数偏差(FACTOR),同时对媒体附件与加密的推理状态做专门折算,尽量避免估算不足导致的中途溢出。

上下文剪枝(Context Pruning)

在轮次之间,Kilo 还会执行一次更轻量的prune(剪枝)过程:遍历40,000-token 最近窗口之外的、已完成的工具输出,将其替换为占位文本"[Old tool result content cleared]"。剪枝是增量执行的,因此大型工具输出不会永久占用空间,即使还没到需要完整压缩的程度。

该占位符在 message-v2.ts 中定义。剪枝与完整压缩相互配合:剪枝处理"大而旧"的工具结果,压缩处理"整体超限"的会话历史。

手动压缩

你可以在任意时刻主动触发压缩:

VSCode 扩展:

  • 斜杠命令:在聊天框输入/compact(也可输入smolcondense检索到);
  • 任务头部按钮:点击当前任务标题栏中的压缩图标;
  • 设置:在Settings → Context中切换自动压缩开关。

CLI / TUI:

  • 斜杠命令:在 TUI 中输入/compact(别名/summarize);
  • 快捷键:按<leader>c触发压缩。

默认值与配置

压缩行为默认开启,全部配置项及其默认值如下:

设置默认值作用
compaction.autotrue到达可用窗口时自动压缩
compaction.threshold_percent未设置token 用量达到模型窗口该百分比时压缩
compaction.prunetrue清理 40K 最近窗口之外的工具输出
compaction.tail_turns2尽可能原样保留最近的用户轮次及其响应
compaction.preserve_recent_tokens可用上下文的 25%,夹在 2,000 与 8,000 token 之间原样保留的最近尾部 token 预算
compaction.reservedmin(20,000, model_max_output_tokens)为下一轮预留的 token 余量;若先于阈值触及则作为安全触发条件

压缩配置写在你的kilo.jsonc文件中:

{ "compaction": { "auto": true, // 启用或禁用自动压缩 "threshold_percent": 80, // 可选:在模型窗口的 80% 处触发 "prune": true, // 启用对最近窗口之外旧工具输出的剪枝 "tail_turns": 2, // 压缩期间原样保留的最近用户轮次数 "preserve_recent_tokens": 8000, // 最近尾部保留的最大 token 预算 "reserved": 20000, // 预留 token 缓冲;越小越晚触发,越大越早触发 }, }

各选项的类型、默认值与详细说明:

选项类型默认值说明
compaction.autobooleantrue到达可用窗口时启用或禁用自动压缩
compaction.threshold_percentnumber未设置可选百分比,取值 1~100。当 token 用量达到模型输入或上下文窗口的该比例时执行自动压缩,除非预留安全缓冲先行触发
compaction.prunebooleantrue启用对 40K token 最近窗口之外旧工具输出的剪枝
compaction.tail_turnsnumber2压缩期间原样保留的最近用户轮次数,包括其后的 assistant 与工具响应
compaction.preserve_recent_tokensnumber可用上下文的 25%,夹在 2,000 与 8,000 token 之间压缩后原样保留的最近轮次最大 token 预算
compaction.reservednumbermin(20000, model_max_output)为下一轮预留的 token 余量。仅对单独声明输入上限的模型生效;单一上下文窗口模型改用完整输出上限作为预留

上述字段在配置 schema 中均有对应定义:v1/config/config.ts 定义了autothreshold_percentprunetail_turnspreserve_recent_tokensreserved六个字段及其描述;v2 的 config/compaction.ts 则以autoprunekeep.tokensbuffer的形式承载等效语义。也就是说,preserve_recent_tokenstail_turns在运行时会换算为"尾部保留的 token 预算"(对应 v2 的keep.tokens),reserved对应 v2 的buffer

从实现细节看,compaction.ts 的settings函数会按文档顺序合并多个配置来源,最终默认auto: truebuffer: 20_000tokens: 8_000(与文档表格完全一致);CLI 侧的preserveRecentBudget(opencode 的 compaction.ts)则实现了"可用上下文的 25%,夹在 2,000~8,000 之间"的默认计算逻辑。

为压缩使用不同的模型

摘要生成可以使用比主 agent 更便宜或上下文更大的模型。为压缩配置一个专用 agent:

{ "agent": { "compaction": { "model": "anthropic/claude-haiku-4-5", }, }, }

若未配置压缩 agent,则使用当前会话的模型。相应地,压缩摘要的输出 token 上限被限制为SUMMARY_OUTPUT_TOKENS = 4_096(见 compaction.ts),避免摘要本身占用过多窗口。

环境变量覆盖

变量作用
KILO_DISABLE_AUTOCOMPACT=1强制compaction.auto = false
KILO_DISABLE_PRUNE=1强制compaction.prune = false
KILO_EXPERIMENTAL_OUTPUT_TOKEN_MAX覆盖默认 32,000 的输出 token 上限

这些变量在 flag.ts 与 flag.ts 中定义:前两者按"值为true1"判定(truthy),后者要求正整数才生效(number),非法值会被忽略。

最佳实践

何时手动压缩

  • 长会话:在复杂任务上持续工作了较长时间后;
  • 重大切换之前:即将转向项目另一个方面时;
  • 接近上限时:若希望自己掌控摘要产出的时机,可在自动触发前手动运行/compact

调优压缩触发时机

  • 希望在模型窗口的可预期比例处触发压缩时,使用compaction.threshold_percent,例如长任务设置80以更早生成摘要;
  • 预留安全缓冲仍然生效,可能比百分比阈值更早触发压缩。

对单独声明输入上限的模型,reserved是一个权衡:

  • 较小值(如10000)→ 压缩触发更晚,原始窗口内能进行更多轮对话,但若单次响应大于缓冲,有中途上下文溢出的风险;
  • 较大值(如40000)→ 压缩触发更早,溢出错误更少,但两次摘要之间的有效会话更短。

默认值~20K是为容纳"完整大小的 assistant 响应加上工具输出"而调优的。该设置对单一上下文窗口的模型无效——这类模型始终预留完整输出上限。

维持上下文质量

  • 在初始任务中描述具体:清晰的任务描述有助于生成更好的摘要;
  • 使用 AGENTS.md:结合 AGENTS.md 提供无需压缩的持久化项目上下文;
  • 检查摘要:压缩完成后,摘要会显示在你的聊天历史中,可据此确认关键信息是否保留。

相关功能

  • AGENTS.md —— 跨会话的持久化上下文存储;
  • Codebase Indexing —— 高效的代码搜索与检索。

【免费下载链接】kilocodeKilo is the all-in-one agentic engineering platform. Build, ship, and iterate faster with the most popular open source coding agent.项目地址: https://gitcode.com/GitHub_Trending/ki/kilocode

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 23:05:52

【2026年】定风量阀与变风量阀价差多少?采购决策分析

做通风系统预算时&#xff0c;"定风量阀还是变风量阀"是最先要拍板的选型&#xff0c;而价差往往是决策关键。定风量阀便宜、结构简单&#xff0c;变风量阀贵、但能按需调节省钱。这篇把两者的价差逻辑、省账算清&#xff0c;帮你在安全与成本之间做出理性选择。一、…

作者头像 李华
网站建设 2026/9/13 22:51:20

【HarmonyOS 7新能力|007】空间音频入门实战:从能力边界到最小可运行链路

【HarmonyOS 7新能力&#xff5c;007】空间音频入门实战&#xff1a;从能力边界到最小可运行链路 空间音频并不是给左右声道各调一次音量。应用要先描述听者和声源的相对位置&#xff0c;再把位置、方向、播放状态与页面生命周期持续同步给渲染能力。只要坐标轴约定不一致、节点…

作者头像 李华
网站建设 2026/9/13 22:49:05

PLC 快照(Snapshot)机制详解

PLC 快照(Snapshot)机制详解 一、快照的核心设计思想 PLCController 通过周期性轮询将 PLC 的离散信号采集为一份一致性快照,业务流程(如等待条件、联锁判断)只读取快照,而不是直接读 PLC。 这样做的好处: 状态一致性:一次工艺判断中的所有信号来自同一时刻,避免读…

作者头像 李华