论文名称:Web-Bench: A LLM Code Benchmark Based on Web Standards and Frameworks
论文链接:https://arxiv.org/abs/2505.07473
机构:字节跳动
Github 链接:https://github.com/bytedance/web-bench
数据集链接:https://huggingface.co/datasets/bytedance-research/Web-Bench
简介
Web Bench 是字节跳动几位前端同学设计并实现的前端新基准,因为前几天在群里面看到作者在宣传,然后也看了一下整体的介绍,觉得非常有实际意义的,所以也写篇文章介绍下他们的工作。
这个Benchmark是用来评估LLM在真实Web项目上的编程表现,主要有四个特点:
-
由50个独立开发的真实Web项目组成,复杂度从作者前端工程师视角定性为中低难度。但从最后的评估结果来看,目前LLM在解决这些项目级问题中还有很大的提升空间。
-
覆盖了较常见的业务场景:如购物、博客、表格、画板、小游戏等。

-
覆盖核心的Web Standards:如DOM、BOM、CSS、SVG、Canvas、EcmaScript、Typescript等。
-
覆盖常用的Frameworks:如React、Vue、Redux、Tailwind、Nextjs、Prisma 等。

背景
作者在构建Web Bench之前,也阅读过很多LLM Coding的基准论文,发现了一些共性问题:
-
很多Top基准大多数是由职业Researcher或者在校硕博生提出来的,没有深度参与到行业的项目开发,体现在题目上,以直接用竞赛题或者现成的开源项目作为来源了,当然这个来源的数据也是相对好收集。
-
Swe-bench就做得比较好,来自真实的Github开源项目PR,代表LLM解决实际项目问题的能力。
-
早期提出的一些代码基准,其评价指标在现有的LLM上已经快刷到100%的程度了,不太能够评价现在的LLM Coding的能力了,需要及时更新。
所以作者的优势就体现出来了,是一群有着深度项目开发经验的前端,能够人工构造项目级的题目,覆盖的技术栈、题目类型等也比较全面。
评测集
数据组成
-
Dataset(数据集):Projects 合集,提供Full Dataset。
-
Project(项目):Dataset中的一项,一个项目由20个连续的Task组成。
-
Task(任务):包括需求描述、端到端(E2E)测试用例;平均每个任务就有3.6个测试用例,平均每个项目由72.4个测试用例。
图1展示了一个Project的Task-1 & Task-2的例子,虽然作者说Task-2的执行依赖于Task-1的结果(需要有main元素),但我这里要进一步说明下:Task-2实际上是在Task-1创建的基础页面结构上添加新功能模块,起到不断完善整个项目的过程,更严谨地说,Task-2是强依赖于Task-1的问题,本质上是问题的延续。因为Web Bench的执行过程是自动化的,如果Task-2真得要强依赖于Task-1的结果去预设问题内容的话(比如修改xxx),那么很可能就在Task-1这一步就跪了。

构建方法
人工构建与校准为主,排除了一些tests、tasks中的bug,目前开源的50个项目都是经过校准的项目。
附录D中也给出了更多的构建细节,有一个参考的校准工作流。


最后一个项目的结构示例如下图:

使用方法
让各种LLM在作者开发的基准Agent上跑,并用Playwright E2E cases验证结果的正确性。

图5介绍了评估器工作流程(Evaluator Workflow),主要操作如下:
-
获取初始代码(可选):从代理处获取初始代码。
-
任务迭代:按顺序从task - 1执行到task - 20 。
-
调用代理:具体细节见Web - Agent Workflow部分。
-
重写文件:对现有文件进行更新或创建新文件。
-
初始化环境(可选):初始化文件运行环境。
-
构建文件(可选):检查文件是否存在如引用错误等问题。
-
测试:使用Playwright进行端到端(E2E)测试。
-
重试:依据构建或测试过程中产生的错误信息进行重试。
-
首次尝试,若失败,结合任务描述和错误信息执行task - n,然后返回步骤3 。
-
第二次尝试,若仍失败,则评估结束。
-
-
生成报告:更多详细内容见附录C。
当然,作者也简单介绍了一下他们的Web Agent流程:

具体工作流程如下:
-
构建提示词:利用系统提示词(SP)、任务描述、文件以及错误信息来构建。若组合后的输入超出上下文长度,将进行截断处理。
-
请求LLM:依据所选模型请求LLM的OpenAPI并返回响应,温度、最大令牌数、上下文长度等参数从模型提供商处获取。
-
提取文件:解析LLM的响应,从中提取生成的文件 。更多详细信息可在附录B中查看。
评价指标
Pass@1
LLM一次性通过率,强如Claude 3.7 也就只有25.11%的通过率,还有很大的提升空间,后面各个模型的排名也是基本符合预期的。

Pass@2
带着error context再运行一次的通过率,整体排名与Pass@1差不多。

总结
可以看到,作者从中低难度出发构建前端的项目级评测,现在最强的Claude 3.7模型也做不到非常高的通过率,说明LLM 在真实项目中的Coding能力还有很大提升。我觉得非常有意义,给作者们点赞。
如果非要说有一点遗憾的话,就是这些项目的Task还是一个连续性的项目级生成过程的集合,如果有一个办法,能够在自动化评估的过程中,在第n(n>1)轮生成的问题是基于n-1轮的代码结果继续提问的(比如继续生成xxx、修改xxx等),那么就更加贴近真实软件项目开发过程了。
1475

被折叠的 条评论
为什么被折叠?



