← 返回 2026-10-19

EvoWeb:面向演化式 Web 应用的编码智能体评测基准 EvoWeb: A Benchmark for Coding Agents on Evolving Web Applications

David Nukrai, Bar Alon, Nativ Levy, Ido Andrew Atad, Ido Cohen, Itamar Zimerman, Lior Wolf, Eli David, Ilan Naiman 📅 2026-10-12 👍 7 2026-11-11 18:30
LLM评测 Web应用生成 基准测试 编码智能体 长程交互

用320个带DAG依赖的累积请求,评测编码智能体持续扩展Web应用的集成与保持能力

前置知识

编码智能体(Coding Agent)与 Scaffold

编码智能体是让大模型以循环方式工作的系统:读代码库、改文件、执行命令、观察输出、再迭代修改,直到完成任务。Scaffold(脚手架)是承载这个循环的框架,如 OpenHands,负责提供工具接口、管理上下文、控制轮数预算。论文中每请求最多 20 个 agent turn,仓库与对话历史跨请求持久化。

EvoWeb 评测的对象是智能体而非单次模型调用,理解 turn、持久仓库、上下文压缩这些 scaffold 概念,才能读懂实验设置与'生成努力'(轮数、token 数)的分析。

WebGen-Bench 与浏览器功能测试

WebGen-Bench 是从零生成完整 Web 应用的基准:每个应用规格配一组测试,每个测试形如'执行某个 UI 操作 + 期望某个结果',由 WebVoyager 浏览器智能体在真实浏览器里执行并判分,与人类标注的一致性为 86–94%。EvoWeb 直接复用它的 101 个应用规格作为种子和它的评测协议。

EvoWeb 的种子应用、测试格式、打分方式(YES/PARTIAL/NO)全部继承自 WebGen-Bench,理解前者是读懂后者构造管线的前提。

浏览器智能体(WebVoyager)与 Set-of-Marks

WebVoyager 是端到端网页操作智能体:把页面截图转成 Set-of-Marks 表示(给可交互元素打标签),用 Selenium 实际执行点击、输入等操作,最后根据观察到的结果返回 YES、PARTIAL 或 NO。EvoWeb 用更强的计算机操作模型 Sonnet 4.6 作为其骨干。

EvoWeb 的所有打分都出自这个浏览器判分器,需要知道它只支持点击-输入类交互(论文因此禁止 hover、拖拽、键盘导航等测试),才能理解测试设计的约束与判分误差来源。

功能依赖 DAG

有向无环图,节点是请求引入的功能,边 $i \to j$ 表示请求 $j$ 若缺少请求 $i$ 引入的功能就无法正确实现。节点的深度指指向它的最长依赖链长度,入度指它直接依赖的早期请求数。EvoWeb 要求每条序列至少有一条深度 $\ge 3$ 的链,且 DAG 对被测智能体隐藏。

DAG 是本文的核心结构:集成测试沿 DAG 边出题,'依赖越深越难'的分析也以深度和入度为自变量。

LLM-as-Judge 与自我偏好

用大模型充当评判者给其他模型输出打分。已知风险是评判者可能偏爱自己(同家族)模型的输出,因此严谨的基准要做换评判者的鲁棒性实验,并用人类标注校验判分一致性。

EvoWeb 的判分器是 Sonnet 4.6,而它同时也是被测模型之一;论文用另外 3 家厂商的评判者重评全部运行并做 300 例人类盲测(精确一致率 87.7%,$\kappa=0.72$),证明排名不是评判者造成的。

阈值曲线下面积(AUC)积分指标

把某个随阈值 $t$ 变化的曲线对 $t$ 积分,得到一个不依赖具体阈值选择的汇总分数,这一做法源自选择性预测(selective prediction)等领域的评估传统。

Grade 与 Survival 的定义正是 $\int_0^1 Q(t)\,dt$ 与 $\int_0^1 S(t)\,dt$,其中 $t$ 是'用户容忍度'阈值;不理解 AUC 思路就看不懂主指标为何这样设计。

研究动机

