使用自定义数据集进行压测,需要定义模板、提示词数据集、自定义数据集插件,命令行中指定--dateset参数为custom
1、evalscope命令,其中指定dataset为custom,以及dataset-path指向提示词文件。注意,使用opanai接口,则只能通过--api-key注入apikey。
evalscope perf --url 'http://oneapi.sjwjpt.eda.it.hnx.ctc.com:3000/v1/chat/completions' --api-key sk-AK...32B0 --parallel 10 --model 'DeepSeek-R1' --log-every-n-query 10 --read-timeout 100 --connect-timeout 120 --number 30 --max-prompt-length 128000 --min-prompt-length 128 --api openai --query-template @template.json --dataset custom --dataset-path ./custom_prompts.txt &
2、template.json文件,其中model从命令行中注入,messages从提示词数据集中由插件代码注入
{"model": "{{model}}","messages": [{"role": "system","content": "你是一名拥有10年经验的质检专家..."},"{{messages}}"],"stream": false,"temperature": 0.0
3、提示词数据,每个提示词一行,插件代码会按行进行拆分。如果提示词本身是多行,则需要用一个不会出现在提示词中的特殊符号(如 ===)作为每条多行提示词的分隔符,插件代码再按分隔符拆分而非按行拆分。
坐席:客户:呃,我想问一下我那个。...坐席:辛苦,您稍后对外号热线十分满意,评价。
4、自定义数据集插件,这个插件只能注入提示词数据集,如果需要定义接口其他参数,则需要使用自定义api插件
from typing import Dict, Iterator, List from evalscope.perf.arguments import Arguments from evalscope.perf.plugin.datasets.base import DatasetPluginBase from evalscope.perf.plugin.registry import register_dataset@register_dataset('custom') # 注册为custom数据集,与命令中--dataset参数对应 class CustomDatasetPlugin(DatasetPluginBase):"""自定义数据集插件,用于读取自定义prompt文件并生成请求消息"""def __init__(self, query_parameters: Arguments):super().__init__(query_parameters)# 从参数中获取自定义数据集路径self.dataset_path = query_parameters.dataset_pathdef build_messages(self) -> Iterator[List[Dict]]:""" 构建符合OpenAI格式的消息列表从自定义数据集文件中按行读取prompt,过滤长度符合要求的内容""" # 按行读取自定义数据集for item in self.dataset_line_by_line(self.dataset_path):prompt = item.strip() # 去除首尾空白字符# 过滤符合长度要求的prompt(基于命令中指定的min/max参数)if (self.query_parameters.min_prompt_length < len(prompt) < self.query_parameters.max_prompt_length):# 应用聊天模板(符合OpenAI的message格式)if self.query_parameters.apply_chat_template:yield [{'role': 'user', 'content': prompt}]else:yield promptif __name__ == '__main__':# 本地调试用示例from evalscope.perf.main import run_perf_benchmarkargs = Arguments(model='qwen3-14b',url='http://ip:port/v1/chat/completions',dataset_path='custom_prompts.txt', # 本地调试的数据集路径dataset='custom', # 使用自定义数据集parallel=2,number=20,min_prompt_length=128,max_prompt_length=128000,api='openai')run_perf_benchmark(args)