# 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 秒 - 沙箱环境设置请参阅 [沙箱文档](https://evalscope.readthedocs.io/zh-cn/latest/user_guides/sandbox.html) ## 属性 | 属性 | 值 | |----------|-------| | **基准测试名称** | `multiple_mbpp` | | **数据集 ID** | [evalscope/MultiPL-E](https://modelscope.cn/datasets/evalscope/MultiPL-E/summary) | | **论文** | 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` ```json { "input": [ { "id": "209e8d38", "content": "```cpp\n#include\n#include\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" } } ``` ## 提示模板 **提示模板:** ```text {prompt} ``` ## 沙箱配置 此基准测试需要沙箱环境来执行代码。 ```json { "image": "volcengine/sandbox-fusion:server-20250609", "tools_config": { "shell_executor": {}, "python_executor": {}, "multi_code_executor": {} }, "memory_limit": "2g", "cpu_limit": "2.0" } ``` ## 使用方法 ### 使用 CLI ```bash evalscope eval \ --model YOUR_MODEL \ --api-url OPENAI_API_COMPAT_URL \ --api-key EMPTY_TOKEN \ --datasets multiple_mbpp \ --sandbox '{"enabled": true}' \ --limit 10 # 正式评估时请删除此行 ``` ### 使用 Python ```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) ```