1 背景
近年来,大语言模型(LLM)在自然语言处理领域取得了显著进展。以 GPT、Qwen 等为代表的大模型展示了在各种语言任务中的强大能力。然而,通用大模型在特定垂直领域的表现往往难以满足专业需求。我们旨在基于开源大模型,定制一个能够生成高质量渠道业务测试用例的专用大模型。
为了实现这一目标,首先需要对开源大模型进行指令微调(Instruction Tuning),优化其在软件测试方面的表现。指令微调是一种重要的方法,通过向模型提供精确的指令或任务描述,使其能够在执行特定任务时表现得更加出色。
但在实际应用中,指令微调面临以下主要挑战:
- 用来微调的样本数据过少,难以覆盖复杂场景;
- 样本数据质量不高,存在噪声或逻辑错误;
- 人工编写数据效率低,成本高昂;
- 人工编写的数据多样性不足,导致模型泛化能力弱。
因此,经过调研,我们选择使用 Self-Instruct 方法生成大量的指令微调数据,用于微调开源大模型,以解决数据稀缺和质量问题。
2 Self-Instruct 简介
Self-Instruct 是一个半自动的过程,从有限少量的手动编写的种子任务开始,利用大模型以引导的方式生成新的大量任务,用于指令微调。完整的流程可以分为 6 步,具体步骤如下:
- 手动编写少量种子任务:定义核心任务类别和基础指令。
- 任务指令生成:基于种子任务,让模型生成新的指令变体。
- 分类任务识别:对生成的指令进行分类,确保覆盖不同维度。
- 任务实例生成:为每个指令生成具体的输入输出示例。
- 过滤及处理:去除重复、无效或低质量的指令。
- 使用生成的数据微调大模型:将清洗后的数据用于模型训练。

3 微调数据生成实践
在实践过程中,为了更快地验证 Self-Instruct 的可行性,我们对流程进行了简化。取消了复杂的分类任务识别步骤,并简化了过滤及处理环节,以提高迭代速度。
我们的目标是生成专注于软件测试领域的指令微调数据集。在 Self-Instruct 的基础上,我们做了一定的拓展,使生成的数据严格限定在软件测试范畴内。
指令微调数据集有多种格式,我们选择生成 Alpaca 格式的数据。该格式包含三个关键字段:instruction(指令)、input(输入上下文)、output(期望输出)。
| { "instruction": "请编写一个测试用例,以验证登录功能的正确性。", "input": "登录表单包括用户名和密码字段,以及一个提交按钮。正确的用户名和密码为 'user123' 和 'password123'。", "output": "测试用例:\n1. 打开登录页面。\n2. 在用户名字段中输入 'user123'。\n3. 在密码字段中输入 'password123'。\n4. 点击提交按钮。\n5. 验证页面跳转到用户主页,并显示欢迎信息。\n预期结果:\n用户成功登录,页面跳转至用户主页,显示 '欢迎,user123'。" } | { "instruction": "解释回归测试的意义及其重要性。", "input": "", "output": "回归测试是一种软件测试方法,用于确认软件的新版本没有引入新的错误,且先前修复的问题未再次出现。其主要目的是确保代码更改(如功能增强、错误修复或性能优化)不会影响现有功能的正常运行。回归测试的主要重要性体现在以下几点:\n1. 质量保证:通过重复测试,确保软件的稳定性和可靠性。\n2. 降低风险:在发布新版本前发现潜在问题,避免生产环境中出现重大故障。\n3. 节省成本:尽早发现并解决问题,减少后续的维护和修复成本。\n4. 提高用户满意度:确保新版本的功能和性能提升,减少用户对软件的不满。\n总之,回归测试是软件开发过程中不可或缺的一部分,有助于保持软件的高质量和稳定性。" } |
3.1 人工编写少量种子指令
第一步,我们人工编写了一部分测试相关的指令数据,称为种子指令。这些指令被用来指导整个生成过程,决定了后续生成数据的分布和方向。
以下是部分种子指令示例:



