
SandboxFusion在线评测系统如何构建自己的代码评测数据集【免费下载链接】SandboxFusion项目地址: https://gitcode.com/gh_mirrors/sa/SandboxFusionSandboxFusion在线评测系统是一款功能强大的代码评测工具支持多种编程语言和数据集类型帮助开发者轻松构建和管理自定义代码评测数据集。本文将详细介绍如何使用SandboxFusion构建专属于你的代码评测数据集从数据格式定义到测试用例编写让你快速上手并充分利用这一强大工具。了解SandboxFusion支持的编程语言在开始构建数据集之前首先需要了解SandboxFusion支持的编程语言。SandboxFusion提供了广泛的语言支持涵盖了主流的编程语言和一些专业领域的语言。从上图可以看到SandboxFusion支持Python、Java、C、Go、JavaScript等多种编程语言满足不同场景下的代码评测需求。完整的语言支持列表可以在项目的源码中找到例如在sandbox/datasets/humaneval.py文件中定义了多种语言的映射关系。数据集的基本结构与类型SandboxFusion采用了灵活的数据集结构主要通过CodingDataset抽象类来定义数据集的基本行为。所有自定义数据集都需要继承这个类并实现相关方法。核心数据模型在sandbox/datasets/types.py文件中定义了构建数据集所需的核心数据模型Prompt: 包含问题描述和相关标签TestConfig: 测试配置包括语言、超时时间等EvalResult: 评测结果包含代码执行状态和测试用例结果这些模型为数据集的构建提供了统一的规范确保不同类型的数据集都能被SandboxFusion正确处理。常见数据集类型SandboxFusion已经内置了多种常见的数据集实现例如HumanEvalDataset: 适用于HumanEval格式的单语言代码生成任务MBPPDataset: 适用于MBPP (Mostly Basic Python Programming) 数据集你可以参考这些实现来构建自己的数据集例如sandbox/datasets/humaneval.py和sandbox/datasets/mbpp.py提供了详细的实现示例。构建自定义数据集的步骤1. 定义数据集类首先创建一个新的Python文件例如my_dataset.py并定义你的数据集类继承自CodingDatasetfrom sandbox.datasets.types import CodingDataset, Prompt, GetPromptsRequest class MyCustomDataset(CodingDataset): classmethod async def get_prompts(cls, request: GetPromptsRequest) - List[Prompt]: # 实现获取问题的逻辑 pass classmethod async def evaluate_single(cls, request: SubmitRequest) - EvalResult: # 实现评测逻辑 pass2. 实现数据加载逻辑数据集需要能够从数据源加载问题和测试用例。SandboxFusion提供了数据库访问工具可以方便地从数据库加载数据from sandbox.database import get_rows_in_table, get_row_by_id_in_table classmethod async def get_prompts(cls, request: GetPromptsRequest) - List[Prompt]: rows await get_rows_in_table(request, cls.get_table_name(request.dataset)) return [cls._generate_single_prompt(r, request.dataset, request.config) for r in rows]3. 设计问题模板为你的数据集设计统一的问题模板确保模型能够理解任务要求。例如classmethod def _generate_single_prompt(cls, row: Dict[str, Any], dataset: str, config: TestConfig) - Prompt: prompt f任务{row[description]}\n要求{row[requirements]} return Prompt(idrow[id], promptprompt, labelsrow[labels])4. 编写评测逻辑实现代码的评测逻辑包括代码提取、测试用例执行和结果判断classmethod async def evaluate_single(cls, request: SubmitRequest) - EvalResult: # 获取问题数据 row await get_row_by_id_in_table(request, cls.get_table_name(request.dataset)) # 提取代码 code extract_code_from_completion(request.completion, row[language]) # 构建完整代码包含测试用例 full_code f{code}\n{row[test_cases]} # 执行代码 result await run_code_in_sandbox( RunCodeRequest( codefull_code, languagerow[language], run_timeoutrequest.config.run_timeout or 20 ) ) # 返回评测结果 return EvalResult( idrequest.id, acceptedresult.status RunStatus.Success, extracted_codecode, full_codefull_code, tests[EvalTestCase(passedresult.status RunStatus.Success, exec_inforesult)] )5. 注册数据集将你的数据集注册到系统中以便在SandboxFusion中使用# 在配置文件中添加 dataset: registry: - class_name: MyCustomDataset dataset_tables: my_dataset: my_dataset_table测试用例设计最佳实践1. 覆盖各种情况确保测试用例覆盖正常情况、边界情况和错误情况正常输入的测试边界值测试如空输入、最大最小值错误处理测试如异常输入的处理2. 使用断言明确预期结果每个测试用例应使用明确的断言来验证代码的正确性# Python测试用例示例 assert add(2, 3) 5, 2 3 应该等于 5 assert add(-1, 1) 0, -1 1 应该等于 03. 考虑性能因素对于可能耗时的操作设置合理的超时时间# 在TestConfig中设置超时 TestConfig( run_timeout30, # 30秒超时 compile_timeout10 # 编译超时 )数据集的存储与管理数据存储格式SandboxFusion支持将数据集存储在数据库中每个数据集对应一个表。你也可以使用JSONL格式存储数据集便于版本控制和共享{id: 1, prompt: 编写一个加法函数, test_cases: assert add(1,2)3} {id: 2, prompt: 编写一个乘法函数, test_cases: assert multiply(3,4)12}版本控制建议使用Git对数据集进行版本控制跟踪数据集的变更历史。项目中提供了Git相关脚本可以在scripts/git/目录下找到。总结与下一步通过本文的介绍你已经了解了如何使用SandboxFusion构建自定义代码评测数据集的基本步骤。从定义数据集类到实现评测逻辑再到设计测试用例每一步都至关重要。接下来你可以参考现有的数据集实现如sandbox/datasets/humaneval.py和sandbox/datasets/mbpp.py开始构建自己的第一个数据集在SandboxFusion中测试你的数据集与社区分享你的数据集SandboxFusion提供了灵活而强大的框架帮助你轻松构建和管理代码评测数据集。无论是用于教学、研究还是开发自定义数据集都能让SandboxFusion更好地满足你的特定需求。开始构建你的数据集吧让代码评测变得更加高效和个性化【免费下载链接】SandboxFusion项目地址: https://gitcode.com/gh_mirrors/sa/SandboxFusion创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考