SOP — 规则遵守率代理对照(效率收益对照组的补齐)¶
主题目录:rule-compliance-20261006/|变更类型:C 类(交付物变更,只读取数脚本)
执行时间:2026-10-06 16:54(Asia/Shanghai)
1. 背景¶
效率侧长期缺"收益对照":效率收益需要「同一任务、规则开 vs 关」的对照,而规则是全局注入
(~/.trae-cn/user_rules/*.md + skill frontmatter/正文),无法对同一任务开关;同任务型
纵向序列又被任务类型主导,差异归因不到规则。结果是:成本可量化、收益量化不了
(总账第五节 #24/#25/#30 即这三项"等数据"的标定项)。
2026-10-06 用户要求"基于现有数据补齐效率收益对照组"。复核后判定:
- 纯随机对照不可得(规则关不掉);
- 自评开关对照(方案②)要等下一轮同类变更顺带采,本轮不做;
- 配额随机对照(方案③)代价高、不宜现在做;
- 代理对照(方案①)数据全部现成、零新增采集 → 本轮执行。
2. 目标¶
- 产出一个只读取数脚本,把"规则遵守率"做成时间序列,作为效率收益的代理对照;
- 明确标注该方法的天花板,避免把"代理指标"当成"收益"误读;
- 复用既有
step_profile.py的解析口径,不另造一套聚合。
3. 前置条件¶
- 数据源
logs/req_shape.jsonl(不可再生,只读),2026-09-16 起累积,当前 16,284 行; python3(无第三方依赖);工程内cost_audit/目录;- 执行前确认
logs/三份 jsonl 不被写入:本脚本全程只open(..., encoding="utf-8")读取。
4. 影响范围¶
| 项 | 内容 |
|---|---|
| 主机 / 组件 | 本机 192.168.31.250,cost_audit/ 脚本集 |
| 是否停服 | 否,不触碰代理服务与 logs/ |
| 是否影响在跑业务 | 否,纯只读取数 |
| 窗口期 | 无(随时可跑) |
| 新增文件 | cost_audit/rule_compliance.py |
| 修改文件 | docs/PROJECT-MAP.md(脚本清单一行)、optimization-backlog.md(第五节状态)、measured-baselines.md(样本回填)、docs/HANDOFF.md(状态更新) |
5. 分步操作¶
步骤 1:新增取数脚本¶
把四类指标写入一个脚本:A 类(全窗口可用,不依赖 tool_names)与 B 类(仅 2026-10-02 起,
依赖 tool_names)。解析复用 step_profile 的 load / last_msg / tools_of / group_by_conv。
注意事项与坑:
- Python
%格式化时,说明文字里的DUP%、覆盖%必须写成DUP%%,否则抛ValueError: unsupported format character '='(本轮已踩一次,已修); - 「轮首」判定靠
turn变化:miss的轮首条属正常不命中,只有中段大 miss 才是 "前缀被改写"的信号,判据里必须排除轮首,否则指标被每轮第一条的重放污染; - 阈值来源:
logs/req_shape.jsonl实测末条 tool 消息分位p50=1232 / p90=5068 / p99=25547 / max=87046字节, 故取BIG_BYTES=40000(近似"根目录列举被 4 万字符截断")、LIST_BYTES=20000; 中段 miss 取20000tok(与 MB 既有"整页抓取 / 大文件"分界一致)。
# 新增文件(无需备份:不存在同名旧文件)
ls -l cost_audit/rule_compliance.py # 预期:文件存在,属主 rain
python3 -m py_compile cost_audit/rule_compliance.py && echo COMPILE_OK
实现体:cost_audit/rule_compliance.py(只读,sys.dont_write_bytecode = True)。
步骤 2:跑三条取数¶
cd ~/Documents/services/token_proxy
python3 cost_audit/rule_compliance.py # 按日趋势
python3 cost_audit/rule_compliance.py --by week # 按 ISO 周(看长趋势)
python3 cost_audit/rule_compliance.py --cut 2026-10-02 # 规则切点前后两段对照
步骤 3:幂等复跑(脚本只读,应逐字节一致)¶
python3 cost_audit/rule_compliance.py --by week > /tmp/rc1.txt 2>&1
python3 cost_audit/rule_compliance.py --by week > /tmp/rc2.txt 2>&1
cmp /tmp/rc1.txt /tmp/rc2.txt && echo "幂等: 两次输出一致"
步骤 4:恢复 / 修补(无)¶
本轮无系统状态变更,无补跑动作。
6. 验证¶
6.1 脚本可用性¶
py_compile通过;三条命令均rc=0、无 traceback;- 幂等:两次输出
cmp一致(实测通过)。
6.2 首轮实测结果(2026-10-06 16:54)¶
按周(全窗口)
| 桶 | 步数 | 会话 | DUP% | 中段miss% | 大输出% | 轮P90 | 违规列举 | 子智能体 | 覆盖率% |
|---|---|---|---|---|---|---|---|---|---|
| 2026-W38 | 1614 | 19 | 0.3 | 0.2 | 0.1 | 43 | - | - | 0.0 |
| 2026-W39 | 5172 | 84 | 0.2 | 0.1 | 0.3 | 39 | - | - | 0.0 |
| 2026-W40 | 8014 | 119 | 0.1 | 1.2 | 0.2 | 43 | - | - | 38.1 |
| 2026-W41 | 1057 | 22 | 0.0 | 2.5 | 0.5 | 34 | 3 | 1 | 97.8 |
切点前后(切点 2026-10-02)
| 段 | 步数 | 会话 | DUP% | 中段miss% | 大输出% | 轮P90 | 违规列举 | 子智能体 | 覆盖率% |
|---|---|---|---|---|---|---|---|---|---|
| 切点前 | 10751 | 146 | 0.2 | 0.3 | 0.2 | 46 | - | - | 0.0 |
| 切点后 | 5106 | 96 | 0.0 | 1.8 | 0.3 | 37 | 10 | 19 | 80.1 |
差值:DUP -0.2 pp|中段miss +1.5 pp|大输出 +0.1 pp|轮P90 -9
6.3 判读(必须连同天花板一起读)¶
- 方向为正:DUP 与单轮步数 P90 下降(DUP 0.3%→0.0%,轮 P90 46→37);
- 方向为负:中段大 miss 与 大输出步上升——但高度可疑是混淆:中段 miss 受 上下文规模与任务长度主导(10-06 复核轮已实测「客户端换工具集」才是失效主因), 不能归因于规则;
- B 类分辨率不足:违规列举 10-03~10-06 仅
1/2/2/1步、子智能体2/8/0/1次, 样本太小,当前不足以支撑结论; - 无 pre 窗口:
tool_names自 2026-10-02 起才有值(10-03 后覆盖 >95%), 而多数规则切点(10-02/10-03)正落在这条边界上 → B 类只能看上线后趋势。
结论:本轮把"对照组"从"没有"补到"有代理指标、有可复跑命令、有明确判读边界"; 但"效率收益"仍未取得可归因的数字。
7. 回滚¶
| 动作 | 命令 |
|---|---|
| 删除新增脚本 | rm -f cost_audit/rule_compliance.py |
| 恢复 4 个被改文件 | 见下方备份路径,覆盖回原路径即可 |
备份位置:rule-compliance-20261006/backup/(权限 600,目录 755),逐条登记见
rule-compliance-20261006/backup/README.md。回滚后再跑一次 py_compile 确认无残留引用。
8. 风险说明¶
| 风险 | 缓解 |
|---|---|
| 把代理指标当收益(最大风险) | 脚本 --tn-min 强制覆盖率门槛,B 类列不足 80% 覆盖时打印 -;本章 6.3 写明混淆与天花板 |
| 阈值拍脑袋 | 阈值取自 req_shape 实测分位(见 5.1 注释) |
误写 logs/ |
全脚本只读;sys.dont_write_bytecode=True 避免生成 __pycache__ |
| 指标被单日样本噪声主导 | 默认按周桶看长趋势,单日桶只作异常定位 |
| B 类口径漂移 | 解析复用 step_profile.py,口径只此一处 |
来源:
/home/rain/Documents/services/token_proxy/rule-compliance-20261006/SOP.md| 最后更新:2026-10-06 16:54(由build/sync.py同步,请勿在站点侧修改)