Jan Agent 长会话如何监控上下文占用并手动触发 /compact 压缩?
【免费下载链接】janJan is an open source alternative to ChatGPT that runs 100% offline on your computer.项目地址: https://gitcode.com/GitHub_Trending/ja/jan
在 Jan Agent 终端控制台里跑长会话时,模型上下文窗口迟早会被填满,旧轮次需要被总结压缩来腾出空间。本文介绍如何在看板(header)、轮次回执和/context覆盖层里持续观察上下文占用,在开始大型子任务前手动执行/compact释放空间,以及理解自动压缩的触发条件。适用前提是已按 QuickStart 完成安装并配置好一个 provider,在项目目录下用jan进入交互式控制台。
在控制台里跟踪上下文占用
jan(无子命令)打开控制台后,顶部 header 会显示实时的上下文用量:
jan agent tokamak-1-preview 10:40:49 turn 1/400 ctx 6K/128K 30.1/s [ready](以上为文档示例输出。)其中ctx 6K/128K表示当前占用的上下文与窗口大小的比例,它在每个请求落定时更新,而不是只在轮次结束时才变。
每个轮次结束时会有一条回执:
2026-07-29 11:32:02 ↑ 43K ↓ 1.1K ⏱ 1.8s ⚡ 109.8/s↑是发送给模型的上下文大小,↓是本次产生的 token 数,之后是耗时和吞吐。两个数字刻意不同:上下文是请求的大小,输出是模型实际返回的内容。
用 /context 覆盖层查看占用构成
在输入框中键入:
/context会在正在进行的转录画面上方打开一个居中的覆盖层(当前轮次在背后继续运行)。覆盖层里包含:
- 一条表示占用百分比的轨(rail),视觉条上
^标记当前用量位置,╳标记自动压缩预留区(auto-compact reserve zone); - token 刻度和一行余量提示(
N tokens available before auto-compact); - 按类别的占用明细:System prompt、System tools、Project context、Skills、Messages。
按Esc、q或Ctrl+C关闭,关闭不会取消正在运行的轮次。
两点判断依据需要注意:
- 主占用数优先使用 provider 返回的
prompt_tokens。在压缩、rewind 或 resume 之后 provider 计数会重置,此时数字回退为估算值(标注estimated),并在下一次请求后回到真实值。 - 报告是键入
/context时刻的快照,打开后数字保持不变,需要重新打开才会刷新。
手动触发 /compact 压缩
/compact该命令把较旧的轮次总结起来以释放上下文,适合在长会话中开始一个新的大型子任务之前执行,避免新工作一开始就和既有历史争夺空间。
文档同时给出的判断边界:如果会话已经偏到了无用的方向,/new往往比/compact更好——压缩保留了会话线索,包括把对话带偏的那部分。
自动压缩的触发条件
接近窗口时,Jan Agent 会自动总结旧轮次腾出空间。相关配置位于项目的agent.toml(即.jan/agent/agent.toml,详见 Project Config):
[agent] context_window = 128000 # defaults to 128K compaction_reserve_tokens = 16384 # defaults to 16Kcontext_window:上下文上限(token 数),默认128000;compaction_reserve_tokens:为压缩操作保留的余量,默认16384。
占用接近context_window - compaction_reserve_tokens时触发自动压缩。触发后会话历史被替换为压缩版本,控制台会明确提示(文档示例):
auto-compacted 84 -> 31 messages (ctx 96K/128K)看到这条消息即可确认压缩已经发生:消息数从 84 降到 31,占用回落到96K/128K。
上下文溢出时的行为
即便手动或自动压缩都来不及,如果一个请求仍然溢出窗口,agent 循环会压缩后重试,而不是直接报错;每次重试保留更短的近期消息尾部。如果某一次压缩完全没有缩小会话,它选择放弃而不是无限循环。
与 /compact 相关的其他命令
/context、/compact之外,/输入时会模糊过滤命令列表,Enter执行高亮项;/new开新会话、/clear清空对话,两者都会同时丢弃当前 goal;/threads列出本项目的已保存会话,/resume交互式选择恢复(会话按项目保存在.jan/agent/threads下,详见 Sessions)。
如果只想限制单次响应的生成长度而不是上下文窗口,用[agent]下的max_tokens(例如max_tokens = 4096),它约束的是模型单次响应生成的 token 数,未设置时会从请求中省略,交由模型自身默认值决定。
参考
- Context and Compaction:占用显示、自动压缩、溢出行为与
max_tokens的原始文档; - Slash Commands:
/compact、/context、/new等命令的完整列表; - Project Config:
agent.toml中context_window、compaction_reserve_tokens的默认值说明。
【免费下载链接】janJan is an open source alternative to ChatGPT that runs 100% offline on your computer.项目地址: https://gitcode.com/GitHub_Trending/ja/jan
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考