跳转至

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. 目标

  1. 产出一个只读取数脚本,把"规则遵守率"做成时间序列,作为效率收益的代理对照;
  2. 明确标注该方法的天花板,避免把"代理指标"当成"收益"误读;
  3. 复用既有 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 取 20000 tok(与 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 同步,请勿在站点侧修改)