把一个长数组改成“其余略”,看起来省了很多上下文,却不能再叫无损压缩。数组末尾可能恰好保存着要找的异常项。比较诚实的做法,是区分两个目标:显示层少展开,存储层仍能恢复。
这里实现一个可逆折叠器。它不会让全部信息凭空消失,只把较长的数组移入内容寻址仓库,Prompt中留下引用。若要恢复,仍需取回仓库内容,因此请求总成本未必下降。
引用必须有明确类型
直接使用{'ref': 'abc'}容易和用户数据撞名。下面把所有输入节点封装为带类型的节点,仓库只保存完整编码后的数组。输入限定为JSON数据,字典键必须是字符串,浮点值必须有限;不把Python任意对象序列化后称为JSON无损。
图中页面是引用存储的概念示意,符号并非可解析JSON;底部不同类型图标表示可寻址工件的扩展方向,下面程序只处理JSON值。
import hashlib import json import math def encode(value, store, threshold=8): if isinstance(value, dict): if not all(isinstance(k, str) for k in value): raise TypeError('JSON object keys must be strings') return ['object', {k: encode(v, store, threshold) for k, v in value.items()}] if isinstance(value, list): node = ['array', [encode(v, store, threshold) for v in value]] if len(value) > threshold: payload = json.dumps(node, sort_keys=True, separators=(',', ':'), ensure_ascii=False, allow_nan=False) key = hashlib.sha256(payload.encode()).hexdigest() store[key] = payload return ['reference', key] return node if value is None or isinstance(value, (str, bool, int)): return ['scalar', value] if isinstance(value, float) and math.isfinite(value): return ['scalar', value] raise TypeError('unsupported JSON value') def decode(node, store): kind, value = node if kind == 'reference': payload = store[value] if hashlib.sha256(payload.encode()).hexdigest() != value: raise ValueError('corrupt store') return decode(json.loads(payload), store) if kind == 'array': return [decode(v, store) for v in value] if kind == 'object': return {k: decode(v, store) for k, v in value.items()} if kind == 'scalar': return value raise ValueError('unknown node type') original = {'rows': list(range(12)), 'ref': {'reference': 'user data'}} store = {} folded = encode(original, store) restored = decode(folded, store) assert restored == original and len(restored['rows']) == 12 assert len(store) == 1 print('round trip and 12-item array: PASS')无损承诺只覆盖哪一层
这个实现验证的是JSON值往返相等,不保留原始文本的空格、键顺序签名或数值写法,例如1.0与1e0的字面差别。若原始字节用于签名或审计,应该保存原始文件及其哈希,而非重新序列化后比较。
Python JSON文档解释了对象键和序列化选项。它解决编码格式,不能保证模型记得调用恢复工具。Kimi Code CLI在10月21日加入与压缩请求排队相关的改进,更新记录也提醒我们:上下文压缩会进入真实会话流程,恢复地址、工具权限与失败返回都要设计。
本地样例验证了12项数组完整恢复和用户同名字段不冲突,没有测试模型在长会话中的检索成功率。外部仓库还需要容量、访问控制和引用生命周期;引用丢失时应明确失败,不能把缺失内容默默替换成摘要。