test_clip_context_handoff.py
3.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/usr/bin/env python3
"""VERIFY: 上下文交接可见性(CLM / ContextBench, learn_queue #1323, 2026-10-11)
病理(HGB WHERE×WHY):WHERE=吸收链路每个把文本塞进 prompt / 落 learning_results 的交接点;
WHY=裸切片 `[:N]` 做固定压缩——截断无标记,下游(重试的模型 / 事后审计的人)把残缺片段当完整读。
对应 ContextBench 证伪点①「总结压缩丢信息 → 幻觉」:固定策略原理上覆盖不了所有局面,
能给的最低限度是让「压缩」这件事自身可见 + 可回源。
TDD:
TC1 `_clip` 行为(短文本不动 / 长文本带「截掉多少字」标记 / 空输入)
TC2 `_clip` 可回源(src 指针出现在标记里)
TC3 源码守卫:吸收链路交接点不得残留裸切片(防回退)
TC4 检测与存储解耦:关键词 Gate 用全文,存储才截断(对齐 _on_apply_done 先例)
TC5 controller 雏形接线:Step 0 算力分配 prompt + effort_file 观测量 + cleanup
"""
import pathlib
import sys
APP = pathlib.Path("/data/data/com.termux/files/home/wechat-viewer/app.py")
FAIL = 0
SRC = APP.read_text(encoding="utf-8")
def load_clip():
"""从 app.py 源码抽出 _clip 单独 exec(避免 import app 的重量级依赖)。"""
start = SRC.find("def _clip(")
end = SRC.find("def _run_absorb(", start)
ns = {}
exec(SRC[start:end], ns) # noqa: S102
return ns["_clip"]
def check(label, ok):
global FAIL
print(f" {'✅' if ok else '❌'} {label}")
if not ok:
FAIL += 1
_clip = load_clip()
print("=== TC1 _clip 行为 ===")
check("短文本原样返回", _clip("abc", 10) == "abc")
check("等长原样返回", _clip("a" * 10, 10) == "a" * 10)
check("空输入 → 空串", _clip("", 5) == "" and _clip(None, 5) == "")
c = _clip("x" * 100, 20)
check(f"长文本标记截掉字数 → {c!r}", c.startswith("x" * 20) and "CLIPPED 80 chars" in c)
print("\n=== TC2 可回源(src 指针)===")
c2 = _clip("y" * 60, 10, "learn_queue.error_msg")
check("src 进入标记", "; full: learn_queue.error_msg" in c2)
check("无 src 时不伪造回源", "full:" not in _clip("z" * 60, 10))
print("\n=== TC3 源码守卫:交接点不得残留裸切片 ===")
for label, bad in [
("吸收重试 prompt 不再裸切 prev_err", "prev_err[:600]" in SRC),
("Step5 指纹失败分支不再裸切 prev_msgs", "prev_msgs[:200]" in SRC),
("result_summary/reflection 不再裸切", "result_text[:300]" in SRC or "result_text[:500]" in SRC),
("outline 不再裸切 read_text()[:500]", "read_text()[:500]" in SRC),
]:
check(f"{label}(禁止出现裸切片)", not bad)
check("_clip 在吸收链路被调用 ≥8 处", SRC.count("_clip(") >= 8)
check("_clip 定义了「禁止裸切片」的边界纪律注释", "压缩这件事自身必须可见" in SRC)
print("\n=== TC4 检测与存储解耦(对齐 _on_apply_done 先例)===")
check("读取全文 result_text_full", "result_text_full = Path(result_file).read_text()" in SRC)
check("关键词 Gate 用全文(行为变化)", '"## 行为变化" not in result_text_full' in SRC)
check("关键词 Gate 用全文(吸收产出)", '"## 吸收产出" in result_text_full' in SRC)
check("长度 Gate 用全文", "len(result_text_full.strip()) < 50" in SRC)
check("入库仍走 _clip(存储侧截断但可见)", "result_summary=_clip(result_text_full, 500)" in SRC)
print("\n=== TC5 controller 雏形接线(Thinking Before Thinking)===")
check("prompt 含 Step 0 算力分配四阶段", all(k in SRC for k in (
"## Step 0: 算力分配", "Assess:", "Propose:", "Evaluate:", "Dispatch:")))
check("判据句进 prompt", "问题不是「花不花算力」而是会不会花" in SRC
or "判据不是「花不花算力」而是「会不会花」" in SRC)
check("effort_file 观测量进 trace", "effort_alloc=" in SRC)
check("effort_file 有 cleanup(防脏文件堆积)", "Path(effort_file).unlink()" in SRC)
print(f"\n{'✅ ALL PASS' if FAIL == 0 else f'❌ {FAIL} FAILED'}")
sys.exit(0 if FAIL == 0 else 1)