真实世界的 Web 开发很少一次成型:用户先让 Bolt.new、Lovable 这类系统搭出应用,之后不断回来追加功能、修改行为,后续请求往往要依赖此前请求引入的状态、接口和行为——新功能可能单独看没问题,一接入早期功能就失效,甚至破坏原本正常的行为。但 2025–2026 年的 Web 生成基准几乎都在评'从零单请求生成':WebGen-Bench、WebCoderBench、Vibe Code Bench 都只给一条高层规格;WebGen-Agent 和 Asuka-Bench 的多轮交互只是对着固定规格或既有意图反复细化;软件工程侧的 SlopCodeBench、EvoCode-Bench、StaminaBench 虽然研究多请求序列,但面向开发者级 SWE 任务,且用 fail-stop(一次失败即终止)或逐请求独立打分这两种极端用户模型;Web-Bench 的任务则是写死文件名、组件类名和布局尺寸的规格书。没有任何现有基准回答:智能体能否在自己持续构建的应用上可靠地做增量开发——新功能既用上早期功能,又不破坏既有行为。

本文的目标是本文要构建一个专门评测'演化式 Web 应用开发'的基准,并回答一个中心问题:编码智能体在一连串相互依赖的用户请求下,能多可靠地扩展一个持久应用、让不同阶段引入的功能协同工作、同时保持既有行为不回归?具体目标有四:其一,应用与后续请求要有真实依据,功能从真实在线产品中提取而非模型想象,使应用沿可信的产品路径生长;其二,请求序列要长程且相互依赖,最终形成 32 个应用 × 每应用 10 个请求共 320 个累积请求;其三,评测要用当代多轮智能体脚手架在真实浏览器中进行,且测试必须能区分三种能力——实现新请求的功能、交付早前请求的功能、跨请求组合功能;其四,序列评测必须处理'中间失败后用户去留'的问题,指标要覆盖从'失败即放弃'到'永远继续'的整个用户谱系,而不是武断选定一个停止规则。

与已有工作不同的是,独特切入角度有三。第一,把请求间的功能依赖显式建模为有向无环图(DAG):边 $i \to j$ 表示请求 $j$ 没有请求 $i$ 的功能就无法正确实现,要求每条序列含至少一条深度 $\ge 3$ 的依赖链和至少 3 个后续依赖,且 DAG 只用于构造与分析、对被测智能体完全隐藏——这不同于 Asuka-Bench 用 DAG 组织评测标准的做法。第二,每个后续请求固定配 5 个浏览器测试:3 个测新功能、1 个沿 DAG 边测与早期功能的集成、1 个向后重测早期功能,首次把'新功能/保持旧功能/跨请求组合'三种能力分离打分。第三,把'用户容忍度'而非系统属性作为扫描变量:用户在请求得分低于阈值 $t$ 时弃用应用,对 $t \in [0,1]$ 积分得到 Grade 与 Survival,不预设停止规则;$t=1$ 与 $t=0$ 恰好复现既有基准的 fail-stop 与逐请求独立两种范式。此外,所有请求一律用产品语言描述行为、绝不规定实现细节,并以嵌入请求的种子数据保证精确值可测,与 Web-Bench 的开发者规格形成鲜明对照。

核心方法

整体直觉是:要测'能不能把应用越做越大',就得让智能体在自己的代码库上接一连串真实用户会提的请求,再用浏览器逐个验收中间产物。技术路线分四步。(1)Grounding:从 WebGen-Bench 的 101 个应用规格中随机抽 40 个作种子,由带网页搜索与抓取工具的 Sonnet 4.6 检索智能体为每个种子找 2 个用途相似的真实网站、各提取 3–4 个种子之外的亮点功能(全程 202 个站点、801 个特征)。(2)生成:Fable 5 生成器依据这些真实功能设计 9 个后续特征,拓扑排序为请求 2–10,同时写出依赖 DAG、每请求 5 个验证测试、全局规则和钉死的种子数据;每个请求还须落进四种特征原型之一。(3)验证与修复:独立的 LLM 验证器按 12 条规则审计,违规给一次修复机会,仍不合格即丢弃;40 个候选淘汰 8 个,剩 32 条轨迹再经人工校准。(4)评测:14 个模型在 OpenHands 脚手架中逐请求实现,仓库与对话历史跨请求持久化、每请求最多 20 轮;WebVoyager(Sonnet 4.6 骨干)在隔离的无头浏览器中执行 5 个测试并打 YES/PARTIAL/NO。三个设计原则贯穿始终:真实(grounding 于真实产品)、累积(长程相互依赖)、智能体化(多轮交互式脚手架)。

