[ PROMPT_NODE_22380 ]
custom-tasks
[ SKILL_DOCUMENTATION ]
# 在 BigCode Evaluation Harness 中创建自定义任务
为代码生成模型实现自定义评估任务的指南。
## 任务架构
所有任务都继承自基础 `Task` 类并实现标准方法:
python
class Task:
DATASET_PATH: str # HuggingFace 数据集 ID
DATASET_NAME: str # 数据集配置(或 None)
def __init__(self, stop_words, requires_execution):
"""使用停止词和执行标志初始化任务。"""
def get_dataset(self):
"""返回评估数据集。"""
def get_prompt(self, doc):
"""将文档格式化为模型提示词。"""
def get_reference(self, doc):
"""从文档中提取参考解决方案。"""
def postprocess_generation(self, generation, idx):
"""清理模型输出。"""
def process_results(self, generations, references):
"""评估并返回指标。"""
## 分步实现
### 第 1 步:创建任务文件
将模板复制到 `bigcode_eval/tasks/.py`:
python
"""
主页:
"""
import json
from evaluate import load
from bigcode_eval.base import Task
class MyCustomTask(Task):
"""自定义代码评估任务。"""
DATASET_PATH = "username/dataset-name" # HuggingFace 数据集
DATASET_NAME = None # 或特定的配置名称
def __init__(self):
super().__init__(
stop_words=["nclass", "ndef", "n#", "nif", "nprint"],
requires_execution=True, # 如果运行单元测试,请设为 True
)
def get_dataset(self):
"""加载评估集。"""
from datasets import load_dataset
return load_dataset(
self.DATASET_PATH,
self.DATASET_NAME,
split="test"
)
def get_prompt(self, doc):
"""将问题格式化为模型的提示词。"""
return doc["prompt"]
def get_reference(self, doc):
"""返回测试用例或参考解决方案。"""
return doc["test"]
def postprocess_generation(self, generation, idx):
"""清理模型输出(移除解决方案后的多余文本)。"""
# 常见做法:在第一次出现停止词时停止
for stop_word in self.stop_words:
if stop_word in generation:
generation = generation[:generation.index(stop_word)]
return generation
def process_results(self, generations, references):
"""执行测试并 co