层隔离评估:基于无LLM、回归锁定的测试框架对生产级LLM代理的确定性骨架进行门控
摘要
本文介绍了针对LLM代理的层隔离评估方法,将生产级代理分解为架构层,每层使用确定性无LLM测试框架进行测试。它展示了逐切片基线测试能够定位聚合指标所掩盖的性能回归,并通过跨多个租户的受控回归注入进行了验证。
arXiv:2606.11686v1 Announce Type: new
摘要:端到端任务成功率是评估LLM代理的主流方式,但一个聚合数字只能告诉你代理出现了回归,却不能指出问题所在。我们提出层隔离评估:将一个已部署的订单代理分解为固定层级分类(本体、意图、路由、分解、升级、安全、记忆以及横切封装/防御),每一层由其自身的断言切片在确定性、无LLM的"纯"模式下执行。纯测试套件(共23个切片238个案例;225个在2.39秒内运行,约10毫秒/案例)在每次变更时在CI中运行,针对锁定每个切片的基线。我们通过受控回归注入进行验证,每次降低一个非安全层(共七层)。我们没有设计到的效果是掩盖:聚合通过率几乎不变(六个局部回归变化在-1.7到-5.9个百分点之间),而对应切片急剧下降(-25到-91个百分点)。层的切片对其自身故障做出反应部分是由于构造所致;测量的结果是(i)聚合掩盖以及(ii)损害不会波及到其他切片:被注入层的切片在7个案例中的5个中是受影响最严重的,在7个案例中全部进入前三(平均排名1.29/19)。定位在第二个结构不同的租户(星巴克新加坡)上得到复现:所有七个匹配切片均急剧下降,因此并非单一目录的假象。我们将其定位为EDDOps规定但未实现的组件级评估的具体确定性实例化,以CheckList为前身,并作为全工作流随机突变测试的确定性镜像。我们的贡献包括:(a)为生产代理提供完全分解、亚秒级、无LLM的按层测试框架,(b)一个覆盖率-诚实性测试充分性准则,拒绝为未执行层打分,以及(c)回归注入演示,表明基于每切片基线锁定的门控能够定位聚合指标掩盖的回归。
查看缓存全文
缓存时间: 2026/06/11 13:40
# 为生产级LLM代理的确定性骨架添加门控:基于无LLM、回归锁定测试工具
来源:https://arxiv.org/html/2606.11686
Sawyer Zhang, Alexander Wang, Sophie Lei
Lumivate (Lumi)
2026年6月8日
###### 摘要
端到端任务成功率是评估LLM代理的主流方式,但单一的聚合数字只能告诉你代理是否发生了回归,而无法告诉你回归发生在*哪里*。我们提出*层级隔离评估*:将一个已部署的单一排序代理分解为一个固定的架构层级分类体系——包括本体预解析、意图信号、路由、分解、升级、安全、记忆以及横切的外壳/防御——每个层级由自己的断言切片执行,这些切片以确定性、*无LLM“纯”模式*运行。完整的纯模式测试套件(23个切片,238个基线案例;其中225个案例在2.39秒内运行,约10毫秒/案例)在每次变更时于CI中执行,并对照每个切片锁定的基线进行验证。我们通过*受控回归注入*来验证该方法:逐一退化七个非安全层级。我们未设计但实际存在的效应是*掩蔽*——聚合通过率几乎不变化(六个*局部*回归为−1.7到−5.9个百分点),小到在仪表盘噪声中消失,而对应的切片则大幅下降(−25到−91个百分点)。某个层级的自身切片对该层级故障产生反应,部分是*构造性的*(每个切片本就是为此层级编写断言);非显而易见的、经过测量的结果是:(i) 聚合掩蔽,以及 (ii) 故障不会蔓延到*其他切片*——在7个案例中有5个案例中,注入层级的切片是受损最严重的,7个案例中全部进入前三(平均排名1.29/19),而非对角线部分几乎平坦。该定位结果在第二个结构不同的租户(星巴克新加坡)上得到复现:所有七个匹配切片均大幅下降,且“局部 vs 基础”的特征成立,因此该结果并非单一目录的伪影。我们将该方法定位为评估驱动型代理运维(Xia et al., 2024)所规定但未实现的组件级评估的具体、确定性实例化,并以CheckList(Ribeiro et al., 2020)为其方法论前辈;它是全工作流随机突变测试(Bhardwaj, 2026)的确定性镜像。我们并未声称发明了组件级评估;我们的贡献是:(a) 为生产级代理提供一个完全分解、亚秒级、无LLM的逐层级测试工具,(b) 一个*覆盖率诚实*的测试充分性准则,拒绝为未执行的层级打分,以及 (c) 通过回归注入演示,证明逐切片基线锁定门控能够定位聚合指标所掩盖的回归。
## 1 引言
代理基准测试通过端到端任务成功率进行评分(Liu et al., 2024; Yao et al., 2024; Zhou et al., 2024; Jimenez et al., 2024; Mialon et al., 2023)。这是正确的*外部*指标,但却是一个糟糕的*开发*信号:当数值下降时,它无法说明代理的哪个子系统——意图解析、规划、升级、安全验证器——出现了故障,而要找出原因所需的操作(重新运行实时、随机、分钟级每回合的代理并进行二分查找)既缓慢又充满噪声。越来越多的研究工作认为,仅关注结果的排行榜隐藏了代理失败的地方(Mazaheri and Mazaheri, 2026; Mohammadi et al., 2025),并逐一分解单一能力(如规划(Sun et al., 2026));一篇过程模型论文(Xia et al., 2024)规定了锁定回归基线以及通过离线评估中间产物来定位故障的方法。但一直缺少的是针对真实部署代理的*具体、完全分解、可运行*的实例化,以及证明其能够定位聚合指标所遗漏故障的经验性演示。
我们提供了这两者。我们的代理——一个按租户划分、多轮次的食物饮料订购代理——被分解为一个固定的架构层级分类体系,每个层级都有相应的断言切片,以确定性*纯模式*运行(无LLM调用),因此整个套件在几秒钟内完成,并根据锁定后的逐切片基线对每个拉取请求进行门控。然后我们*注入*受控的单层级回归,并展示核心结果:聚合通过率几乎不变,而对应的切片崩盘,将故障精确定位到一个层级(表3)。
#### 贡献。
- • 一个生产级代理的固定*层级分类体系*以及一个确定性无LLM*纯模式测试工具*(238个案例,23个切片),运行时间约2.4秒,在CI中根据锁定的基线进行门控(§3)。
- • 跨越七个层级的*回归注入验证*,展示了*掩蔽*现象:聚合几乎不变(六个局部回归为−1.7到−5.9个百分点),而对应的切片崩盘(局部−25到−91个百分点;基础本体案例为−95个百分点)。注入层级的切片在7个案例中有5个是受损最严重的,7个案例全部进入前三,非对角线部分几乎平坦;我们明确说明了其中哪些部分是构造性的,哪些是测量的(§4)。
- • *跨租户复现*(§4.1):在第二个结构不同的租户(星巴克新加坡)上复现了全部七个注入,每个匹配切片均崩盘,局部vs基础的特征成立,表明定位结果并非单一目录的伪影。
- • 一个*覆盖率诚实*的基线,将零案例切片报告为`null`,绝不报告`100%`,因此绿色聚合无法隐藏未执行的层级(§3)。
- • 诚实的*定位*:我们将规定的过程模型(Xia et al., 2024)付诸实践,源于行为测试(Ribeiro et al., 2020),并区别于全工作流随机突变测试(Bhardwaj, 2026)(§2)。
## 2 相关工作
#### 仅关注结果的代理评估及其批评者。
标准的代理基准报告一个单一的任务成功数字(Liu et al., 2024; Yao et al., 2024; Zhou et al., 2024; Jimenez et al., 2024; Mialon et al., 2023)。近期的批评认为这“将行为坍缩为最终任务成功”并隐藏了失败(Mazaheri and Mazaheri, 2026);综述将结果与过程(工具使用、规划、记忆)分开,并指出任务完成只能提供有限的细粒度失败洞察(Mohammadi et al., 2025);诊断框架则解耦*单一*能力,如规划(Sun et al., 2026)。我们的做法是将*整个代理*分解为一个固定的多层测试工具,而不是孤立单一维度。
#### ML的行为/契约测试。
CheckList(Ribeiro et al., 2020)用能力×测试类型的行为切片替代了留存准确率;ML测试文献(Zhang et al., 2020)提供了术语(测试预言机、组件级vs系统级测试、故障注入)。我们的纯模式逐层断言是将CheckList的思想应用于代理的*内部*层级,并采用可被预言机检查的确定性基底。
#### 消融 vs 隔离。
代理脚手架通常通过*端到端测量的消融*进行验证——ReAct消融推理/行动(Yao et al., 2023),Reflexion消融自我反思并测量全局成功(Shinn et al., 2023)。我们*隔离*每个层级,通过其自身的断言进行验证,而不是通过完整的随机堆栈测量其贡献。
#### 评估驱动的代理运维与回归测试。
Xia et al. (2024)在精神上是最接近的先前工作:一个过程模型,规定了锁定回归基线、通过离线评估中间产物来定位故障、并重新运行相同切片以确认差异。我们提供了这些规定的具体、确定性、无LLM的实例化。Bhardwaj (2026)定义了代理突变操作符和一个针对*全工作流*回归测试的随机突变分数;我们的不同之处在于按*架构层级*进行测试,对照*确定性锁定基线*,并通过注入验证逐切片门控能够*定位*(表1)。我们的回归注入是其突变操作符的确定性模拟。除了结果排行榜之外,诊断套件将代理*能力*分解为命名维度并报告逐维度分数(Ma et al., 2024);我们在*测试*领域(而非基准测试)做出了同样的举动,并使用精确(而非学习到的)逐维度预言机。行业CI提示测试(例如promptfoo)以近乎零成本运行声明式确定性断言;我们的纯模式是代理内部层级的模拟。
表1:层级隔离纯模式测试与随机全工作流突变测试(Bhardwaj, 2026)的对比。两者互补:我们的方法在每个PR上对确定性核心进行门控;他们的方法覆盖了我们纯模式通道无法达到的生成型全代理行为。
#### 工具表面作为意图空间。
我们的路由层遵循设计原则:类型化工具表面包含了意图分类(Prakash, 2025):没有单独的意图分类器需要测试,因此路由切片直接断言工具选择。
## 3 层级隔离测试工具
#### 分解。
代理被分解为一个固定的层级分类体系,每个层级拥有一个断言切片(表2)。层级映射到请求生命周期:L0本体预解析、意图信号和言语行为;L2工具路由;L3子目标分解、约束处理和层级升级;L4安全(价格/SKU/过敏原)、知识和记忆;以及横切的外壳、防御、OOD拒绝、重格式化器、区域忠实性和会话初始化切片。
#### 纯模式。
每个切片在*确定性*输出上断言单个层级的契约,无需任何LLM调用:本体解析器的规范化ID、基于规则的升级决策、重格式化器的字典重写、OOD短路谓词、服务器端重新定价、提示外壳的渲染块。由于没有模型被调用,一个案例大约需要1毫秒的计算,并且完全可重现。完整的纯层级套件(225个案例通过,30个跳过——那些需要真实模型调用的仅在线案例——在2.39秒的墙钟时间内完成,包括进程启动和夹具,平均约10毫秒/案例)在每次变更时运行。为了协调本文中出现的四个计数:锁定的基线是238 = 225个逐层级纯案例 + 13个端到端L1_legacy案例,后者由基线跟踪,但在单独的遗留通道中运行,而非逐层级纯运行器。纯运行器pytest还*收集*了30个仅在线变体(需要真实模型调用的案例),并在纯模式下*跳过*它们;这些不属于238个案例的基线。因此纯运行报告“225通过,30跳过”,而锁定的基线是238。
#### 锁定、覆盖率诚实的基线。
一个冻结的基线记录每个切片的(总数、通过数、通过率、失败ID);当前的基线是23个切片、238个案例,通过率为100%。至关重要的是,零案例的切片报告为`rate: null`(未覆盖),*绝不*报告为`1.0`——因此绿色聚合无法掩盖一个未执行的层级。当前基线标记了4个未覆盖切片(L2_routing、L4_memory、L4_personalization、L4_reflexion)和2个低N切片,精确揭示了套件尚未门控的位置。任何拉取请求都会与此基线进行比较;逐切片通过率下降即阻止合并。
#### 覆盖率诚实作为测试充分性准则。
`rate: null`而非`1.0`的规则,用ML测试的术语(Zhang et al., 2020)来说,是一个刻意的*测试充分性*准则:一个层级只有在有至少1个执行案例时才算“充分测试”,并且套件必须*报告*逐层级的充分性,而不是将其聚合掩盖。大多数聚合指标隐式地为未测试行为赋予满分(仅对存在的案例求平均);我们的指标分配`uncovered`,因此标题分数永远不能通过*移除*或从不编写测试而上升。我们将未覆盖切片的数量视为测试套件本身的一类质量信号,在每次运行时报告(算法见列表1)。
列表1:每次PR的门控和一个纯模式断言(简化自apps/eval/lumi_eval/)。不调用LLM;切片通过率低于基线则阻止合并,新出现的未覆盖切片本身即为失败。
```
# 每次PR的门控
base = load_locked_baseline() # {slice: (total, passed, rate|null)}
cur = run_pure_suite() # ~225 cases, no LLM, ~2.4s
for s in all_slices:
if base[s].rate is None: # 覆盖率诚实:绝不为0案例记分
if cur[s].total == 0: continue # 仍然未覆盖(跟踪,但不是绿色)
elif cur[s].rate < base[s].rate: # 任何逐切片回归...
block_merge(s, base[s].rate, cur[s].rate) # ...阻止PR
# 一个纯模式断言(L4 safety 重新定价),无模型调用
observed = reprice(cart, tenant.pricebook) # 确定性
assert observed.total_cents == case.expected_total_cents
assert observed.rejected_skus == case.expected_rejects
```
表2:完整的层级隔离切片分类体系(全部23个切片;计数来自锁定的基线,各列之和为238个案例)。零案例切片报告为未覆盖(rate: null),绝不报告为100%;两个低N切片(L4_health, locale_fidelity)被标记为需要扩展。
## 4 通过回归注入进行验证
为了测试逐切片门控是否真正*定位*回归,我们注入受控的单层级故障。每个注入会对恰好一个非安全层级的入口点进行猴子补丁,替换为退化的实现,重新运行完整的纯模式套件,并记录聚合通过率的变化与对应切片变化之间的对比。测试工具会自我验证每个注入是否生效(无操作的补丁会被丢弃,从不报告)。*不编辑红色代码表面*:注入只影响本体解析、重格式化器、升级和意图信号——绝不涉及安全验证器、定价、提示或迁移。(相同方法也用于安全切片;我们故意不退化安全代码,即使是在记忆中。)该实验是一个单独的脚本(eval/experiments/p2_regression_injection.py)。一个诚实的测试工具细节很重要:每次完整的套件运行都基于一个*全新构建的*运行时。跨运行重用同一个运行时会泄漏订单存储状态——例如,在一个运行中由`create_order`案例创建的订单会残留到下一个运行中。相似文章
停止在不公开执行框架的情况下比较LLM智能体
这篇立场论文认为,在长期跨度的LLM智能体任务中,执行框架(即围绕语言模型的上下文构建、工具交互、编排和验证的基础设施层)往往比模型本身更能决定性能,而当前的基准测试错误地将框架层面的提升归因于模型改进。它提出了一种框架感知的评估框架,包含披露标准和方差分解协议。
构建了一个 LLM 在结构上被禁止生成最终输出的 Agent,寻求反馈以及愿意尝试“攻破”它的人
作者描述了一个基于 LangGraph 构建的 AI Agent,旨在复现生产环境中的 Python 崩溃问题。其独特之处在于架构设计:LLM 负责规划行动,而确定性 Python 函数则生成最终测试代码,以确保可靠性。
FactoryLLM: 一个用于在智能工厂中评估LLM的安全开源AI试验场
FactoryLLM是一个开源AI试验场,用于评估智能工厂故障诊断中基于LLM的RAG模型,支持本地LLM和双重评估指标。一项包含三个LLM的案例研究显示,在来自600页跨机器文档的30个维护查询中,接地性得分均超过0.88。
LLM代理的一致性如何?在多步骤工具调用流程中测量行为可重现性
本文系统性地测量了LLM代理在多步骤工具调用流程中的行为可重现性,涉及1140条轨迹,发现了'结构一致性,参数变异性'的模式:代理可靠地按相同顺序选择工具,但参数有所不同,并且结构一致性能够预测任务的成功。
当智能体框架一半是非确定性的,你如何实际测试它?
关于测试包含非确定性组件的AI智能体框架所面临的挑战的讨论,探讨了黄金输出差异比较和使用LLM作为评判者等方法,同时质疑这些方法的有效性。