核心创新是'依赖结构 + 分层测试 + 容差积分'三位一体的评测设计。与已有工作的本质区别在于把'演化'本身当作被测对象:WebGen-Bench 只测单请求生成(选模板再生成两阶段),Asuka-Bench 的迭代是向预定义规格收敛,StaminaBench 等 fail-stop 范式把序列信息全部丢弃。具体地:其一,DAG 边要求'实质性'依赖——仅读同一份底层数据不算,必须是缺了早期功能后续请求就无法正确工作,且依赖要'公平',只经由早期请求明确要求的用户可见行为,保证早期请求的任何合法实现都能支撑后续请求;其二,每请求 5 测试的固定结构(3 功能 + 1 集成 + 1 向后)中,集成测试沿一条 DAG 边行动于早期功能并验证其效果正确出现在新功能里,直接测量跨请求组合;向后测试从早期请求逐字复制,用于近似回归检测;其三,引入阈值 $t$ 下的门控 $g_r(t)=\mathbf{1}[\min_{j \le r} a_j \ge t]$ 后,交付功能 $Q(t)=\frac{1}{R}\sum_r g_r(t)\,a_r$ 与存活 $S(t)=\sum_r g_r(t)\,\mathbf{1}[a_r \ge t]$ 对 $t$ 积分得 Grade 与 Survival,闭式为 $\text{Grade}=\sum_r \frac{1}{R} a_r m_{r-1}$($m_r=\min_{j \le r} a_j$),把'用户何时弃用'从评测假设变成被积的连续谱系。

方法步骤详情

完整流程如下。第一步 grounding(输入:种子规格;输出:每种子 2 站点 × 3–4 特征的结构化记录):检索智能体执行查询→选站→抓取提特征→落记录四步,特征须可在单页应用实现、属渐进增强、难度有梯度。第二步生成(输入:build prompt + grounding 记录;输出:9 个请求、DAG、45 个测试、全局规则、种子数据):生成器先想象应用长成的大产品,将 9 个特征拓扑排序为请求 2–10;每请求必须属于四种原型之一——derived state(112 个,39%)、multi-page workflow(77 个,27%)、interactive tool(67 个,23%)、design restyle(32 个,11%);第 2 或 3 个请求钉入 5–8 条精确记录的种子数据,使后续 derived-state 请求能出精确值测试;每条流引入 3 条此后不再复述的全局规则,靠后续测试静默检查。第三步验证:验证器只读生成序列,审计 12 条规则(测试结构、DAG 合法性与公平性、用种子记录重算精确值、实现无关性、可行性等),失败给一次修复。第四步评测:智能体逐请求修改持久仓库、请求间无任何测试反馈;每请求后浏览器判分器执行 5 个测试,分数 $s_{r,k} \in \{0, \tfrac{1}{2}, 1\}$,请求精度 $a_r = \frac{1}{n_r}\sum_k s_{r,k}$,再由式 (1)(2) 计算 $Q(t)$、$S(t)$ 及 Grade、Survival。

技术新颖性

技术新颖性可从四个维度分析。数据构造上,'真实产品 grounding + 依赖 DAG + 钉死种子数据'的组合是新的:grounding 使请求不至于坍缩成同一批通用功能——消融实验显示 4-gram 重叠降低 29%,三名不同厂商的评判者盲测偏好 grounded 版本 69.2–74.2%(95% 区间均高于 50%);钉死 5–8 条记录让 derived-state 请求可出精确值测试,杜绝含糊判分。测试设计上,集成测试首次直接沿依赖边测量功能组合,此前工作要么没有依赖结构、要么只是顺序排列;测试强制实现无关(只引用请求明确要求的元素与值),并针对浏览器判分器的能力约束了交互形式(禁 hover/拖拽/键盘,约 6 步内完成,所需数据一律以种子形式嵌入请求而非让判分器现场搭建)。指标上,容差积分把序列评测中被回避的'失败后去留'显式建模:端点 $Q(1)$ 与 $Q(0)$ 恰好复现 fail-stop 与逐请求独立两种既有范式,积分后成为连续谱系上的汇总,且论文证明任意加权下分数必落在 $[Q(1), Q(0)]$ 之间。协议上,全程无请求间反馈,使每个请求同时考察'维持已有成果'的能力,这是与允许失败重试的 Web-Bench 的关键差异。

