qqqide 滴上下文背包操作

文档发表:2026-06-28 · 阅读:119 · 更新:2026-08-17

起源

AI 对话越长,上下文越臃肿。50 层楼之后,每次 API 调用光上下文就要 150K+ tokens——其中 70% 是过期的终端输出、重复的文件内容、再也用不到的搜索摘要。

早期方案尝试让 AI 自己压缩上下文(V3-V10),结果:AI 语义压缩质量不稳定、JSON 输出格式经常出错、thinking 过程吃掉大量预算、压缩结果污染前缀缓存。结论:大键入 + AI 语义压缩 = 死路。

V11 转向纯本地机械筛——每层楼完结时自动把对话摘要成 Q/A/工具行,零网络零费用。V12 修复了 splice 导致的前缀缓存断裂。V13 引入双包装盒体系(温柔盒 + 绝对盒)和阀值压缩。V14 修复了 biscuit 重排序带来的缓存全断 bug。V15 引入三按钮压缩体系 + fx 记忆区域。V16 强制 biscuit 唯一性(去重→先合并孤儿内容再删除),修复 Z 消息阻断 _findDynamicMsg 搜索的 bug。

背包结构(小白视角)

每次你按回车发送消息 = 一层"楼floor"。一楼可能包含多次 AI 调用(房子house)和多次工具调用(房间room)。

楼层完结后,qqqide 自动把你的对话机械压缩成"压缩饼干":

=== F1 2026-07-18 13:26:08 UTC+8 ===
Q: 你查查数据库里那个用户激活没有?
[A → run_command] ssh q@47 psql ... 2318c
[A → read_file] /server-app/foo.js L:1-50/200
A: 已激活,用户 8615802858204 在 2026-07-17 完成激活。
  • Q: = 你说的原话
  • [A → xxx] = AI 调用了什么工具,结果摘要
  • ╔K...╚ = "绝对包装盒"——无法从磁盘复现的工具输出(如终端命令结果),用盒子包起来
  • A: = AI 的最终回复

这里滴"原话"不含子弹按钮:子弹注入的是你的消息附件,压缩时剥掉原文、不进饼干。

饼干逐层追加,永不重写旧内容。这意味着前 20 层楼的饼干在 API 缓存中一字不变 → 前缀缓存命中率 ~90%

背包管理窗口(点「上下文」→「管理」进入)

背包格子排序:Z → fx → 压缩饼干 → 当前楼层。

格子列表

英文(UI 显示)分组含义
Server Guard注入服务端甲壳提示词(同图解)
Tools Definition (N tools)注入工具定义 JSON(N = 工具数)
msg[0] · Client Rules客户端规则Z 消息全文
压缩 · 事实 (fx)压缩上下文fx 消息本体(only facts 提取的事实清单,永远 1 条、增量追加)
压缩饼干 (biscuit)压缩上下文饼干消息本体
User #N用户消息用户消息(N = 序号)
AI text #NAI 回复AI 纯文本回复
AI tool_calls #NAI 回复AI 工具调用轮(文本 + tool_calls 合并展示)
AI Error #N错误错误回复
Tool Result #N工具结果工具执行结果
压缩 · 事实 × N压缩上下文fx 摘要格(N = 事实条数,每条一行)
压缩饼干 × N floors压缩上下文饼干摘要格(N 楼层 + 总字符数)
System #N (动态)压缩上下文 / 系统消息防御性分支,当前通常为空(biscuit / fx 均有独立标签,不再落入此格)

顶栏统计

统计含义
格子当前格子总数
字符全部格子字符数总和
估算字符 ÷ 2.5 的 token 估算
API最近一次 API 调用的精确 prompt_tokens(无调用时显示 --)

三按钮速查(按钮上数字 = 点它可回收的 token 收益)

按钮动作数字含义
absolut剥离全部绝对包装盒体部(╔K…╚),保留头行剥离后能省多少 tokens(本地立即执行)
edit onlyabsolut + 只保留 5 种写工具头行同上
only facts压缩 + 调 AI 提取事实注入 fx同上(收益 < 32K tokens 拒绝执行;点击后 aq 显示压缩前重量,动画仅播一次)

压缩动画(点击压缩按钮后上下两根进度条)

