README_zh.md

April 16, 2024 · View on GitHub

🤗 Hugging Face • ⏬ 数据 • 📖 教程
English | 中文

DevOps-Eval是一个专门为DevOps领域大模型设计的综合评估数据集。我们希望DevOps-Eval能够帮助开发者,尤其是DevOps领域的开发者,追踪进展并分析他们拥有的DevOps大模型的优势和不足之处。

📚 该仓库包含与DevOps和AIOps相关的问题和练习, 还添加了关于ToolLearning相关的样本。

💥 目前有 7486 个多项选择题,根据DevOps的通用流程将其归纳未8个模块,如下图所示。

🔥 AIOps样本总计 2840 个,覆盖的场景包括日志解析时序异常检测时序分类时序预测根因分析

🔧 ToolLearning样本 1509 个,涵盖59个领域,总计 239 种工具类别。

🔔 更新

  • [2023.12.27] 新增1509个ToolLearning样本,发布了相应的评测排行榜
  • [2023.11.27] 增加运维场景样本487例、时序预测样本640例;同步更新评测排行榜
  • [2023.10.30] 增加针对AIOps场景的评测排行榜
  • [2023.10.25] 增加AIOps样本,包含日志解析、时序异常检测、时序分类和根因分析
  • [2023.10.18] DevOps-Eval发布大模型评测排行版

📜 目录

🏆 排行榜

以下是我们获得的初版评测结果,包括多个开源模型的zero-shot和five-shot准确率。我们注意到,对于大多数指令模型来说,five-shot的准确率要优于zero-shot。

👀 DevOps

Zero Shot

模型plancodebuildtestreleasedeployoperatemonitor平均分
DevOpsPal-14B-Chat60.6178.3584.8684.6587.2682.7569.8979.1778.23
DevOpsPal-14B-Base54.5577.8283.4985.9686.3281.9671.1882.4178.23
Qwen-14B-Chat60.6175.485.3284.2189.6282.7569.5780.5677.18
Qwen-14B-Base57.5873.8184.485.5386.3281.1870.0580.0976.19
Baichuan2-13B-Base60.6169.4279.8279.8282.5581.1870.3783.873.73
Baichuan2-13B-Chat60.6168.4377.9880.781.683.5367.6384.7272.9
DevOpsPal-7B-Chat54.5569.1183.9482.0276.898064.7377.7871.92
DevOpsPal-7B-Base54.5568.9682.1178.9580.6676.4765.5478.771.69
Qwen-7B-Base53.0368.1378.975.4480.198065.0680.0971.09
Qwen-7B-Chat57.5866.0180.2879.8276.8977.6562.6479.1769.75
Baichuan2-7B-Chat54.5563.6677.9876.3271.773.3359.4279.6366.97
Internlm-7B-Chat60.6162.1577.0676.3266.9874.5160.3978.2466.27
Baichuan2-7B-Base56.0662.4575.6970.6174.0669.861.6775.9366.21
Internlm-7B-Base54.5558.2979.3678.9577.8370.5965.8675.9365.99

Five Shot

模型plancodebuildtestreleasedeployoperatemonitor平均分
DevOpsPal-14B-Chat63.6479.4981.6585.9686.7986.6772.9581.4879.69
DevOpsPal-14B-Base62.1280.5582.5785.5385.8584.7171.9880.0979.63
Qwen-14B-Chat65.157682.5785.5384.9184.3170.8581.4877.81
Qwen-14B-Base66.6776.1584.485.5386.3280.3972.4680.5677.56
Baichuan2-13B-Base63.6471.3980.7382.4681.1384.3173.7585.1975.8
Qwen-7B-Base75.7672.5278.981.1483.9681.1870.3781.9475.36
Baichuan2-13B-Chat62.1269.9576.6184.2183.4979.6171.9880.5674.12
DevOpsPal-7B-Chat66.6769.9583.9481.1480.1982.7568.676.8573.61
DevOpsPal-7B-Base69.769.4982.1181.1482.5582.3567.1579.1773.35
Qwen-7B-Chat65.1566.5482.5781.5881.681.1865.3881.0271.69
Baichuan2-7B-Base60.6167.2276.617577.8378.4367.3179.6370.8
Internlm-7B-Chat60.6163.0679.8280.2667.9275.6960.0677.3169.21
Baichuan2-7B-Chat60.6164.9581.1975.8871.2375.6964.979.1769.05
Internlm-7B-Base62.1265.2577.5280.774.0678.8263.4575.4667.17