EvoWeb pipeline. (A) Construction: for each seed prompt, features from two similar real websites are used to plan a dependency DAG and write ten requests, which are automatically verified, repaired, and human-curated. (B) Evaluation: a coding agent solves them one at a time, a browser agent runs five tests after each, and scores are averaged over user-tolerance thresholds.
Figure 1: EvoWeb pipeline. (A) Construction: for each seed prompt, features from two similar real websites are used to plan a dependency DAG and write ten requests, which are automatically verified, repaired, and human-curated. (B) Evaluation: a coding agent solves them one at a time, a browser agent runs five tests after each, and scores are averaged over user-tolerance thresholds.
Requests within a flow form a dependency DAG. Request 1 builds the base app and requests 2–10 add grounded features; an edge means the later feature cannot work unless the earlier one was built correctly. Colours mark the feature archetypes (App. D).
Figure 2: Requests within a flow form a dependency DAG. Request 1 builds the base app and requests 2–10 add grounded features; an edge means the later feature cannot work unless the earlier one was built correctly. Colours mark the feature archetypes (App. D).
Domain coverage of the 32 flows. Application-type distribution of our 32 flows (right) against all 101 WebGen-Bench specifications (left), sharing one colour per class.
Figure 5: Domain coverage of the 32 flows. Application-type distribution of our 32 flows (right) against all 101 WebGen-Bench specifications (left), sharing one colour per class.

实验结果

在 320 个请求上评测 14 个模型,核心发现有六。其一,头部与尾部差距巨大:Fable 5 以 Grade 0.694 居首(Survival 7.32/10),Kimi K3 以 0.684 紧随(0.010 差距在三次运行的噪声内,论文不做排序),GPT 5.6 Sol 0.622,最弱的 Qwen3.5 35B-A3B 仅 0.162;最佳模型也只能存活约 7.3/10 个请求。其二,跨请求集成是最薄弱环节:按测试类型分别计算 Grade,所有模型无一例外呈 backward > functional > integration 的次序,模型平均从 0.580 降至 0.550 再到 0.510。其三,依赖越深越难:对请求 8–10,精度随 DAG 深度和入度单调下降(图 4 中所有模型的最小二乘拟合线斜率为负)。其四,运行时可靠性随演化恶化:runtime error 率与 Grade 的 Spearman $\rho=-0.72$(build error 仅 $-0.52$),且错误率随请求序号递增;Qwen3.5 35B-A3B build 失败仅 2.5% 但 runtime 错误高达 36.6%,说明模型更能保住'能编译'而非'能运行';工具调用错误与成绩几乎无关($\rho=-0.06$)。其五,高分来自效率而非堆算力:Fable 5 每请求仅 4.7 轮、每条轨迹约 100K 输出 token(少于 Sonnet 4.6 的一半),尽管其单样本成本最高($14.40)。其六,请求语言有影响:把请求译成法/德/中/印地/希伯来语后,只有 Sonnet 4.6 稳定(波动 $\le 0.03$),GLM 5.2 希伯来语反升至 0.602 但德语跌至 0.445,GPT 5.6 Luna 法语 0.198 远低于英语 0.277。