上面那根 = 压缩前整个上下文背包,下面那根 = 压缩后整个背包

“整个背包” = 服务端甲壳 + 工具定义 + 客户端规则 + fx 事实 + 压缩饼干 + 当前楼层——与右下角压缩按钮上滴数字、背包图解滴 Local sum 同口径。你滴任何地方看到滴“背包大小”都是同一个值,不存在两套数字。

格子角色颜色(便于快速辨认)

颜色角色
user(用户消息)
assistant(AI 回复)
tool(工具结果)
system(系统消息)
品红guard(服务端甲壳)
toolsdef(工具定义)

三个压缩按钮怎么用

打开方式:AI 面板右下角点「上下文」→「管理」→ 打开 X 区背包标签页。

背包页面有三个按钮,按性价比从高到低排列:

1. absolut — 剔除绝对包装盒

做什么:把 ╔K...╚ 盒子里的内容删掉(通常是终端输出),但保留盒子头行(命令本身)和一切温柔包装盒。

如果没有:饼干里塞满过期 SQL 输出、build log、40KB 的 JSON 响应——这些内容 5 层楼之后就没用了,但永远留在饼干里,每次 API 调用都带着。

什么时候用:只要感觉重量上来了,可以放心常用;如果在个人偏好里设置了自动压缩阀值,当能剔除滴 absolut 尺寸超过阀值,也会被自动调用 absolut 剔除。

2. edit only — 仅保留写操作

做什么:在 absolut 基础上,进一步去掉一切读操作(read_file、search_text、find_files…)的头行,只保留真正改了文件的操作(edit_file、write_file、create_file、delete_file、revert_file)。

如果没有:饼干里有几百行 [A → read_file] /foo.js L:60-70/200——这些信息对后续对话几乎没用(AI 可以重新读)。

什么时候用:长对话后期,饼干臃肿但你只关心「改了什么文件」。

3. only facts — AI 提取关键事实

做什么:在前两者基础上,把对话原文砍掉一半(只保留最近的一半),让 AI(tier 4)从老的那一半里提取关键 facts,存为 fx(记忆区域)。之后 AI 既能看到最近的完整对话,又能快速回顾早期的关键事实。

原料真相:喂给 AI 的既不是「大A+大Q 原样集合」,也不是「整个压缩饼干原样」,而是饼干前半段的骨架行——剥离绝对盒体部、删除温柔盒正文行后,只剩 Q:/A:/楼层分隔/写工具头行的精简文本。详见底部「only facts」章节。

如果没有:100+ 层楼的对话,AI 很容易"遗忘"早期做出的关键决策。

什么时候用:长对话(50+ 层楼),或者跨多个相关问题的对话。

进一步掰开看: 三种压缩分别失去什么、保留什么

absolut — 剔除绝对包装盒体部

失去:5 种不可复现工具的完整输出体——终端命令的输出内容、AI 生成的图片描述/风格信息、图片视觉分析的全部结果、抠图结果。

保留

  • 上述 5 种工具的头行(工具名 + 参数 + 结果长度摘要)——AI 仍然知道「调了什么工具、传了什么参数、输出有多长」
  • 全部 15 种温柔包装盒(读/写/搜索/网络等)——毫发无损
  • Q/A/楼层分隔等全部对话结构

有影响的场景

  • 你在上一个楼层看到一份巨大 JSON 响应(比如 psql 查表结构),下一层想让 AI 引用其中的某个字段名 —— absolut 后 AI 看不到那份 JSON 了
  • 你让 AI 分析一张图片 → AI 调用 analyze_image → 下一层想让 AI 基于之前的视觉分析继续工作 —— absolut 后分析结果没了

没影响的场景:命令本身还在,AI 可以重跑重新获取输出。

edit only — 仅保留写操作

在 absolut 基础上,再额外失去

  • 全部 15 种温柔工具的头行(read_file、search_text、fetch_webpage 等),包括它们的路径和结果摘要
  • 5 种绝对工具的头行(run_command 等 "[A → xxx]" 那一行)

