本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:
- 我的帖子已经打上 开源推广 标签: 是
- 我的开源项目完整开源,无未开源部分: 是
- 我的开源项目已链接认可 LINUX DO 社区: 是
- 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是
- 以上选择我承诺是永久有效的,接受社区和佬友监督: 是
以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出
总的来说
先给完全不了解的小伙伴介绍一下 RTK,它专门优化常用命令如 ls, find, git,让它们的输出更紧凑与高效(删除重复,聚合相似,删除冗余,过滤噪音)从而达到减少输入token的目的,由于上下更短,模型也会更“专注”,从而达到模型性能的进步。
在我日常 coding 的过程中,从 codex 的对话记录可以看到大量的低效输出(做大模型推理/训练有很多进度条,它们甚至占据长上下超过30%),我也非常希望有一个更通用的压缩器把这些专门为人类交互设计但是信息密度极低的信息给删除,恰巧看到有人发了个相关论文TACO,它通过自学习的压缩策略在多个测试集上完成了更低的 token 开销/更高的分数,所以我基于它的思想使用TerminalTraj(通用)和我历史的聊天记录(大模型)作为数据集做了离线的 token 压缩器 Command Compressor for Agent,希望各位佬友能点个 star 鼓励一下(现在仍处于实验阶段,希望各位佬友能多反馈一下)。
细节
训练总是简单的,难得是如何评估 CCA 的有效性,一开始想用 DeepSWE这个比较新潮的排行榜,有区分度,但是后面发现题目太难了,DeepSeek 大部分题目做不出来也就无从测试了,转用 Terminal 2.0,也比较有区分度(deepseek v4 flash 56.9/deepseek-v4-pro 67.9),不会像 SWE-verified 全部都是满分,能力升降可能不会对分数产生影响,同时也不太难以至于都做不出来。
claude code 和 codex 中只有 claude code 的 hook 支持劫持命令输出并替换,所以当前版本只支持 claude code 并且基于 claude code 做实验,模型则使用 deepseek-v4-pro,具体的实验报告参见1,总的来说就是有积极信号但是模型的不稳定性导致实验结果在当前测试样本下没有统计学意义,对大部分负面案例完全无法复测,因为可能第一遍压缩后开销更高第二遍就更低了,模型的决策轨迹对开销有着决定性影响,考虑到目前测试平均开销更高了,所以压缩整体而言是相对保守的,原始压缩率高达 60+%,经过人工调整现在在 10% 附近,更高的压缩率需要后续更广泛的数据集与实验。
case
目前对大模型领域的开发当前压缩机制应该问题不大,并且有着比较好的压缩率,提供一个压缩案例:
压缩后:
[command-compressor]
status: compressed static output
command: CONDA_NO_PLUGINS=true conda run -n eagle-cu130 python /tmp/eagle_plain_test.py
exit_code: 0
raw_ref: /var/folders/29/t8zzlc5s2jsfhw388hmp6tm80000gn/T/cca-compare-raw-aO2AD9/20260621T123807Z-6a2f04f07fb0.log
fallback: use raw_ref only if a required fact is missing from retained output; do not read it for routine confirmation
[compressed] retained 17 of 133 output lines; omitted 116 low-signal lines.
[progress] omitted 113 progress/status lines before head/tail retention.
[progress samples retained]
first: Loading weights: 0%| | 0/291 [00:00<?, ?it/s]
first: Loading weights: 0%| | 1/291 [00:00<00:00, 12945.38it/s, Materializing param=lm_head.weight]
last: Loading weights: 100%|██████████| 291/291 [00:02<00:00, 124.82it/s, Materializing param=model.norm.weight]
last: Loading weights: 100%|██████████| 291/291 [00:02<00:00, 121.31it/s, Materializing param=model.norm.weight]
[retained output]
`torch_dtype` is deprecated! Use `dtype` instead!
The following generation flags are not valid and may be ignored: ['temperature', 'top_p']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
Setting `pad_token_id` to `eos_token_id`:128001 for open-end generation.
new_len 64
ids_head [8586, 596, 279, 8308, 2082, 1473, 74694, 12958, 198, 755, 3770, 22616, 47146, 25, 1160, 11, 12447, 25, 528, 8]
text_repr 'Here\\'s the completed code:\
```python\
def below_threshold(lst: list, threshold: int) -> bool:\
\"\"\"Return True if all numbers in the list lst are below threshold threshold.\
Args:\
lst (list): A list of numbers.\
threshold (int): The threshold value.\
Returns'
"
原始输出:
`torch_dtype` is deprecated! Use `dtype` instead!
Loading weights: 0%| | 0/291 [00:00<?, ?it/s]
Loading weights: 0%| | 1/291 [00:00<00:00, 12945.38it/s, Materializing param=lm_head.weight]
Loading weights: 0%| | 1/291 [00:00<00:00, 6887.20it/s, Materializing param=lm_head.weight]
Loading weights: 1%| | 2/291 [00:00<00:19, 14.56it/s, Materializing param=lm_head.weight]
Loading weights: 1%| | 2/291 [00:00<00:19, 14.56it/s, Materializing param=model.embed_tokens.weight]
Loading weights: 1%| | 2/291 [00:00<00:19, 14.56it/s, Materializing param=model.embed_tokens.weight]
Loading weights: 1%| | 3/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.input_layernorm.weight]
Loading weights: 1%| | 3/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.input_layernorm.weight]
Loading weights: 1%|▏ | 4/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.mlp.down_proj.weight]
Loading weights: 1%|▏ | 4/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.mlp.down_proj.weight]
Loading weights: 2%|▏ | 5/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.mlp.gate_proj.weight]
Loading weights: 2%|▏ | 5/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.mlp.gate_proj.weight]
Loading weights: 2%|▏ | 6/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.mlp.up_proj.weight]
Loading weights: 2%|▏ | 6/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.mlp.up_proj.weight]
Loading weights: 2%|▏ | 7/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.post_attention_layernorm.weight]
Loading weights: 2%|▏ | 7/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.post_attention_layernorm.weight]
Loading weights: 3%|▎ | 8/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.self_attn.k_proj.weight]
Loading weights: 3%|▎ | 8/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.self_attn.k_proj.weight]
Loading weights: 3%|▎ | 9/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.self_attn.o_proj.weight]
Loading weights: 3%|▎ | 9/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.self_attn.o_proj.weight]
Loading weights: 3%|▎ | 10/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.self_attn.q_proj.weight]
Loading weights: 3%|▎ | 10/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.self_attn.q_proj.weight]
Loading weights: 4%|▍ | 11/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.self_attn.v_proj.weight]
Loading weights: 4%|▍ | 11/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.0.self_attn.v_proj.weight]
Loading weights: 4%|▍ | 12/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.1.input_layernorm.weight]
Loading weights: 4%|▍ | 12/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.1.input_layernorm.weight]
Loading weights: 4%|▍ | 13/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.1.mlp.down_proj.weight]
Loading weights: 4%|▍ | 13/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.1.mlp.down_proj.weight]
Loading weights: 5%|▍ | 14/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.1.mlp.gate_proj.weight]
Loading weights: 5%|▍ | 14/291 [00:00<00:19, 14.56it/s, Materializing param=model.layers.1.mlp.gate_proj.weight]
Loading weights: 5%|▌ | 15/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.1.mlp.gate_proj.weight]
Loading weights: 5%|▌ | 15/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.1.mlp.up_proj.weight]
Loading weights: 5%|▌ | 15/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.1.mlp.up_proj.weight]
Loading weights: 5%|▌ | 16/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.1.post_attention_layernorm.weight]
Loading weights: 5%|▌ | 16/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.1.post_attention_layernorm.weight]
Loading weights: 6%|▌ | 17/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.1.self_attn.k_proj.weight]
Loading weights: 6%|▌ | 17/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.1.self_attn.k_proj.weight]
Loading weights: 6%|▌ | 18/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.1.self_attn.o_proj.weight]
Loading weights: 6%|▌ | 18/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.1.self_attn.o_proj.weight]
Loading weights: 7%|▋ | 19/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.1.self_attn.q_proj.weight]
Loading weights: 7%|▋ | 19/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.1.self_attn.q_proj.weight]
Loading weights: 7%|▋ | 20/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.1.self_attn.v_proj.weight]
Loading weights: 7%|▋ | 20/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.1.self_attn.v_proj.weight]
Loading weights: 7%|▋ | 21/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.input_layernorm.weight]
Loading weights: 7%|▋ | 21/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.input_layernorm.weight]
Loading weights: 8%|▊ | 22/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.mlp.down_proj.weight]
Loading weights: 8%|▊ | 22/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.mlp.down_proj.weight]
Loading weights: 8%|▊ | 23/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.mlp.gate_proj.weight]
Loading weights: 8%|▊ | 23/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.mlp.gate_proj.weight]
Loading weights: 8%|▊ | 24/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.mlp.up_proj.weight]
Loading weights: 8%|▊ | 24/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.mlp.up_proj.weight]
Loading weights: 9%|▊ | 25/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.post_attention_layernorm.weight]
Loading weights: 9%|▊ | 25/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.post_attention_layernorm.weight]
Loading weights: 9%|▉ | 26/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.self_attn.k_proj.weight]
Loading weights: 9%|▉ | 26/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.self_attn.k_proj.weight]
Loading weights: 9%|▉ | 27/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.self_attn.o_proj.weight]
Loading weights: 9%|▉ | 27/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.self_attn.o_proj.weight]
Loading weights: 10%|▉ | 28/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.self_attn.q_proj.weight]
Loading weights: 10%|▉ | 28/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.self_attn.q_proj.weight]
Loading weights: 10%|▉ | 29/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.self_attn.v_proj.weight]
Loading weights: 10%|▉ | 29/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.2.self_attn.v_proj.weight]
Loading weights: 10%|█ | 30/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.3.input_layernorm.weight]
Loading weights: 10%|█ | 30/291 [00:00<00:03, 69.08it/s, Materializing param=model.layers.3.input_layernorm.weight]
Loading weights: 11%|█ | 31/291 [00:00<00:03, 69.08it/s, M…17141 tokens truncated…ing param=model.layers.29.post_attention_layernorm.weight]
Loading weights: 92%|█████████▏| 268/291 [00:02<00:00, 126.58it/s, Materializing param=model.layers.29.post_attention_layernorm.weight]
Loading weights: 92%|█████████▏| 269/291 [00:02<00:00, 126.58it/s, Materializing param=model.layers.29.self_attn.k_proj.weight]
Loading weights: 92%|█████████▏| 269/291 [00:02<00:00, 126.58it/s, Materializing param=model.layers.29.self_attn.k_proj.weight]
Loading weights: 93%|█████████▎| 270/291 [00:02<00:00, 126.58it/s, Materializing param=model.layers.29.self_attn.o_proj.weight]
Loading weights: 93%|█████████▎| 270/291 [00:02<00:00, 126.58it/s, Materializing param=model.layers.29.self_attn.o_proj.weight]
Loading weights: 93%|█████████▎| 271/291 [00:02<00:00, 126.58it/s, Materializing param=model.layers.29.self_attn.q_proj.weight]
Loading weights: 93%|█████████▎| 271/291 [00:02<00:00, 126.58it/s, Materializing param=model.layers.29.self_attn.q_proj.weight]
Loading weights: 93%|█████████▎| 272/291 [00:02<00:00, 126.58it/s, Materializing param=model.layers.29.self_attn.v_proj.weight]
Loading weights: 93%|█████████▎| 272/291 [00:02<00:00, 126.58it/s, Materializing param=model.layers.29.self_attn.v_proj.weight]
Loading weights: 94%|█████████▍| 273/291 [00:02<00:00, 126.58it/s, Materializing param=model.layers.30.input_layernorm.weight]
Loading weights: 94%|█████████▍| 273/291 [00:02<00:00, 126.58it/s, Materializing param=model.layers.30.input_layernorm.weight]
Loading weights: 94%|█████████▍| 274/291 [00:02<00:00, 126.58it/s, Materializing param=model.layers.30.mlp.down_proj.weight]
Loading weights: 94%|█████████▍| 274/291 [00:02<00:00, 126.58it/s, Materializing param=model.layers.30.mlp.down_proj.weight]
Loading weights: 95%|█████████▍| 275/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.mlp.down_proj.weight]
Loading weights: 95%|█████████▍| 275/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.mlp.gate_proj.weight]
Loading weights: 95%|█████████▍| 275/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.mlp.gate_proj.weight]
Loading weights: 95%|█████████▍| 276/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.mlp.up_proj.weight]
Loading weights: 95%|█████████▍| 276/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.mlp.up_proj.weight]
Loading weights: 95%|█████████▌| 277/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.post_attention_layernorm.weight]
Loading weights: 95%|█████████▌| 277/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.post_attention_layernorm.weight]
Loading weights: 96%|█████████▌| 278/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.self_attn.k_proj.weight]
Loading weights: 96%|█████████▌| 278/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.self_attn.k_proj.weight]
Loading weights: 96%|█████████▌| 279/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.self_attn.o_proj.weight]
Loading weights: 96%|█████████▌| 279/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.self_attn.o_proj.weight]
Loading weights: 96%|█████████▌| 280/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.self_attn.q_proj.weight]
Loading weights: 96%|█████████▌| 280/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.self_attn.q_proj.weight]
Loading weights: 97%|█████████▋| 281/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.self_attn.v_proj.weight]
Loading weights: 97%|█████████▋| 281/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.30.self_attn.v_proj.weight]
Loading weights: 97%|█████████▋| 282/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.input_layernorm.weight]
Loading weights: 97%|█████████▋| 282/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.input_layernorm.weight]
Loading weights: 97%|█████████▋| 283/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.mlp.down_proj.weight]
Loading weights: 97%|█████████▋| 283/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.mlp.down_proj.weight]
Loading weights: 98%|█████████▊| 284/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.mlp.gate_proj.weight]
Loading weights: 98%|█████████▊| 284/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.mlp.gate_proj.weight]
Loading weights: 98%|█████████▊| 285/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.mlp.up_proj.weight]
Loading weights: 98%|█████████▊| 285/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.mlp.up_proj.weight]
Loading weights: 98%|█████████▊| 286/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.post_attention_layernorm.weight]
Loading weights: 98%|█████████▊| 286/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.post_attention_layernorm.weight]
Loading weights: 99%|█████████▊| 287/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.self_attn.k_proj.weight]
Loading weights: 99%|█████████▊| 287/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.self_attn.k_proj.weight]
Loading weights: 99%|█████████▉| 288/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.self_attn.o_proj.weight]
Loading weights: 99%|█████████▉| 288/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.self_attn.o_proj.weight]
Loading weights: 99%|█████████▉| 289/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.self_attn.q_proj.weight]
Loading weights: 99%|█████████▉| 289/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.self_attn.q_proj.weight]
Loading weights: 100%|█████████▉| 290/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.self_attn.v_proj.weight]
Loading weights: 100%|█████████▉| 290/291 [00:02<00:00, 124.82it/s, Materializing param=model.layers.31.self_attn.v_proj.weight]
Loading weights: 100%|██████████| 291/291 [00:02<00:00, 124.82it/s, Materializing param=model.norm.weight]
Loading weights: 100%|██████████| 291/291 [00:02<00:00, 124.82it/s, Materializing param=model.norm.weight]
Loading weights: 100%|██████████| 291/291 [00:02<00:00, 121.31it/s, Materializing param=model.norm.weight]
The following generation flags are not valid and may be ignored: ['temperature', 'top_p']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
Setting `pad_token_id` to `eos_token_id`:128001 for open-end generation.
new_len 64
ids_head [8586, 596, 279, 8308, 2082, 1473, 74694, 12958, 198, 755, 3770, 22616, 47146, 25, 1160, 11, 12447, 25, 528, 8]
text_repr 'Here\\'s the completed code:\
\
```python\
def below_threshold(lst: list, threshold: int) -> bool:\
\"\"\"Return True if all numbers in the list lst are below threshold threshold.\
\
Args:\
lst (list): A list of numbers.\
threshold (int): The threshold value.\
\
Returns'
"