市面现有的评测数据集大多局限于某个领域或者某类任务,并不能体现大模型广泛的、通用的代码能力,导致大家对于代码工具的选取举棋不定。
今天,字节豆包大模型团队与M-A-P社区联合推出了开源的代码大模型基准测试数据集FullStackBench以及配套工具SandboxFusion,覆盖全栈编程领域,数据集和工具已在HuggingFace和Github开源。
FullStackBench这一全新的代码基准测试,旨在全面、科学地评估代码大模型在各种真实开发场景中的表现,让开发者们不再迷茫。
代码评测基准FullStackBench
论文表示,FullStackBench是一个多语言的基准测试数据集,专注于编程开发任务设计。
FullStackBench数据集的构建并不仅仅是简单的代码片段集合,而是通过深度的人工注释与多模型投票机制,确保问题的多样性和挑战性。它包含多达3374个问题(中英文问题各一半),涉及16种编程语言,以更贴近真实开发场景的方式挑战代码生成模型的极限,对模型在多种领域中的适应性和实际应用能力进行全面检测(包括数据分析、机器学习、web开发等)。
研究团队分析了全球最大的程序员技术问答社区StackOverflow上的问题分布,从中提炼出常见的真实编程应用领域。如图所示,团队从StackOverflow上随机抽取了50万个问题,并使用大模型为每个问题标注其所属的应用领域类型。
在成功构建完FullStackBench之后,研究人员对其进行了统计分析,结果如图所示。
研究人员运用LLaMA3分词器分别对题目以及正确代码的标记长度进行了计算,其中题目平均长度为210.2个tokens。为确保评估的准确性,数据集包含总计15168个单元测试,平均每个问题配备4.5个单元测试用例。
项目特点总结
1.广泛的应用领域:FullStackBench涵盖了主流的应用开发领域,包括但不限于服务端开发、网页开发等。模型需要处理从HTML布局到完整应用逻辑实现的全栈任务。
2.多样性与复杂性:3K的测试样本不仅数量庞大,而且复杂多样,从简单的函数实现到综合的项目案例,无所不包。这是现有基准无法企及的深度与广度。
3.多语言支持:项目内置对16种编程语言的支持,使得研究人员可以更深入地分析模型在跨语言场景中的表现,例如Python、JavaScript、C++等。
4.双语言评测:每道测试题目均提供中英文版本,并配备清晰的参考解决方案。这种设计不仅保证了多语言模型的公平性,还提升了评估的多样性和灵活性。
5.真实场景模拟:在设计问题时,我们参考了StackOverflow的问题分布,力求贴近开发者的日常工作需求,模拟真实的开发环境和挑战。
配套工具:SandboxFusion
由于FullStackBench的数据格式和依赖关系不同,因此实现自动执行评估具有一定挑战性,于是FullStackBench还配备了一个高效的代码沙盒执行工具SandboxFusion。它通过统一的HTTPAPI提供了对不同编程任务的标准化评估。这意味着你可以快速启动一个容器化的测试环境来运行各种模型配置,无缝执行测试,获取运行结果。
近期出现的沙盒环境很多(如DifySandbox、MultiPLE、MPLSandbox)。但是,这些沙箱存在重大限制(例如不支持深度学习包),而SandboxFusion覆盖23种编程语言,支持前端开发、后端服务和机器学习等复杂场景。
SandboxFusion只需单台设备即可运行,支持docker一键部署,除了FullStackBench,它还支持10多种其他代码评估数据集,可以实现一站式评估。
SandboxFusion食用指南
贡献者:DW鲸英助教@王泽宇、杨晨旭、赵文恺
完整教程链接
使用Docker一键运行:
dockerrun-d--rm-p8080:8080volcengine/sandbox-fusion:server-20241204SandboxFusion主要提供两个功能:运行代码和判断题目对错
运行代码
在shell中执行下面的指令来请求sandbox执行一段python代码:
{"status":"Success","message":"","compile_result":null,"run_result":{"status":"Finished","execution_time":0.016735315322875977,"return_code":0,"stdout":"Hello,world!\n","stderr":""},"executor_pod_name":null,"files":{}}也可以通过提供的playground在线体验:
数据集
Datasets模块实现了各类不同Code数据集的判断逻辑,已经实现的开源数据集有:mbpp、human_eval等。
Sandbox模块和Datasets模块相结合,就构成了我们模型评估的流程~
首先通过HTTPAPI获取到指定数据集每道题目的prompt:
可以看到,提交的completion包含了LLM的全部输出,而不需要手动从中提取出代码段部分,SandboxFusion从中提取出了相应的代码段(extracted_code),并结合数据集中的特点对代码段进行了扩充(full_code),最后与数据集中的结果进行了匹配,得出测试结果。
SandboxFusion还提供了OJ在线体验的playground:
Coder大模型比较
代码大模型已经发布一些时日了,想必大家都已经多多少少听说或者使用过各家的代码大模型了,Qwen2.5-Coder、DeepSeek-Coder、GPT-o1、GPT-4o、CodeLlama、Claude3.5Sonnet等模型各具特色,Qwen2.5的Coder也是本人经常在用的,体验效果比较好。
今年6月,字节发布了AI编程助手豆包MarsCode,跟随Datawhale实践,在VsCode中下载插件体验了一番,效果很不错,推荐给身边朋友一起用了。这次FullstackBench论文测评的代码大模型中,出现了此前字节未披露过的Doubao-Coder,听说就是豆包MarsCode的基座模型。
尽管还是preview版,Doubao-Coder在FullStackBench上综合指标取得了不错的分数,仅次于OpenAI和Claude,值得期待一波~
现阶段各家大模型的得分表现:
写在最后
在使用FullStackBench和SandboxFusion时,最大的感受是它们可以和Coder模型的训练与评测深度结合。
FullStackBench作为一个多语言、多场景的代码能力测试数据集,涵盖了从基础算法到全栈开发的丰富问题,贴近真实开发场景的设计具有很强的应用价值。
SandboxFusion则提供了强大的代码运行和评估能力,基于Docker的一键部署和易用的HTTPAPI接口,让测试流程变得简单、高效。
FullStackBench数据集开源地址和食用指南地址贴在下面了,可以上手去试试。