🔥 AIOps

Zero Shot

模型日志解析根因分析时序异常检测时序分类时序预测平均分
Qwen-14B-Base66.2958.825.3343.562.552.25
DevOpsPal-14B—Base63.1453.623.3343.564.0650.49
Qwen-14B-Chat64.5751.622.673662.548.94
DevOpsPal-14B—Chat6056244357.8148.8
Qwen-7B-Base5039.222.675443.7541.48
DevOpsPal-7B—Chat56.5730.425.334544.0640.92
Baichuan2-13B-Chat641821.3337.546.8839.3
Qwen-7B-Chat57.4338.822.3339.525.3136.97
Internlm-7B—Chat58.868.822.3328.551.2536.34
Baichuan2-7B-Chat60.86102834.539.0636.34
Baichuan2-7B-Base53.4312.827.6736.540.3135.49
Baichuan2-13B-Base5412.42334.542.8134.86
DevOpsPal-7B—Base46.5720.8253438.7533.94
Internlm-7B—Base48.5718.823.3337.533.7533.1

One Shot

模型日志解析根因分析时序异常检测时序分类时序预测平均分
DevOpsPal-14B—Chat66.2980.823.3344.556.2554.44
DevOpsPal-14B—Base607425.3343.552.551.13
Qwen-14B-Base64.2974.42848.540.3150.77
Qwen-7B-Base5660.827.674457.1949.44
Qwen-14B-Chat49.7165.628.674842.1946.13
Baichuan2-13B-Base5643.224.334146.8842.89
Baichuan2-7B-Chat58.5731.62731.551.8841.83
DevOpsPal-7B—Base52.8644.42844.536.2541.2
Baichuan2-7B-Base48.2940.4274240.9439.86
Qwen-7B-Chat54.575229.6726.527.1938.73
Baichuan2-13B-Chat57.4344.42525.530.6337.75
DevOpsPal-7B—Chat56.5727.225.3341.533.4437.46
Internlm-7B—Chat62.5712.822.332150.3136.69
Internlm-7B—Base4833.2293531.5635.85

🔧 ToolLearning

FuncCall-Fillerdataset_namefccr1-fcffr1-fcfnr1-fcfpr1-fcfniraar
Qwen-14b-chatluban6110097.6863.3210069.46
Qwen-7b-chatluban50.5810098.0752.5110063.59
Baichuan-7b-chatluban60.2310097.362.9399.6161.12
Internlm-chat-7bluban47.8810096.1451.7499.6161.85
Qwen-14b-chatfc_data98.3799.7399.8698.7810081.58
Qwen-7b-chatfc_data99.4699.8610099.5910079.25
Baichuan-7b-chatfc_data97.9699.3210098.6410089.53
Internlm-chat-7bfc_data94.2995.7810098.510088.19
CodeLLaMa-7bfc_data98.7899.7310099.0510094.7
CodeLLaMa-7b-16fc_data98.199.8799.7398.510093.14
CodeFuse-7b-4kfc_data98.9199.8799.8799.1810089.5

⏬ 数据

