Personal Project · Independent Build
RuleArena
把规则变更的验证,做成发布门禁。
电商规则对抗验证平台:自然语言规则编译为人工确认的可执行契约,受控 Agent 搜索高风险动作序列,干净环境真实 HTTP 重放,确定性 Oracle 裁决,沉淀可回归的最小反例。
业务问题与个人职责
业务问题:促销、退款、积分与会员权益规则频繁变更,人工回归跟不上——Agent 负责寻找人没有想到的路径,确定性程序负责证明路径是否真的有问题。
系统链路
- 规则变更
- RuleSpec 契约
- 人工确认
- 对抗搜索
- 沙箱重放
- Oracle 裁决
- 最小反例
- 发布门禁
工程重点
- Anti Self-Proof
- 候选风险 ≠ 确认漏洞——Agent 全程无法触达 Ground Truth,只有沙箱重放 + Oracle 违规才确认问题。
- Bounded Exploration
- 禁止动态表达式求值,仅限固定领域原语;未确认规则不进入攻击运行。
- Regression Assets
- 最小反例绑定完整证据链,一键导出 pytest;修复版本自动重放历史反例与正常用例。
可验证证据
- Eval Set
- 设计 · 24 Case 双评测集,16 开发 + 8 隔离
- Mechanism
- 实测 · 正常场景误报 0 · Ground Truth 泄漏 0 · 同版本重放 3/3
- Discovery
- 实测 · 发现率 0–20%,设计门禁 ≥75% 未达标
- Gate
- 反例 → pytest 回归 → 发布门禁
FastAPI · PostgreSQL · Redis · 显式 FSM · Delta Debugging · pytest
设计取舍
-
用确定性 Oracle 裁决,不用 LLM Judge
- 为什么
- 资金守恒与生命周期不变量可以稳定计算;LLM Judge 适合评价表达质量,不适合裁决钱对不对。
- 代价
- 每条规则的不变量都得显式建模成可执行断言,覆盖不到的语义只能如实声明为未知,没有兜底判断的余地。
-
参考模拟器快速探索 + 独立 Sandbox 真实 HTTP 重放
- 为什么
- 只在模拟器里跑等于自证——模拟器说有问题,不代表真实系统有问题;全部走真实 HTTP 又太慢,搜索根本展不开。
- 代价
- 要维护两层世界并保证语义一致,「晋升」这条路径本身变成需要被测试的对象。
-
显式 Workflow / FSM 控制主流程,Agent 只负责搜索未知路径
- 为什么
- 这个系统的生命周期是有限的,状态和失败语义都能写清楚;把主流程交给编排框架会把关键机制藏起来。
- 代价
- 放弃框架带来的搭建速度——重试、恢复、状态转移全部自己实现并测试,前期投入明显更高。
-
先编译成 RuleSpec 并人工确认,不让 Agent 直接读自然语言规则
- 为什么
- 自然语言规则里的歧义必须被人确认并冻结版本,否则后面所有裁决都建立在一套会漂移的语义上。
- 代价
- 规则接入多了一道人工环节,吞吐受限于确认人力;RuleSpec 的表达能力同时也框住了可验证规则的范围。
-
隔离 Ground Truth,让 Agent 全程无法触达
- 为什么
- 如果 Agent 能读到标准答案,它找到的「漏洞」就可能只是复述考纲——虚假的高分比低分更危险。
- 代价
- 隐藏集只能由评测侧维护,调试时看不到失败细节,定位问题要靠 Trace 反推而不是直接对答案。
系统不负责清单
刻意划出的非目标。写下来的边界才是能守住的边界。
- 不执行真实支付、库存、物流与商家结算
- 不直接访问生产电商系统
- 不证明复杂真实并发与分布式事务
- 不支持任意行业自由建模——只有「有限动作、明确状态、可执行环境、确定性不变量」四个条件同时成立才适合迁移
- 不让 Agent 自动修改和发布业务代码
- 不做形式化证明,不声明规则绝对安全
- 不自动海量生成规则和用例
- 不用 LLM Judge 替代确定性业务裁决
开放问题
目前还没有答案的部分。欢迎就其中任何一条追问。
- LLM 策略发现率实测 0–20%,还没跑赢确定性 BFS 基线(20–22%);Single Agent 在 300s 预算内仍未提交候选——这是当前主攻方向
- 90s → 300s 是依据实测 p95 延迟校准的单一变量调整,更优的预算曲线还没有答案
- 24-Case 平台基准证明的是搜索与裁决机制的可信度,不能外推到任意新规则;单条规则的放行结论仍需按规则组合证据
- 换更真实的靶场解决不了搜索层短板——接入外部电商系统因此被降级为搜索层达标之后的事