SOP · 前缀重建防护(判据 X)+ 默认档改 high + 口径修正¶
主题:prefix-guard-20261011
日期:2026-10-11
类型:C 类变更(改 hook 脚本 + 改规则 + 改 config.yaml 并重启代理)
1. 背景¶
本轮实测把两件事钉死了:
- 「增 / 删 skill、改
description、改prompt_hint」会改 system prompt → 下一轮首请求整段前缀重建(实测增backup-hygiene得176,394/189,706=93% ≈¥0.18;同轮开prompt_hint得282,917≈¥0.28)。而改规则文本 / skill 正文只有 2%。此类改动明知要花钱,本应改到「新会话」里做(上下文小、便宜一个量级),此前却直接在当前大上下文里做了。 - 用户三点纠正:① 重启代理不是红线(规则与
BASELINE早已写明「可直接重启、不打断输出流」),是我措辞把它塞进了红线;② 明知会失效的改动要先提醒开新会话;③ 默认档要一直 high,且质疑「为什么会重建」。
2. 目标¶
- 加
merge-guard判据 X:写 / 删~/.trae-cn/skills/**/SKILL.md、或写config.yaml含prompt_hint→ 提醒「下一轮整段前缀重建,建议先开新会话再改」。 - 规则:「重启共享服务」行明确标注"不是红线";新增一行「会进 system prompt 的改动先提示用户开新会话」。
config.yaml默认档default_effort: low → high。- 修正两处被实测打脸的旧结论(
BASELINE.md前缀缓存边界、commands/cost.md)。
3. 前置条件¶
python3;改后重启代理用 venv 解释器:PYTHON_BIN="$PWD/venv/bin/python" ./run.sh restart。
4. 影响范围¶
- 单机、无需停服;重启中断约 1 秒,不打断在途输出流。
- 触及:
merge-guard/merge-guard.py(+判据 X)、~/.trae-cn/user_rules/rule-agent-efficiency.md、config.yaml、docs/BASELINE.md、~/.trae-cn/commands/cost.md。 merge-guard是 PreToolUsematcher:*,改动即时生效(hooks.json未动,无需重启 Trae)。
5. 分步操作¶
步骤 1:加判据 X(merge-guard.py)¶
注意事项与坑:X 必须排在 M/P/Q/W 之前,并把 hit 清空——否则会被它们抢占(M=盲改、P=会话规模,二者都先于 X 触发;首版实测因此 X 从不出现)。实现见 _prefix_invalidating()。
cd ~/Documents/services/token_proxy
python3 -m py_compile merge-guard/merge-guard.py # 预期 rc=0
python3 prefix-guard-20261011/verify_judge_x.py # 预期 7/7
步骤 2:规则两行(rule-agent-efficiency.md 执行方式表)¶
「重启共享服务」行标注不是红线;新增「会进 system prompt 的改动 → 先提示用户开新会话」行。
grep -n '不是红线\|先提示用户' ~/.trae-cn/user_rules/rule-agent-efficiency.md # 预期各 1 行
步骤 3:默认档改 high 并重启¶
注意事项与坑:改档位只改请求体的 reasoning_effort 字段,不改 prompt → 不会重建(与 prompt_hint 完全不同),重启代理即可。
grep -n 'default_effort' config.yaml # 预期 high
PYTHON_BIN="$PWD/venv/bin/python" ./run.sh restart # 旧进程若非 run.sh 启动,先按 PID kill
步骤 4:口径修正(BASELINE.md / commands/cost.md)¶
把「user_rules 改动会使前缀失效」「与改 skill / 规则无关」等旧说法改为「看 system prompt 是否变」的分档口径。
6. 验证¶
python3 -m py_compile merge-guard/merge-guard.py # rc=0
python3 prefix-guard-20261011/verify_judge_x.py # 7/7 PASS
./run.sh status # [运行中]
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8788/healthz # 200
实测(2026-10-11):
- 判据 X 7/7:写/删 SKILL.md、改 config.yaml+prompt_hint → 提醒;改 skill 正文、改 config 其它字段、普通文件 → 静默;每会话只一次。
- 代理重启后 healthz 200、default_effort=high 生效;重启后 miss 仍 300~800(正常) → 证明「改档位参数不重建」。
7. 回滚¶
备份位置:prefix-guard-20261011/backup/,登记见 backup/README.md。
cd ~/Documents/services/token_proxy
cp -p prefix-guard-20261011/backup/merge-guard/merge-guard.py.bak.<TS> merge-guard/merge-guard.py
cp -p prefix-guard-20261011/backup/config.yaml.bak.<TS> config.yaml
cp -p prefix-guard-20261011/backup/docs/BASELINE.md.bak.<TS> docs/BASELINE.md
cp -p prefix-guard-20261011/backup/trae-cn/user_rules/rule-agent-efficiency.md.bak.<TS> ~/.trae-cn/user_rules/rule-agent-efficiency.md
cp -p prefix-guard-20261011/backup/trae-cn/commands/cost.md.bak.<TS> ~/.trae-cn/commands/cost.md
PYTHON_BIN="$PWD/venv/bin/python" ./run.sh restart
回滚后验证:verify_judge_x.py 应不再出现 【前缀重建提醒】;grep default_effort config.yaml 应回 low。
8. 风险说明¶
| 风险 | 缓解 |
|---|---|
| X 误报(如新建一个不含 description 的 SKILL.md) | 只提醒不阻断;「宁多勿漏」是本判据的取向(改 skill 索引必然花钱) |
| 默认档 high 抬高输出与输入成本 | 用户裁定接受(low 与 high 思考量实测几乎相同,省不下);随时可改回 |
| 重启起不来 | 用 venv 解释器;旧进程非 run.sh 启动时先按 PID kill |
附录 · 交付物与回滚点¶
| 交付物 | 路径 | 说明 |
|---|---|---|
| 判据 X | merge-guard/merge-guard.py(_prefix_invalidating + PROMPTS["X"] + 主流程块) |
提醒「整段重建、建议开新会话」 |
| 验证脚本 | prefix-guard-20261011/verify_judge_x.py |
正例 / 反例 / 每会话一次,7 项 |
| 规则 | rule-agent-efficiency.md(重启行 + 新增行) |
重启非红线;system prompt 改动先提示 |
| 默认档 | config.yaml → default_effort: high |
一律 high |
| 口径修正 | docs/BASELINE.md §2、~/.trae-cn/commands/cost.md |
按「system prompt 是否变」分档 |
| 回滚点 | prefix-guard-20261011/backup/ |
台账 backup/README.md |
来源:
/home/rain/Documents/services/token_proxy/prefix-guard-20261011/SOP.md| 最后更新:2026-10-11 17:14(由build/sync.py同步,请勿在站点侧修改)