下载

  • 方法一:下载zip压缩文件(你也可以直接用浏览器打开下面的链接):

    wget https://huggingface.co/datasets/codefuse-admin/devopseval-exam/resolve/main/devopseval-exam.zip
    

    然后可以使用 pandas加载数据:

    import os
    import pandas as pd
    
    File_Dir="devopseval-exam"
    test_df=pd.read_csv(os.path.join(File_Dir,"test","UnitTesting.csv"))
    
  • 方法二:使用Hugging Face datasets直接加载数据集。示例如下:

    from datasets import load_dataset
    dataset=load_dataset(r"DevOps-Eval/devopseval-exam",name="UnitTesting")
    
    print(dataset['val'][0])
    # {"id": 1, "question": "单元测试应该覆盖以下哪些方面?", "A": "正常路径", "B": "异常路径", "C": "边界值条件","D": 所有以上,"answer": "D", "explanation": ""}  ```
    
    
  • 方法三:使用modelscope下载相关所有数据。示例如下:

    from modelscope.msdatasets import MsDataset
    MsDataset.clone_meta(dataset_work_dir='./xxx', dataset_id='codefuse-ai/devopseval-exam')
    

👀 说明

为了方便使用,我们已经整理出了 55 个细分类别以及它们的中英文名称。具体细节请查看 category_mapping.json 。格式如下:

{
  "UnitTesting.csv": [
    "unit testing",
    "单元测试",
    {"dev": 5, "test": 32}
    "TEST"
  ],
  ...
  "file_name":[
  "英文名称",
  "中文名称",
  "样本数量",
  "类别(PLAN,CODE,BUILD,TEST,RELEASE,DEPOLY,OPERATE,MONITOR八选一)"
  ]
}

每个细分类别由两个部分组成:dev 和 test。每个细分类别的 dev 集包含五个示范实例以及为 few-shot 评估提供的解释。而 test 集则用于模型评估,并且test数据已包含准确标签。

下面是 dev 数据的示例,来自"版本控制"细分类别:

id: 4
question: 如何找到Git特定提交中已更改的文件列表?
A: 使用命令 `git diff --name-only SHA`
B: 使用命令 `git log --name-only SHA`
C: 使用命令 `git commit --name-only SHA`
D: 使用命令 `git clone --name-only SHA`
answer: A
explanation: 
分析原因:
git diff --name-only SHA命令会显示与SHA参数对应的提交中已修改的文件列表。参数--name-only让命令只输出文件名,而忽略其他信息。其它选项中的命令并不能实现此功能。

🔥 AIOps样本示例

👀 👀 此处以日志解析和时序异常检测为例,对AIOps样本做一些简要的展示:

日志解析

id: 0
question:
下面是一些运行日志
 0 04:21:15,429 WARN Cannot open channel to 2 at election address /10.10.34.12:3888
 1 19:18:56,377 WARN ******* GOODBYE /10.10.34.11:52703 ********
 2 19:13:46,128 WARN ******* GOODBYE /10.10.34.11:52308 ********
 3 19:16:26,268 WARN ******* GOODBYE /10.10.34.11:52502 ********
 4 09:11:16,012 WARN Cannot open channel to 3 at election address /10.10.34.13:3888
 5 16:37:13,837 WARN Cannot open channel to 2 at election address /10.10.34.12:3888
 6 09:09:16,008 WARN Cannot open channel to 3 at election address /10.10.34.13:3888
 7 15:27:03,681 WARN Cannot open channel to 3 at election address /10.10.34.13:3888
日志最前面三部分别为序号、时间戳和日志Level,在不考虑这三部分内容的情况下,此处我们设定日志的变量用'<*>'代替,token与token之间用空格分隔,那么请问上述日志的日志模版具体是什么?
A: Notification time out: <*> 和 Connection broken for id <*>, my id = <*>, error =
B: Send worker leaving thread 和 Connection broken for id <*>, my id = <*>, error =
C: Received connection request /<*>:<*> 和 Interrupting SendWorker
D: Cannot open channel to <*> at election address /<*>:<*> 和 ******* GOODBYE /<*>:<*> ********
answer: D
explanation: 根据日志中的内容,选项D是最符合日志模板的。日志中包含了"Cannot open channel to &lt;*&gt; at election address /&lt;*&gt;:&lt;*&gt;"和"******* GOODBYE /&lt;*&gt;:&lt;*&gt; ********"这两个固定的模板片段,它们都在选项D中出现了。同时,其他选项中的模板片段与日志中的内容不匹配。因此,选项D是最符合日志模板的。

