MultiPL-E MBPP#

概述#

MultiPL-E MBPP 是一个源自 MBPP(Mostly Basic Python Programming)的多语言代码生成基准测试。它将原始 MBPP 扩展至 18 种编程语言,支持对代码生成能力进行跨语言评估。

任务描述#

  • 任务类型:多语言代码生成

  • 输入:包含文档字符串(docstring)的编程问题提示

  • 输出:能通过测试用例的完整代码解决方案

  • 语言:18 种语言(C++、TypeScript、Shell、C#、Go、Java、Lua、JavaScript、PHP、Perl、Racket、R、Rust、Scala、Swift、Ruby、D、Julia)

主要特性#

  • 覆盖 18 种编程语言的多语言评估

  • 基于执行的测试用例评估

  • 支持代码生成的 pass@k 指标

  • 使用 Docker 沙箱环境实现安全代码执行

  • 源自 MBPP,保持一致的问题难度

评估说明#

  • 需要沙箱:需使用沙箱环境以确保代码安全执行

  • 默认评估使用 test 划分

  • 主要指标:准确率(Accuracy),采用 pass@k 聚合方式

  • 每个测试用例超时时间:30 秒

  • 沙箱环境设置请参阅 沙箱文档

属性#

属性

基准测试名称

multiple_mbpp

数据集 ID

evalscope/MultiPL-E

论文

N/A

标签

Coding

指标

acc

默认示例数(Shots)

0-shot

评估划分

test

聚合方式

mean_and_pass_at_k

数据统计#

指标

总样本数

6,987

提示词长度(平均)

379.32 字符

提示词长度(最小/最大)

266 / 1002 字符

各子集统计数据:

子集

样本数

提示平均长度

提示最小长度

提示最大长度

mbpp-cpp

397

407.55

317

1002

mbpp-ts

390

359.57

295

674

mbpp-sh

382

362.53

296

696

mbpp-cs

386

549.09

481

867

mbpp-go

374

402.21

332

723

mbpp-java

386

553

474

889

mbpp-lua

397

332.52

277

651

mbpp-js

397

325.48

270

645

mbpp-php

397

336.17

280

655

mbpp-pl

396

337.87

282

657

mbpp-rkt

397

342.25

287

660

mbpp-r

397

326.42

271

644

mbpp-rs

354

351.9

285

669

mbpp-scala

396

434.01

364

750

mbpp-swift

396

352.64

285

667

mbpp-rb

397

321.34

266

641

mbpp-d

358

376.49

308

693

mbpp-jl

390

363.01

292

686

样例示例#

子集mbpp-cpp

{
  "input": [
    {
      "id": "209e8d38",
      "content": "```cpp\n#include<assert.h>\n#include<bits/stdc++.h>\n// Write a cppthon function to identify non-prime numbers.\nbool is_not_prime(long n) {\n\n```\n\nPlease complete the above code according to the requirements in the docstring. Write the complete code and wrap it in markdown fenced code. The code should not contain `Main` function."
    }
  ],
  "target": "",
  "id": 0,
  "group_id": 0,
  "metadata": {
    "tests": "}\nint main() {\n    auto candidate = is_not_prime;\n    assert(candidate((2)) == (false));\n    assert(candidate((10)) == (true));\n    assert(candidate((35)) == (true));\n    assert(candidate((37)) == (false));\n}\n",
    "stop_tokens": [
      "\n}"
    ],
    "task_id": "mbpp_3_is_not_prime",
    "language": "cpp",
    "doctests": "transform"
  }
}

提示模板#

提示模板:

{prompt}

沙箱配置#

此基准测试需要沙箱环境来执行代码。

{
  "image": "volcengine/sandbox-fusion:server-20250609",
  "tools_config": {
    "shell_executor": {},
    "python_executor": {},
    "multi_code_executor": {}
  },
  "memory_limit": "2g",
  "cpu_limit": "2.0"
}

使用方法#

使用 CLI#

evalscope eval \
    --model YOUR_MODEL \
    --api-url OPENAI_API_COMPAT_URL \
    --api-key EMPTY_TOKEN \
    --datasets multiple_mbpp \
    --sandbox '{"enabled": true}' \
    --limit 10  # 正式评估时请删除此行

使用 Python#

from evalscope import run_task
from evalscope.config import TaskConfig

task_cfg = TaskConfig(
    model='YOUR_MODEL',
    api_url='OPENAI_API_COMPAT_URL',
    api_key='EMPTY_TOKEN',
    datasets=['multiple_mbpp'],
    sandbox={'enabled': True},
    dataset_args={
        'multiple_mbpp': {
            # subset_list: ['mbpp-cpp', 'mbpp-ts', 'mbpp-sh']  # 可选,用于评估特定子集
        }
    },
    limit=10,  # 正式评估时请删除此行
)

run_task(task_cfg=task_cfg)