evalscope使用2-使用自定义数据集压测

    使用自定义数据集进行压测,需要定义模板、提示词数据集、自定义数据集插件,命令行中指定--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_path

    def 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 prompt


if __name__ == '__main__':
    # 本地调试用示例
    from evalscope.perf.main import run_perf_benchmark

    args = 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)

 

posted @ 2025-11-16 22:51  badwood  阅读(2)  评论(0)    收藏  举报
Badwood's Blog