保留

  • 5 种写工具的头行(edit_file、write_file、create_file、delete_file、revert_file)——包括改了哪个文件、改了多少行、SHA256(基于自研timeline体系
  • Q/A/楼层分隔行

用户视角:整个对话的「调查过程」消失——AI 不知道之前读过哪些文件、搜过什么关键词、跑过什么命令 (读消失),AI 只知道最后改了什么文件(写保留)。你在编辑框里送出滴一切提问、AI 滴回复(一切结论)保留。

only facts — AI 提取关键事实

在 edit only 基础上,再额外失去

  • 一半的对话原文, 老的一半对话被砍掉(会尽量按字符数对半分),只剩 AI 提取的 facts。如果 AI 提取遗漏了关键信息,它就永远丢失了。这是不可逆的。
  • 此外 only facts 需要一次 tier-4 AI 调用,正常计费。

保留

  • 最近一半对话的:大Q(用户编辑框送出滴原文)、5 种写工具的头行、大A(AI 滴最终回复即一切结论)。
  • 如果压缩成功则新得到 AI 提取的 facts(任务级记忆区域 fx)

自限机制:h 原料(老的一半)必须 ≥32K tokens(≈ 80K 字符,字符 ÷ 2.5)才准许压缩。这意味着当一次压缩的收益小于 32K tokens 时,将不再能进行下一次“only facts” 压缩(自然收敛,无需额外规则),须知,每一次 only facts 压缩,都会导致背包重排序,显著降低当次请求(通常是一间 house)滴缓存命中率,那也正是自限机制存在滴原因之一。

进阶:底层设计原理

背包物理结构

[0] Z (铁律/index of 架构、skill等) — 永不压缩,100% 缓存命中
[1] fx (facts 记忆区域) — 手动触发,跨楼层持久
[2] 压缩饼干 (biscuit) — 逐层追加,前缀缓存命中
[3+] 当前楼层原始消息 — 唯一变化的部分

注:仅旧格式 quest(全量快照)restore 后可能翻转为 Z → biscuit → fx;新持久化模型(all.json 只存楼层自身消息)无此问题。

机械筛规则

原始消息饼干格式
userQ: [全量内容](剥离文件注入块和 CURRENT TIME)
assistant 纯文本A: [全量内容]
assistant 含 tool_callsA: 行,再 [A → xxx] file1, file2
tool 返回(可复现)摘要追加到上一工具行
tool 返回(不可复现)摘要 + ╔K...╚ 完整输出
system[S] [全量内容]

双包装盒体系

温柔包装盒(15 个工具 — 可复现):read_file、edit_file、write_file、create_file、delete_file、search_text、search_content、find_files、list_files、get_diagnostics、fetch_webpage、search_web、timeline_versions、diff_versions、revert_file。

结果可从磁盘重读或 sha256 引用复现 → 饼干仅保留一行摘要。

绝对包装盒(5 个工具 — 不可复现):run_command、generate_image、remove_background、analyze_image、get_vision_context。

结果不可精确复现(终端输出、模型随机、云端处理)→ ╔K...╚ 包裹,4K 硬帽。

三个按钮在底层干了什么

absolut(纯本地,零网络零费用)

遍历 biscuitLines,对每一层的 biscuit 文本执行正则 /\n╔K\n[\s\S]*?\n╚(?=\n|$)/g 精准剥离绝对盒体部。头行(如 [A → run_command] "ssh q@47 psql" 2318c)和温柔盒毫发无损。

替换 biscuit 消息 content 为剥离后的文本 → 持久化 ctx.json → 完成。

edit only(纯本地,零网络零费用)

在 absolut 基础上,逐行过滤 biscuit 文本。保留规则:

  • === F... === 楼层分隔行
  • Q: / A:
  • [S] 系统行
  • 含 edit_file / write_file / create_file / delete_file / revert_file 的工具头行保留

其余工具头行(read_file、search_text、run_command 等 15 种)全部丢弃。╔K...╚ 体部已在 absolut 阶段剥离。

only facts(本地 + AI 调用,正常计费)

原料真相:既不是「大A+大Q 的原样集合」,也不是「整个压缩饼干原样」——是饼干前半段的骨架行。三级处理链:

步骤操作结果
取料找 biscuit 消息全文(含所有 === F{n} 块,即各楼层大 Q + 大 A 的压缩形态)✅ 大 Q、大 A 都在(Q:/A: 行)
① absolut 过滤正则剥离 ╔K…╚ 体部❌ 绝对包装盒体部全剥
② edit only 行过滤逐行只留 Q:/A:/=== F/[S]/空行/5 个写工具头行❌ 温柔盒工具结果正文、全部读工具头行、绝对盒头行(run_command 等)全删
③ 切半=== F 分块 → 累计字符过半 → 取前半段 _hText后半段留在饼干(新基座)

_hText 写盘 _qqq/bullet/ → 📎 附件管线 → tier-4 noTools 提取 30-40 条事实(子弹目录只是内部载体,与子弹按钮功能无关)。

原料构成:✅ 大 Q、大 A(骨架行)· ✅ 5 个写工具头行 · ❌ 绝对盒体部 · ❌ 温柔盒正文 · ❌ fx(独立 _facts 消息,不在饼干里 → AI 看不到已有事实,这是「提取必然重复」的根因,见已知边界)

完整流程:

  1. 依次执行 absolut + edit only → 得到精简饼干
  2. === F 分块、累计字符过半切半:下半保留为 r(新饼干基座),上半作为 h 原料
  3. h 原料 < 32K tokens(≈ 80K 字符,字符 ÷ 2.5)→ 拒绝(收益不足,自然收敛)
  4. h 原料写入子弹文件 → 建一层新楼(tier 4,noTools,外观与正常楼层一致,账单照常计费)
  5. AI 从 h 原料提取 facts → A 回复为 facts 列表(★ 2026-08-10 增量提取:提示词带上已有 fx 清单作参照,只提取新增/变化事实,已存在的不重复输出;首次提取(无 fx)才全量提取 30-40 条)
  6. 楼层完结 → 重建流程检测到这是提取楼层 → 楼层整体跳过(不进饼干),提取的 facts 注入 fx 区(Z 之后、biscuit 之前);原文按楼层起点全量截断灭迹(防残留漏进饼干)
  7. fx 消息格式:═══ FACTS 2026-07-18 14:06:40 UTC+8 ═══\n- fact 1\n- fact 2
  8. 多次 only facts → 增量块 ═══ FACTS timestamp ═══ 追加到同一 fx 消息尾部(全背包仅 1 条 fx 消息,去重保尾;增量模式下新块只含新增/变化事实,不再堆叠全量副本)

已知边界与已修复项(2026-08-10 核验)

  • 多次提取不再重复(已修复):增量提取——提示词带上已有 fx 清单作参照(「已有事实清单 + 新对话历史」),只输出新增/变化的事实,无新增时回复「无新增事实」;此前实测中连续两次提取结果首行雷同的情况已不可能复现。
  • UI 摘要格顺序(已修复)压缩 · 事实 × N 格移至 biscuit 摘要格之前,对齐真实背包容序 Z → fx → biscuit;fx 消息在背包窗口有专用标签「压缩 · 事实 (fx)」。
  • fx 重启后仍在对话(已修复):重启恢复时从持久化记录重建 fx 消息(Z 后、biscuit 前定序),事实上下文不会丢失。
  • 历史数据污染(已清理):早前版本曾把普通楼层内容误写入事实区、并把全量事实误压进饼干,已一次性清理(有备份可恢复);现版本机制不再产生此类污染。
  • fx 内部冗余(增量模式根治):新提取只追加增量块,不再堆叠多份全量重叠内容;历史遗留冗余已一次性收敛,提示词声明「可能含历史重复,以内容为准」双保险。

缓存经济学

  • Z 消息永不变化 → 100% 缓存命中
  • 饼干逐层尾部追加,旧行字节不变 → 前缀缓存命中(仅最后一行新)
  • fx 仅在手动 only facts 时变化 → 几乎 100% 命中
  • 每层实际计费 ~2-4K tokens(仅饼干末行 + 用户新消息)

阀值压缩(自动)

每间 house 完结后检查饼干里 absolut 可回收的收益(╔K...╚ 体部总量,即按钮一上显示的数字),超过阈值(默认 100K tokens,齿轮设置中可调)→ 自动剥离绝对包装盒体部(同 absolut 按钮)。防止大楼层把饼干撑爆。