Comparison with related benchmarks. Fail-stop and Independent scoring are the t=1 and t=0 extremes of our delivered functionality Q(t).
Table 1: Comparison with related benchmarks. Fail-stop and Independent scoring are the t=1 and t=0 extremes of our delivered functionality Q(t).
Grade by request language. First, second.
Table 3: Grade by request language. First, second.
Grade by test type. Grade computed separately for each test type.
Table 4: Grade by test type. Grade computed separately for each test type.
App-side failure modes (% of each model's failed tests).
Table 5: App-side failure modes (% of each model's failed tests).
A Web-Bench task (React project, task 2) and an EvoWeb request (link-in-bio site, request 6 of 10).
Table 6: A Web-Bench task (React project, task 2) and an EvoWeb request (link-in-bio site, request 6 of 10).
Human validation of the evaluator on 300 executions.
Table 10: Human validation of the evaluator on 300 executions.
Overall confusion matrix of the human validation (rows: human score; columns: benchmark score).
Table 11: Overall confusion matrix of the human validation (rows: human score; columns: benchmark score).
Model performance at the endpoints of the tolerance range and averaged across thresholds.
Table 13: Model performance at the endpoints of the tolerance range and averaged across thresholds.
Grade of each agent under four judge models; Sonnet 4.6 is the default judge.
Table 14: Grade of each agent under four judge models; Sonnet 4.6 is the default judge.
Performance across tolerance levels and output length. (a, b) Tolerance sweeps for the closed-source models: delivered functionality Q(t) and request survival S(t) as a function of tolerance t; the area under each curve gives the Grade and Survival in Table 2. (c) Cumulative output tokens per request by agent turn.
Figure 3: Performance across tolerance levels and output length. (a, b) Tolerance sweeps for the closed-source models: delivered functionality Q(t) and request survival S(t) as a function of tolerance t; the area under each curve gives the Grade and Survival in Table 2. (c) Cumulative output tokens per request by agent turn.
Accuracy by position in the dependency DAG. Accuracy of requests 8–10 as a function of (a) the request's depth in the DAG and (b) its in-degree. Markers show the mean accuracy per value (area proportional to number of requests); lines are least-squares fits over all requests.
Figure 4: Accuracy by position in the dependency DAG. Accuracy of requests 8–10 as a function of (a) the request's depth in the DAG and (b) its in-degree. Markers show the mean accuracy per value (area proportional to number of requests); lines are least-squares fits over all requests.
Tolerance sweeps for the open-source models. Left: delivered functionality Q(t) as a function of the tolerance threshold t. Right: request survival S(t). The area under each curve is the Grade and Survival reported in Table 2.
Figure 6: Tolerance sweeps for the open-source models. Left: delivered functionality Q(t) as a function of the tolerance threshold t. Right: request survival S(t). The area under each curve is the Grade and Survival reported in Table 2.
查看结构化数据
任务指标本文基线提升
演化式 Web 应用开发(32 应用 × 10 累积请求) Grade(容差积分交付功能,0–1) Fable 5:0.694(最高;Kimi K3 0.684 次之) Sonnet 4.6:0.607;最弱 Qwen3.5 35B-A3B:0.162 比同厂 Sonnet 4.6 高 +0.087(约 14%)
轨迹存活长度 Survival(可存活请求数,满分 10) Fable 5:7.32 Haiku 4.5:4.43;GPT 5.6 Luna:3.12 比 Haiku 4.5 多存活约 2.9 个请求
跨请求集成 vs 新功能/旧功能 分测试类型 Grade(14 模型平均) 集成测试 0.510 功能测试 0.550、向后测试 0.580 集成比向后低 0.070(约 12%),且在全部 14 个模型上次序一致
运行时可靠性 runtime error 请求占比(%) Fable 5:0.5% Qwen3.5 35B-A3B:36.6%(其 build error 仅 2.5%) 最强与最弱相差约 36 个百分点
生成效率 每请求 agent 轮数 / 轨迹输出 token Fable 5:4.7 轮,约 100K token/轨迹 Sonnet 4.6:10.1 轮、token 超其两倍;Haiku 4.5 与 Qwen3.8 达 13.1 轮 以最少轮数与较少 token 取得最高分
评测器有效性 与人类标签精确一致率 / κ(300 例盲测) 87.7% / κ=0.72(线性加权 κ=0.78) WebGen-Bench 协议报告的人类一致性 86–94% 持平,验证 EvoWeb 判分协议可靠

局限与改进

作者承认的局限:基准规模仍小(32 个应用,从 40 个候选淘汰 8 个而来,覆盖 WebGen-Bench 20 个域类中的 16 个);每条轨迹仅 10 个请求;每请求只有 1 个向后测试,是对早期功能的抽样复检而非穷尽回归审计;浏览器评测依赖 LLM 判分器,300 例人类盲测中精确一致率 87.7%、$\kappa=0.72$,且集成测试上判分器比人类宽松 +0.050(95% CI [0.009, 0.091],不含 0);39 例(13%)截图证据不足需人工上站复核,分歧集中于此;闭源模型只跑 3 次、开源模型只跑 1 次,0.01 量级的差距不足以下排名结论;语言与 DAG 分析没有置信区间;PARTIAL 记 0.5 分与均匀积分都是约定而非无假设的汇总。我的补充观察:所有应用都是纯客户端 React + 本地数据,禁止外部 API、认证、实时同步与文件上传,回避了真实演化中最难的后端状态迁移与 schema 演化问题;fail-stop 端点下最强模型也只有 $Q(1)=0.208$(平均精度 0.897),面对'一次不完美就弃用'的用户所有模型几乎不可用;固定 OpenHands 脚手架与每请求 20 轮预算可能系统性不利于某些模型;集成测试沿单条 DAG 边采样,无法覆盖多依赖联合失效的情形。

独立分析的弱点

独立分析的弱点与改进方向:(1)回归覆盖稀疏——每请求仅 1 个向后测试,虽然论文数据显示早期通过测试的 94.8% 复检仍通过(5.2% 表观回归),但该估计基于抽样,可改为在每步全量重放早期测试的轻量断言子集,把回归率从'抽样估计'变成'精确测量';(2)应用域受限——纯前端本地数据设定使'missing data/各页各存一份数据'这类失败(占 Haiku 4.5 失败的 31.2%)只能靠前端状态管理解决,扩展到带数据库与 API 的技术栈才能测真实的状态迁移;(3)闭环缺失——智能体拿不到任何测试反馈,无法展示主动修复能力,而向后测试转移数据其实显示 29% 的早期失败会在后续请求中被顺带修好(21% 完全通过),说明模型有潜在自愈能力但当前协议测不到;(4)成本结构——Fable 5 单样本 $14.40,串行评测一个模型约 20 小时、需 6 vCPU 级隔离容器集群,学术组复现门槛高,可发布预计算缓存或更廉价的代理指标;(5)判分器残余偏差——+0.050 的宽松偏移恰好落在最关键的集成测试上,建议对集成测试补充确定性 DOM 断言做交叉验证;(6)每请求只允许一次修复、无请求间反馈,掩盖了 scaffold 级重试策略(如自动重跑失败测试)可能带来的收益差异。

未来方向

作者提出的方向:把轨迹延长到 10 个请求以上,考察更长视野下的性能退化;引入闭环交互,让用户报告失败并请求修复,研究智能体能否在继续演化的同时从错误中恢复。基于本文成果可延伸的方向:(1)把集成测试得分作为强化学习的奖励信号直接优化跨请求组合能力——本文已证明它是与'新功能能力'可分离的短板(0.510 vs 0.550);(2)研究面向演化的记忆与架构机制,例如让智能体在每次请求后维护功能-接口清单或自动生成回归测试套件,并对照本文隐藏的 DAG 验证其有效性;(3)把容差积分框架推广到其他长程智能体评测(多轮安全、长文档任务),因为'用户何时放弃'是普适问题,论文也给出任意加权下 $[Q(1), Q(0)]$ 的界;(4)分析上下文压缩策略(论文交由 OpenHands 处理)对远距依赖的影响——图 4 显示依赖深度直接损害精度,压缩可能是元凶之一;(5)利用 run-to-run 方差数据(Fable 5 的 Grade $\sigma=0.004$ vs Sonnet 4.6 的 0.028)研究输出稳定性与成绩的关系及降温/采样策略;(6)扩展到多用户并发、真实后端与移动端,检验结论的迁移性。

复现评估

复现条件相当友好。开源情况:数据集(全部请求、验证测试、依赖图、固定种子)与智能体运行、评分代码均已公开(论文首页链接),生成器、验证器、grounding 的完整 prompt 附在补充材料中;评测栈全部基于开源的 OpenHands 脚手架、WebVoyager 与 Selenium。数据:32 条轨迹可直接使用,无需重新构造;若要自建,需要 Sonnet 4.6(grounding 检索)、Fable 5(生成)与 LLM 验证器,外加人工校准环节。算力:每模型 320 请求 × 至多 20 轮,外加约 1600 次多步浏览器评测;浏览器验证是 CPU 密集型,单机串行一个模型约 20 小时,论文用 Kubernetes 集群并行 32 条流(每流独享 6 vCPU 的隔离无头浏览器容器),两小时内完成一个模型。API 成本:每样本 $0.12(DeepSeek V4-Flash)到 $14.40(Fable 5)不等,完整评测一个模型的 API 开销约在几十到数千美元量级。难度评级:中等——用官方数据与代码跑评测属于工程活,主要门槛是搭建浏览器集群与支付多模型 API/托管费用;复刻数据构造管线则较难,因为需要人工校准与约 200 次浏览器测试执行的构建期人工审计。

相似论文推荐