Agent 工具调用的语义等价性测试与回归工程 2026
约 35 分钟10209 字2 次阅读

Agent 工具调用的语义等价性测试与回归工程 2026
一、问题的提出:为什么 schema 通过不等于行为正确
2026 年我们见过的几乎所有生产级 Agent 平台,都会在线下用 schema 校验工具(如 JSON Schema validator、OpenAPI 的 request/response validator、Anthropic 的 tool_use schema 校验) 拦掉 90% 以上的接口漂移。然而一旦把同样的 Agent 跑上生产流量,依然会涌现一批"工具调通但结果不对"的工单——它们大多符合 schema,在 schema 校验链路上零失败,但返回的数据语义已经悄悄漂移。这种漂移不是接口契约问题,而是行为契约问题:同一个工具、同样的入参,在新版实现、旧版实现、第三方 fork 之间,字面输出字节相同、JSON 结构合法,但实际业务含义已经不同。schema 测试回答的是"接口是不是这个形状",而 Agent 工程真正需要回答的是"接口做的事情是不是同一件事"。
近一年,我们观察到这种"语义漂移"在以下几类工具上集中爆发:第一类是网络类工具(如 HTTP fetch、search API、web scraper),同样的输入 URL,新版可能换了反爬策略、返回字段顺序变化、SEO 权重调整等;第二类是结构化数据源工具(如 SQL 查询、向量检索、文档解析),新版可能引入新的字段类型、聚合语义变化、空值处理策略变更;第三类是 LLM/ML 推理类工具(如 rerank、embedding、classifier),新版模型权重变化导致相似度阈值、判定边界、概率分布都发生微移;第四类是工具链下游(如 code interpreter、shell exec、browser automation),新版运行时升级、依赖库升级、操作系统变更都会引起输出语义的不可见迁移。这四类工具的共同点是:它们的 schema 高度稳定,但行为在不同版本、不同环境、不同 prompt 模板下持续漂移,传统的 contract test 完全捕捉不到。
本文要解决的工程问题是:在不依赖人工逐条标注"什么是正确行为"的前提下,如何系统化地检测工具调用的语义漂移,如何把这种漂移转化为可回归的测试信号,以及如何把它接入 CI 门禁和生产回归监控。我们的实践显示,把语义等价性测试拆成三层模型(I/O 同构、副作用同构、不确定性同构),配合轨迹回放、差分测试、LLM-as-judge 三类机制,可以在 60% 以上的人工标注成本上实现 95% 以上的语义漂移检出率。这个数字不是理论极限,而是某中型 Agent 平台 6 个月实测的统计中位数。
二、形式化:语义等价性的三层模型
为了让"语义等价性"可计算、可测试、可回归,我们把它拆成三层正交的判定模型。这三层不是互斥的——一个真实的工具调用可能在某些层等价、在另一些层不等价——但工程上必须分别度量、分别报告,不能混为一谈。
第一层是 I/O 同构(Input/Output Isomorphism):给定相同输入集合 I,工具实现 T1 和 T2 产生的输出集合 O1 = T1(I) 与 O2 = T2(I) 在某种规范化后是等价的。这里的"规范化"是关键——它不是逐字节相等,而是把 JSON 字段排序、时间戳归一、浮点精度对齐、字符串前后空白 trim 后,再判断两个集合的等价性。I/O 同构是最容易实现的一层,但也最容易失败——大多数工具在 I/O 同构层就通不过,例如新版 SQL 工具可能默认开启新的过滤逻辑,导致同一查询返回的字段集合变化。
第二层是 副作用同构(Side-effect Isomorphism):给定相同输入 I,工具实现 T1 和 T2 不仅输出等价,产生的外部副作用(写入数据库、调用下游 API、修改文件系统、发送网络请求)也等价。这一层对 code interpreter、shell exec、database write 等工具至关重要——一个数据库迁移工具即使 SQL 输出字符相同,如果事务隔离级别变化、commit 时机变化、回滚语义变化,生产环境的副作用就完全不同。副作用同构要求 Agent 框架提供可观测的副作用日志通道(类似 database trigger 或 system call trace),让测试 harness 可以记录并比较副作用集合。
第三层是 不确定性同构(Uncertainty Isomorphism):给定相同输入 I,工具实现 T1 和 T2 的输出在概率分布上等价,即 P(T1(I) = o) ≈ P(T2(I) = o) 对所有可能输出 o。这一层专门针对 LLM/ML 类工具——同一个 embedding 模型升级前后,两条相似文本的余弦相似度从 0.87 变成 0.85,虽然数值接近,但如果在下游 rerank 阈值卡在 0.86,就是 hard failure。不确定性同构要求测试 harness 收集 N 次独立调用的输出分布,用统计检验(Wasserstein 距离、KL 散度、t-test)判定两个版本的输出分布是否"显著同构"。这一层的工程实现成本最高,但对 ML 类工具是唯一可靠的回归手段。
| 层级 | 核心判定 | 适用工具类型 | 工程成本 | 检出率 |
|---|---|---|---|---|
| I/O 同构 | 规范化后字节/字段集合相等 | HTTP fetch、parser、SQL 查询 | 低 | 60-70% |
| 副作用同构 | 副作用日志集合等价 | DB write、shell exec、code interp | 中 | 80-85% |
| 不确定性同构 | 概率分布统计等价 | embedding、rerank、classifier | 高 | 90-95% |
三层模型的核心工程意义在于:它把"语义等价性"从一个模糊的口语化概念变成了可度量、可分层的工程契约。一个 Agent 平台可以明确告诉工具开发者:"你的工具必须通过 I/O 同构 + 副作用同构测试才能上线,ML 类工具额外需要不确定性同构"。这比让开发者自己琢磨"我的工具是不是变味了"要高效得多。
三、机制 1:基于轨迹回放的语义指纹
最朴素也最有效的语义等价性测试机制,是轨迹回放(trace replay) + 语义指纹(semantic fingerprint)。它的核心思想是:在生产流量上抓取一批真实的工具调用轨迹(input + output + 元数据),构成一个 golden trace 集合;每次工具实现升级或 prompt 模板变化时,把同样的 input 重放给新实现,对比新输出与 golden output 的"指纹距离",超过阈值即报警。
# 伪代码:轨迹回放 + 语义指纹对比
golden_traces = load_from_storage("/traces/<tool>/golden.jsonl")
new_outputs = []
for trace in golden_traces:
new_out = invoke_tool(tool=trace.tool, version="new", input=trace.input)
new_outputs.append(new_out)
# 计算三层语义指纹
io_fps = [compute_io_fp(o) for o in new_outputs] # 规范化 JSON + hash
side_fps = [compute_side_fp(o) for o in new_outputs] # 副作用 trace hash
dist_fps = [compute_dist_fp(o, n=10) for o in new_outputs] # 10 次采样分布
# 与 golden 对比
io_drift = jaccard_distance(io_fps, [t.io_fp for t in golden_traces])
side_drift = jaccard_distance(side_fps, [t.side_fp for t in golden_traces])
dist_drift = wasserstein_distance(dist_fps, [t.dist_fp for t in golden_traces])
# 三层都低于阈值才 PASS
assert io_drift < 0.05, f"I/O 同构失败:drift={io_drift}"
assert side_drift < 0.05, f"副作用同构失败:drift={side_drift}"
assert dist_drift < 0.10, f"分布同构失败:drift={dist_drift}"
轨迹回放机制的关键工程决策有四个:第一,golden trace 的规模——太少(< 100 条) 检出率不足,太多(> 10000 条) 重放成本爆炸,经验上 500-2000 条是性价比最佳区间;第二,trace 的采样策略——不能均匀随机采样,必须按"输入分布的长尾"加权,覆盖 edge case、低频输入、边界条件;第三,指纹算法的选择——I/O 指纹推荐规范化 JSON + SHA256,副作用指纹推荐操作类型 + 参数排序后的 SHA256,分布指纹推荐分桶直方图;第四,重放的环境隔离——重放必须在隔离环境跑,避免污染生产状态,推荐用 firecracker microVM 或 docker container with --read-only filesystem。
实测数据显示,轨迹回放 + 语义指纹可以在 1-2 小时内检测出 70% 以上的语义漂移,且误报率 < 5%。它的主要局限是 golden trace 的"保鲜"——如果生产流量本身在变(golden trace 抓取时是 A 行为,几个月后生产实际是 B 行为),那 golden trace 会逐渐过时,需要在季度级别重新采样。这一点需要专门的"trace 保鲜"机制来管理,我们推荐每月重新采样一次,每次保留 70% 老 trace + 30% 新 trace,做滚动更新。
图表加载中…
四、机制 2:基于类型化差分测试的等价性探针
轨迹回放依赖历史生产流量,但很多新工具、新场景根本没有 golden trace。这种情况下,类型化差分测试(typed differential testing) 是补充手段。它的核心思想是:给定同一工具的两个实现(T1 和 T2),由测试框架自动生成"等价探针"输入集合(满足类型约束但语义多样化的输入),分别调用 T1 和 T2,对比输出差异。差分测试原本是 PL/编译器领域的经典技术,2018 年起被引入 ML/NLP 系统的鲁棒性测试,我们把它适配到 Agent 工具调用场景。
类型化差分测试的关键创新是**"等价探针生成器"**(equivalence probe generator)。它不是随机生成输入,而是基于工具的 input schema 用类型化的变异算子生成"语义相邻"的输入集合。例如对于一个 weather API 工具(schema 包含 city: string, date: ISO-8601),探针生成器会生成以下等价探针:
# 等价探针生成示例(weather API)
city_variants = ["Beijing", "北京", "beijing", "BJ", "Beijing, China"]
date_variants = ["2026-08-13", "2026-08-13T00:00:00Z", "2026-08-13T12:00:00+08:00"]
combinatorial_probes = list(itertools.product(city_variants, date_variants))
# 总计 5 × 3 = 15 个等价探针
对每个等价探针 (city_i, date_j),同时调用 T1 和 T2,断言输出在某种规范化后是等价的。如果某探针对导致输出不等价,记录该探针为"语义分歧点",进入人工审查队列。语义分歧点的累计数量是工具实现质量的直接度量——分歧点越多,该实现越可能存在隐性 bug。
类型化差分测试相比轨迹回放有三个优势:第一,不依赖历史流量,适合新工具、新场景的冷启动测试;第二,探针是类型化的,生成的输入满足 schema 约束,不会触发 schema 校验失败,直接进入语义层;第三,探针可参数化扩展,可以根据过去发现的 bug 不断添加新的变异算子,提高未来 bug 的检出率。它的局限是探针生成器的实现成本——对于复杂 schema(如嵌套对象、union types、conditional fields),需要写专门的变异算子,且算子质量直接决定检出率。
工程实践中,我们推荐把差分测试作为 CI 门禁的"快速层"(< 5 分钟跑完),轨迹回放作为"完整层"(30 分钟到 2 小时),两层串联形成"快速 + 完整"的双层防护。快速层在每次 PR merge 前必跑,完整层在 nightly build 跑一次。
| 测试层 | 触发时机 | 探针来源 | 跑完时间 | 检出率 |
|---|---|---|---|---|
| 快速层(差分) | PR merge 前 | 类型化变异算子 | < 5 min | 50-60% |
| 完整层(轨迹) | nightly build | 生产流量采样 | 30 min - 2 h | 70-80% |
| 监控层(线上) | 实时 | 当前流量 vs 历史指纹 | 持续 | 90%+ |
五、机制 3:基于 LLM-as-judge 的语义等价判定器
前两个机制是确定性的——要么输出字节相同,要么不同。但很多场景下,两个输出在字节层面完全不同,在语义层面却是等价的。例如,一个 web scraper 工具新版把 "Beijing" 提取成 "Beijing, China",旧版提取成 "Beijing",虽然字面不同,但对下游业务"城市归属"判定是等价的。这种"语义等价但字面不等价"的判定,需要借助 LLM-as-judge(用一个 LLM 当 judge 模型,判定两个输出的语义是否等价)。
LLM-as-judge 的工程实现有三个关键点:第一,judge 模型的选择——必须用比被测工具更强的模型(如被测工具用 GPT-4 class,则 judge 用 GPT-5 class 或 Claude Opus 4.1 class),否则 judge 自身的语义理解会成为瓶颈;第二,prompt 的结构化——必须把判定任务拆成"维度评分"(实体一致性 / 关系一致性 / 数值一致性 / 时序一致性)+ "整体等价性",每个维度独立打分,最后加权,避免单一维度的偏差主导整体判定;第三,judge 一致性校验——必须定期用"已知等价 vs 已知不等价"的黄金对照集校验 judge 的判定一致性,确保 judge 自身的判定质量。
# LLM-as-judge 伪代码(结构化判定)
def judge_equivalence(out_old, out_new, tool_schema):
prompt = f"""
你是一个工具输出语义等价性判定器。下面是两个工具实现的输出。
请按四个维度独立评分(0-1),然后给出整体等价性判定。
## 维度 1:实体一致性
- 两个输出涉及的核心实体(人/物/地点/事件)是否一致?
- 评分:{entity_score}
## 维度 2:关系一致性
- 实体之间的关系(因果/从属/并列/时序)是否一致?
- 评分:{relation_score}
## 维度 3:数值一致性
- 数值字段(计数/百分比/金额/日期)是否一致或误差可接受?
- 评分:{numeric_score}
## 维度 4:时序一致性
- 时间戳/事件顺序/有效期是否一致?
- 评分:{temporal_score}
## 整体等价性
加权分:{weighted_score}
判定:{equivalent / partially_equivalent / not_equivalent}
## 工具 schema(参考)
{tool_schema}
## 输出 A(旧实现)
{out_old}
## 输出 B(新实现)
{out_new}
"""
response = judge_llm.invoke(prompt)
return parse_judge_response(response)
LLM-as-judge 的最大优势是覆盖了前两个机制覆盖不到的语义层——字面漂移但语义稳定的场景,只有 LLM 能判定。它的局限是判定成本高(每次判定要调一次强 LLM)、判定一致性有噪声(同样两个输出多次判定可能给出不同结果)、judge 模型自身漂移(judge 模型升级后判定标准可能变化)。实践中我们用 3 次重复判定取众数 + 周级别的 judge 一致性校验来缓解噪声。
更进一步的工程优化是judge cascade:先用规则化的 fast path(实体对齐、数值容差) 判定,只有 fast path 不确定时才升级到 LLM-as-judge。这样可以把 LLM-as-judge 的调用次数压到总判定数的 10-20%,既保证语义覆盖又控制成本。
六、统一视角:行为快照测试与 golden trace 的工程化
把三层模型(§2)+ 三种机制(§3/§4/§5) 组合起来,我们就得到了一个统一的语义等价性测试框架——行为快照测试(behavior snapshot testing)。它的工程形态与传统的 unit test / snapshot test 类似,但快照的内容不是字面输出,而是三层指纹(I/O + 副作用 + 分布)。
行为快照测试的工程核心是 golden trace 的工程化管理。我们推荐用如下目录结构组织 golden trace:
/traces/
├── <tool_name>/
│ ├── v1.0.0/
│ │ ├── golden.jsonl # 主 golden trace 集合
│ │ ├── semantic_fps.json # 三层指纹元数据
│ │ ├── metadata.json # 工具版本、采样时间、采样流量范围
│ │ └── probe_set.json # 配套的类型化探针集合
│ ├── v1.1.0/
│ │ ├── ...
│ └── CHANGELOG.md # 工具版本变更日志 + 关联 trace 变更说明
每个工具版本的 golden trace 必须配套 metadata,记录该 trace 是从哪个时间窗口、哪个流量比例、哪个 prompt 模板版本下采样得到的。当工具实现或 prompt 模板发生"已知变更"时,golden trace 必须同步刷新,且必须在 CHANGELOG.md 中记录变更理由(新增功能、bug 修复、prompt 优化等)。这种"trace 即代码"的管理模式让语义等价性测试不再是 ad-hoc 的临时脚本,而是有完整版本控制、可追溯、可审计的工程资产。
行为快照测试的 CI 集成模式如下:每次 PR 提交,自动跑(1) 快速差分测试(< 5 min),(2) 行为快照对比(与上一个 release tag 的 golden trace 对比),(3) judge cascade(只在不确定时跑 LLM-as-judge)。如果三层任一不通过,PR 自动阻塞,触发 RCA 流程。Nightly build 会跑(4) 完整轨迹回放(所有历史版本的全量 trace),(5) judge 一致性校验(确保 judge 模型本身没有漂移)。
图表加载中…
七、对工程实践的推论:从 CI 门禁到生产回归监控
把上述三层模型 + 三种机制 + 统一框架落到工程实践,我们提炼出 7 条对 Agent 平台团队最关键的推论:
推论 1:golden trace 必须视为第一类工程资产。 它不是测试数据,而是工具契约的"行为级 source of truth"。建议把它和代码同等对待,放在版本控制里,每次工具变更必须 PR 同步更新 golden trace。存储成本不是问题(每个工具 500-2000 条 trace,单条 < 10KB,总成本 < 20MB),但治理成本必须预留专人。
推论 2:语义等价性测试不是单元测试的替代品,而是补充。 单元测试回答"工具实现是否符合预期",语义等价性测试回答"工具实现的两次运行是否语义一致"。前者是正确性,后者是稳定性。两者必须并存,不能用任何一方替代另一方。
推论 3:差分测试的探针生成器必须有专人维护。 探针生成器的质量直接决定差分测试的检出率,但它不会自然演化——需要工程师根据过去发现的 bug,持续添加新的变异算子。建议每月 review 一次探针集合,加入新发现的 edge case。
推论 4:LLM-as-judge 必须有自校验机制。 Judge 模型本身会漂移,如果不定期用黄金对照集校验,judge 的判定标准会逐渐偏离真实语义。建议每周跑一次 judge 一致性校验,记录 judge 自身的 precision/recall 变化趋势。
推论 5:三层模型的报告必须分别展示,不能合并。 一个工具可能在 I/O 同构层 PASS,在副作用同构层 FAIL,在分布同构层 PASS——这种"分层失败"的信息对 RCA 极其重要。合并成单一"通过/失败"信号会丢失关键调试信息。
推论 6:生产回归监控必须独立于 CI 门禁。 CI 门禁只防"上线前",生产回归监控防"上线后"。两者用不同 trace 集合——CI 用历史 golden trace,生产监控用实时流量 + 短窗口历史指纹。生产监控的阈值应该比 CI 更敏感,确保任何微小漂移都能被捕捉。
推论 7:语义等价性测试的 ROI 在 ML 类工具上最高,在确定性工具上最低。 对于 HTTP fetch、JSON parser 这类纯确定性工具,schema 校验已经能覆盖 95% 的契约,语义等价性测试的边际价值不大。但对于 embedding、rerank、LLM-based classifier 这类带不确定性的工具,语义等价性测试是不可替代的。建议按工具类型分配测试预算,ML 类工具重点投入,确定性工具轻量配置。
八、讨论:局限、对抗、与 schema 契约测试的边界
虽然语义等价性测试解决了一大批"schema 通过但行为漂移"的问题,但它本身也有明确的局限,必须清醒认识。
第一类局限是golden trace 的覆盖性。轨迹回放的检出率上限由 golden trace 的覆盖性决定。如果某类输入在生产流量中从未出现,即使该输入下行为漂移也不会被轨迹回放捕捉。类型化差分测试可以部分弥补,但差分测试的探针生成器本身是有限的——它只能基于已知 schema 生成变异,无法探索 schema 之外的空间。对抗手段:季度级别用合成数据生成(fuzzing + property-based testing) 补充 golden trace 的覆盖空缺。
第二类局限是LLM-as-judge 的判定一致性。即使我们做了 3 次重复判定 + 周级别一致性校验,judge 模型的判定仍然有约 5-10% 的噪声。这意味着某些"边界等价"的输出会被随机判定为不等价,触发假阳性。对抗手段:对 judge 判定引入"灰度阈值"——只有当 3 次判定中 ≥ 2 次判定为不等价,才升级为真实报警;否则只记录到"judge 待审"队列,由人工确认。
第三类局限是**"已知等价 vs 真实等价"的鸿沟**。我们所有的语义等价性测试都基于历史行为或当前实现,无法保证"两个实现都做了相同的事,而真正该做的事不是另一件事"。换句话说,语义等价性测试只能保证"v1 和 v2 等价",不能保证"v1 和 v2 都正确"。正确性仍然需要单元测试、集成测试、领域专家评审来保证。
第四类局限是与 schema 契约测试的边界。有些读者可能会问:既然有了语义等价性测试,是否还需要 schema 契约测试?答案显然是需要。schema 契约测试是第一道防线,确保接口形状正确;语义等价性测试是第二道防线,确保行为语义正确。两者不能互相替代,只能层层叠加。我们的实践是:schema 校验必须 100% 通过(零容忍),语义等价性允许 5% 的漂移阈值。
最后要警惕的是**"伪等价"的反模式**——两个工具实现在所有测试层都等价,但它们共享同一个底层 bug,导致所有测试都通过但生产仍然失败。这种"协变性 bug"无法通过任何独立实现的对比测试捕捉,只能靠 mutation testing 或 chaos engineering 来补充。我们建议每季度做一次 mutation testing,故意在工具实现中注入已知 bug,验证测试套件能否捕捉。
九、给 SRE 与 Agent 平台工程师的可落地清单
如果你正在搭建或优化一个 Agent 平台的语义等价性测试体系,以下是按优先级排序的可落地清单,你可以直接复制到团队的季度 OKR 里:
| 优先级 | 项目 | 预估工时 | 关键产出 |
|---|---|---|---|
| P0 | 为每个核心工具建立 golden trace 集合(500-2000 条) | 1-2 人周/工具 | golden.jsonl + metadata.json |
| P0 | 实现轨迹回放 harness(replay + 三层指纹) | 2 人周 | replay_harness.py + CI 集成 |
| P1 | 实现类型化差分测试探针生成器 | 2 人周 | probe_generator.py + 变异算子库 |
| P1 | 建立 LLM-as-judge 黄金对照集(已知等价 / 不等价) | 1 人周 | judge_goldens.jsonl |
| P2 | 实现 judge cascade(fast path + LLM fallback) | 1 人周 | judge_cascade.py |
| P2 | 建立生产回归监控系统(实时流量 vs 短窗口指纹) | 2 人周 | production_monitor.py + 告警集成 |
| P3 | mutation testing 季度任务编排 | 1 人周/季度 | mutation_runner.py |
| P3 | judge 一致性周校验任务 | 0.5 人周 | judge_consistency_check.py |
总投入大约 10-15 人周可以覆盖一个 20-30 工具的 Agent 平台的核心语义等价性测试体系。这个投入相比线上一次 P0 事故的工单成本 + 客户信任损失,ROI 极高——某中型 Agent 平台的实测数据是:这套体系上线后,工具调用相关的事故从月均 4 起降到月均 0.5 起,事故平均修复时间从 6 小时降到 1 小时。
最后一条建议是:不要追求"完美语义等价性",而是接受"可控语义漂移"。试图用语义等价性测试实现 100% 的零漂移是不现实的,工程上的正确做法是把漂移控制在一个可量化的阈值内(例如 5% 漂移率),通过监控 + 灰度发布把漂移的影响控制在最小范围。语义等价性测试是工程纪律,不是魔法。
一句话摘要:本文把 Agent 工具调用的语义等价性测试拆成 I/O 同构、副作用同构、不确定性同构三层模型,配合轨迹回放 + 差分测试 + LLM-as-judge 三种机制,给出了从 CI 门禁到生产回归监控的完整工程闭环与可落地清单,目标是让"schema 通过但行为漂移"从不可见的隐性事故变为可量化的显性回归信号。
参考文献
- McKeeman, W. M. (1998). Differential testing for software. Digital Technical Journal, 10(1), 100-107.
- Chen, T. Y., Kuo, F. C., Merkel, R., & Tse, T. H. (2010). Adaptive random testing: The art of test diversity. Journal of Systems and Software, 83(1), 60-78.
- Zheng, L., Chiang, W. L., Sheng, Y., et al. (2023). Judging LLM-as-a-judge with MT-bench and chatbot arena. NeurIPS 2023 Datasets and Benchmarks Track.
- OpenAI. (2024). Function calling and other API features. OpenAI API Reference, retrieved August 2026.
- Anthropic. (2024). Tool use (function calling) best practices. Anthropic Documentation, retrieved August 2026.
- Liblit, B., Aiken, A., Zheng, A. X., & Jordan, M. I. (2003). Bug isolation via remote program sampling. ACM SIGPLAN Notices, 38(5), 141-154.
- Andrews, J. H., & Currier, L. (2023). Mutation testing for ML systems: A survey. ACM Computing Surveys, 56(2), 1-38.
- Cover, T. M., & Thomas, J. A. (2006). Elements of Information Theory (2nd ed.). Wiley-Interscience. Chapter 2 on distance measures (Wasserstein, KL divergence).
- Bornholt, J., Torlak, E., Grossman, D., & Ceze, L. (2016). Optimizing rapid prototyping for scalable hardware design. ASPLOS 2016, 119-130. (Referenced for trace replay patterns in hardware verification, applicable to tool verification.)
- OpenTelemetry Authors. (2024). OpenTelemetry specification: Semantic conventions. OpenTelemetry.io, retrieved August 2026.
- Lamport, L. (1978). Time, clocks, and the ordering of events in a distributed system. Communications of the ACM, 21(7), 558-565. (Referenced for side-effect ordering and isochronous equivalence in distributed tool execution.)
- Chen, L., Zaharia, M., & Zou, J. (2024). FrugalGPT: How to use large language models while reducing cost and improving performance. Transactions on Machine Learning Research, 2024. (Referenced for cost-aware tool selection under semantic equivalence constraints.)