时序异常检测

id: 0
question:
分析如下时间序列
[50,62,74,84,92,97,99,98,94,87,77,65,265,40,28,17,8,3,0,0,4,10,20,31,43,56,68,79,89,95,99,99,96,91,82,71,59,46,34,22,12,5,1,0,2,7,15,25,37,49]
请找出其中明显异常点的下标。所谓的异常点一般指的是明显与数据整体趋势不符的点。
A: 46
B: 0
C: 37
D: 12
answer: D
explanation: 根据分析,题目中的时间序列在12点出的值265要明显大于周围数据,存在着突增现象,因此选择D是正确的。

🔧 ToolLearning样本示例

工具学习样本的数据格式与OpenAI的函数调用格式兼容。 详情请参阅tool_learning_info_zh.md。 工具学习评测过程,详情请参阅见 tool_learning_evalution.md

🚀 如何进行测试

如果需要在自己的 HuggingFace 格式的模型上进行测试的话,总的步骤分为如下几步:

  1. 编写 Model 的 loader 函数
  2. 编写 Model 的 context_builder 函数
  3. 注册模型到配置文件中
  4. 执行测试脚本 如果模型在加载进来后不需要特殊的处理,而且输入也不需要转换为特定的格式(e.g. chatml 格式或者其他的 human-bot 格式),请直接跳转到第四步直接发起测试。

1. 编写 loader 函数

模型加载时还需要做一些额外的处理(e.g. tokenizer 调整),需要继承 ModelAndTokenizerLoader 类来覆写对应的 load_modelload_tokenizer 函数, 如下所示:

class QwenModelAndTokenizerLoader(ModelAndTokenizerLoader):
    def __init__(self):
        super().__init__()
        pass
    
    @override
    def load_model(self, model_path: str):
    # Implementation of the method
        pass
    
    @override
    def load_tokenizer(self, model_path: str):
    # Implementation of the method
        pass

2. 编写 Model 的 context_builder 函数

如果输入需要转换为特定的格式(e.g. chatml 格式或者其他的 human-bot 格式),则需要继承 ContextBuilder 类来覆写 make_context 函数,如下所示:

class QwenChatContextBuilder(ContextBuilder):
    def __init__(self):
        super().__init__()
        
    @override
    def make_context(self, model, tokenizer, query: str, system: str = "hello!"):
    # Implementation of the method
        pass

3. 注册模型到配置文件中

去 conf 中的 model_conf.json,注册对应的模型名和这个模型将要使用的 loader 和 context_builder,示例如下:

{
  "Qwen-Chat": {
  "loader": "QwenModelAndTokenizerLoader",
  "context_builder": "QwenChatContextBuilder"
  }
}

4. 执行测试脚本

直接运行以下代码发起测试

python src/run_eval.py \
--model_path path_to_model \
--model_name model_name_in_conf \
--model_conf_path path_to_model_conf \
--eval_dataset_list all \
--eval_dataset_fp_conf_path path_to_dataset_conf \
--eval_dataset_type test \
--data_path path_to_downloaded_devops_eval_data \
--k_shot 0

👀 👀 具体评测流程见📖 数据集评测教程

🧭 TODO

  • 添加AIOps样本
  • 添加AIOps场景,比如时间预测
  • 增加 ToolLearning 样本
  • 当前各类别样本量不平均,后续进一步增加样本数量
  • 增加困难程度的样本集
  • 增加样本的英文版本


🏁 Licenses

This project is licensed under the Apache License (Version 2.0).


😃 引用

如果您使用了我们的数据集,请引用我们的论文。 Coming soon...



🗂 Miscellaneous

✨ Star History

Star History Chart

  • Codefuse-ChatBot
    • Codefuse-ChatBot is an open-source AI smart assistant designed to support the software development lifecycle with conversational access to tools, knowledge, and platform integration.
  • Awesome AIGC Tutorials
    • Awesome AIGC Tutorials houses a curated collection of tutorials and resources spanning across Large Language Models, AI Painting, and related fields.