前言
上篇文章使用EvalScope完成了从单一数据集单项能力评测,到多数据集综合评测,再到自定义数据集领域评测的完整实战。至此,本专栏的工具篇正式收官------从训练流程总览、OCR 与 EasyDataset 的数据获取处理,到 LLaMAFactory 的使用、参数详解与调优,再到评测方法与实战演练,大家手中已经集齐了大模型训练全链路的"武器库"。
武器既已备足,接下来便要在真正的战场上接受检验。从本篇开始,本专栏正式迈入实战篇:笔者将带领大家,把前面学到的每一件工具,按照"数据获取 → 数据处理 → 预训练 → 微调 → 强化学习 → 评测"的标准流程串联起来,亲手训练一个面向网络安全领域的垂直大模型。
为什么选择网络安全这个方向?原因有两点,都极具现实意义:
第一,安全赛道是大模型落地见效最快的"高地"之一。 Claude Mythos 在逆向分析、漏洞挖掘等任务上展现出的惊人能力,让网络安全成为各大模型厂商竞相角逐的焦点领域。可以说,谁在安全能力上率先突破,谁就掌握了大模型深度赋能的主动权。
第二,小参数模型同样大有可为,并非只有巨量参数才能出彩。 已有研究论文《VulnLLM-R: Specialized Reasoning LLM with Agent Scaffold for Vulnerability Detection》 证明,通过精心整理数据微调得到的 7B 规模模型,在漏洞检测任务上同样取得了不俗的效果。这说明,不依赖千亿级参数,走"精耕细作"的小模型路线同样行得通,对于资源有限但又想在面试和简历中打造亮点的同学来说,无疑是一条务实且高价值的路径。
训练垂直领域模型,第一步永远是数据。本期内容笔者只聚焦一件事:系统梳理网络安全大模型预训练所需的数据来源清单,针对每一类数据给出具体获取渠道和可执行的采集示例,为后续的预处理和训练打下坚实的地基。
一、数据来源清单:网络安全大模型的"教材"从哪里找?
笔者在《大模型训练全流程实战指南工具篇(五)------大模型训练全流程步骤详解与对应工具推荐》中曾强调,数据工程的第一步是文本采集。但要训练出一个专业性强、效果好的大模型,光会采集还不够,对目标领域的知识体系和数据分布有足够深刻的认知,才是数据工作的真正门槛。
网络安全领域的数据有一个鲜明特点:分散、异构、时效性强。论文存在于学术库中,标准挂在官网上,漏洞沉淀在数据库里,而最鲜活的实战经验则散落在各个技术社区和厂商报告中。想训练出一个真正"懂安全"的大模型,以下几类渠道最好一个都不要少。
1.1 电子书籍:系统化的知识底座
一本优质的网络安全专著,往往能够将一个方向的知识体系从头到尾讲透,其内容的系统性、连贯性和深度,是碎片化的博客文章难以比拟的。对于大模型而言,书籍类语料结构清晰、逻辑严密,有助于模型建立结构化的知识框架,是数据采集中质量最高的类别之一。
早在 2024 年,Anthropic 曾斥资数千万美元购买实体书籍用于训练,甚至为此专门建立数据工厂负责收集和扫描处理涉及版权侵权。这一消息一度冲上热搜,也从侧面印证了书籍语料在高质量模型训练中的分量。
但采集语料时不能只盯着网络安全专著。网络安全知识并非空中楼阁,它与计算机网络、操作系统、编程语言等基础学科紧密交织。因此,除了专业安全书籍,计算机网络、操作系统、体系结构等基础教材同样不可或缺。
具体来源推荐以下三类:
- 安全专业书籍 :国内如吴翰清的《白帽子讲Web安全》,系统讲解 Web 安全的攻防原理,是中文安全领域的入门经典;国外如 The Web Application Hacker's Handbook(《Web应用黑客手册》),被誉为 Web 渗透的"圣经",覆盖从信息收集到各类漏洞利用的完整知识体系。
- 网络基础书籍:谢希仁的《计算机网络》是国内高校的标准教材,讲解清晰、语言平实;Tanenbaum 的《计算机网络》和 Stevens 的《TCP/IP 详解 卷1》则是国际公认的经典,后者结合真实抓包讲解协议,与安全攻防场景天然契合。
- 计算机基础书籍:CSAPP(《深入理解计算机系统》)详细介绍了程序、内存与并发的底层原理;Silberschatz 的《操作系统概念》("恐龙书")对进程、内存与文件系统的讲解也堪称经典。

在书籍语料采集中,有一点要特别强调:贵精不贵多,关键在于书籍的结构合理性与权威性。一本好书的章节结构本身就是一张高质量的知识图谱------目录层次清晰、知识点由浅入深,解析成 Markdown 后天然保留着良好的层级结构,后续分块、蒸馏的效果都会更好;反之,劣质书内容东拼西凑、术语前后不一,喂给模型等同于教它错误知识,后续清洗也难以挽回。
笔者在日常工作中,一般按照以下标准来筛选书籍:
- 看作者与出版社:人邮、机械工业、电子工业、O'Reilly 等权威出版社的经典系列普遍靠谱;作者在该领域有实际工程或学术积累者优先。
- 看版本与口碑:优先选择多次再版的经典,避开"21天速成"式的拼凑之作;豆瓣评分、高校教材采用情况都是不错的参考依据。
- 试读目录与一章正文:结构清晰、术语规范、图表严谨的,才值得正式入库。
特别提醒: 书籍受版权保护,个人练手使用通常问题不大,但若模型计划商用,务必留意授权范围是否明确允许将内容用于模型训练。
1.2 学术论文与安全会议论文集:打牢前沿基础
学术论文是另一类不可替代的核心语料。论文语料的价值主要体现在如下几个方面:
- 原理基础:让模型理解攻击与防御背后的"为什么"------缓冲区溢出为什么发生、侧信道如何工作、联邦学习下的投毒攻击怎么防御;
- 数据支撑的可信性:论文经过同行评审,有实验数据和量化评估背书,是安全语料中可信度最高的一类。社区博客多是"经验之谈",而论文里的结论是"测出来的",模型从这类文本中学到的表述更严谨、更少幻觉;
- 前沿时效性:arXiv 预印本和顶会论文代表领域最新动向。像大模型安全攻防、人工智能驱动的漏洞挖掘、大模型越狱攻击这些近两年才火起来的方向,只有论文能第一时间覆盖

笔者在工作中主要从以下两个渠道获取论文语料:
- arXiv 的 cs.CR(密码学与安全)板块:预印本论文的主阵地,更新快,且提供免费的检索 API,是批量采集的首选。
- 四大安全顶会论文集:IEEE S&P、USENIX Security、ACM CCS、NDSS。
下面以 arXiv 的论文获取为例进行演示。假设笔者想要查找 arXiv 中计算机科学领域与 log4j 相关的安全论文,可以使用以下代码检索并获取论文元信息:
python
# arxiv_search.py:检索 arXiv cs.CR 板块的安全论文
import urllib.request
import urllib.parse
import xml.etree.ElementTree as ET
query = urllib.parse.quote("cat:cs.CR AND all:log4j")
url = (f"http://export.arxiv.org/api/query?search_query={query}"
f"&start=0&max_results=2") # 这里的max_results等可以调节查询数量
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
with urllib.request.urlopen(req, timeout=30) as resp:
root = ET.fromstring(resp.read())
ns = {"a": "http://www.w3.org/2005/Atom"}
for entry in root.findall("a:entry", ns):
# <id> 形如 http://arxiv.org/abs/2501.17760v1,从中提取论文 ID
raw_id = entry.find("a:id", ns).text.strip()
arxiv_id = raw_id.split("/abs/")[-1]
title = entry.find("a:title", ns).text.strip().replace("\n", " ")
summary = entry.find("a:summary", ns).text.strip().replace("\n", " ")
print("论文ID:", arxiv_id)
print("标题:", title)
print("摘要:", summary[:80], "...")
print("PDF下载链接: https://arxiv.org/pdf/" + arxiv_id)
print("---")
执行结果如下,大家可以根据输出的 PDF 下载链接直接获取对应论文:

1.3 NIST、MITRE等标准与框架: 权威规范知识源
如果说论文教模型"前沿知识"和"为什么",那么标准框架就教模型"怎么做才规范"。网络安全行业高度依赖标准化知识体系,这部分语料直接决定了模型在专业场景下输出的规范性、合规性与可信度。下面列举两个最权威的来源:
- NIST SP 800 系列 :覆盖风险管理、事件响应、密码学应用等方方面面。例如 SP 800-61《计算机安全事件处理指南》就是应急响应场景的必读材料,官网可免费下载 PDF。
- MITRE ATT&CK :堪称安全领域的"知识图谱"。它把攻击手法按战术、技术、子技术进行结构化组织,并附有真实案例与缓解措施,且提供官方 STIX 格式的 JSON 全量下载。每条攻击技术就是一个完整的结构化对象。
以 MITRE ATT&CK 为例,一条攻击技术的 JSON 表示如下:
json
{
"type": "attack-pattern",
"name": "Phishing: Spearphishing Attachment",
"description": "Adversaries may send spearphishing emails with a malicious attachment...",
"kill_chain_phases": [{"phase_name": "initial-access"}]
}
实际采集时,只需将 name、description 与缓解措施等字段拼装成自然语言段落,即可得到高质量的语料。
1.4 CVE、CWE 等漏洞缺陷数据库: 漏洞与缺陷数据的不二法则
漏洞知识是网络安全大模型区别于通用模型的核心竞争力之一。在日常使用场景中,用户经常会问:"这个代码会触发哪个 CVE 漏洞?""这个漏洞该如何修复?"面对这类问题,模型必须给出准确、规范的答案。
先来看 CVE 官方库。CVE 是漏洞编号的全球标准,由 MITRE 维护,每条记录包含漏洞标题、描述、受影响产品与参考链接。官方提供免费的 REST API,按编号即可查询完整记录,无需鉴权。下面是一段根据 CVE ID 查询漏洞详情的脚本:
python
# cve_search.py:通过 CVE 官方 API 查询单条漏洞记录
import json
import urllib.request
CVE_ID = "CVE-2021-44228"
url = f"https://cveawg.mitre.org/api/cve/{CVE_ID}"
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
with urllib.request.urlopen(req, timeout=30) as resp:
data = json.load(resp)
cna = data["containers"]["cna"]
desc = next((d["value"] for d in cna["descriptions"]
if d["lang"].startswith("en")), "")
affected = cna["affected"][0]
print("编号:", data["cveMetadata"]["cveId"])
print("标题:", cna.get("title", ""))
print("厂商/产品:", affected["vendor"], "/", affected["product"])
print("描述:", desc[:100], "...")
执行结果如下:

拿到结构化的字段后,可以借助大模型将其转化为自然语言描述,例如:
"CVE-2021-44228 是 Apache Log4j2 中的 JNDI 注入漏洞,攻击者可远程未授权利用,建议升级至 2.17.1 以上版本。"
这样一来,结构化的漏洞数据就能快速转化为模型易于学习的可读语料。
单条 API 查询无法满足大规模采集需求,大家也可以在 GitHub 上查找 CVE 官方维护的全量镜像仓库,例如 CVEProject/cvelistV5 ,克隆后可按年份、厂商等维度筛选所需数据,实现按年份等筛选条件的批量获取。
除了 CVE,CWE 库 同样是不可或缺的漏洞知识来源。两者的关系可以这样理解:CVE 记录的是"具体某个产品暴露了哪个漏洞",而 CWE 分类的是"漏洞属于哪一类缺陷"------缓冲区溢出、SQL 注入、越权访问......每条 CWE 都包含缺陷名称、详细描述、典型代码示例与缓解建议,是让模型理解漏洞成因与代码层面防御的关键语料。
python
# cwe_parse.py:下载并解析 CWE 官方全量数据
import urllib.request
import zipfile
import io
import xml.etree.ElementTree as ET
url = "https://cwe.mitre.org/data/xml/cwec_latest.xml.zip"
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
with urllib.request.urlopen(req, timeout=120) as resp:
data = resp.read()
with zipfile.ZipFile(io.BytesIO(data)) as zf:
name = [n for n in zf.namelist() if n.endswith(".xml")][0]
root = ET.fromstring(zf.read(name))
ns = {"c": "http://cwe.mitre.org/cwe-7"}
weaknesses = root.find("c:Weaknesses", ns)
for w in list(weaknesses)[:3]:
desc = w.find("c:Description", ns).text.strip().replace("\n", " ")
print(f"CWE-{w.get('ID')} | {w.get('Name')} | {desc[:60]}...")
print("弱点总数:", len(weaknesses.findall("c:Weakness", ns)))
执行结果如下:

近千条 CWE 缺陷定义,每条都是"缺陷定义 + 代码示例 + 修复建议"的完整结构,模板化后就是优质且成体系的漏洞成因语料。类似的还有 Exploit-DB(公开漏洞利用代码库),它适合让模型理解"漏洞如何被实际利用",从而在防御场景中给出更具针对性的建议。
1.5 技术社区与安全厂商博客:鲜活的实战经验
论文和标准解决"知识",但网络安全同样是实战驱动的行业------一次真实攻击事件的复盘,价值可能超过十篇论文。这部分语料侧重实践性、时效性与案例细节。
具体来源推荐两个:
- 中文安全社区:FreeBuf、安全客、先知社区等,聚集了大量漏洞分析、渗透技巧、事件复盘文章。例如 FreeBuf 上针对每次重大漏洞(如 Log4Shell)的技术分析文章,都是很好的语料。
- 安全厂商的威胁分析报告:奇安信、360、微步在线等厂商会定期发布 APT 组织分析、年度安全报告,例如奇安信每年发布的《网络安全威胁分析报告》,内容详实、专业性强,是高质量语料的重要来源。
英文渠道可补充 Krebs on Security、Google Project Zero 博客等。
需要提醒的是:这部分数据量最大、噪声也最多,转载重复、广告导流、标题党内容混杂其中,是后续清洗环节的重点关照对象。(下一篇内容会讲解完整的数据清洗步骤)
二、现成数据集获取:站在技术和社区肩膀上
上一节重点解决了"从哪些渠道采集原始语料"的问题,覆盖了书籍、论文、标准、漏洞库和社区博客等来源。但数据采集不止一条路------除了从零开始爬取和整理,还可以直接利用现成的、经过初步加工的高质量数据集,大幅节省时间和人力成本。本节就聚焦两类最具实操价值的获取方式:一是用大模型"蒸馏"出定制化数据集,二是直接从开源社区取用现成资源。
2.1 EasyDataset蒸馏数据:用大模型造语料
当前,闭源模型和超大参数量的开源模型性能遥遥领先。虽然训练的小模型不可能在每一个维度上都追平大模型,但借助模型蒸馏的思想,可以让大模型把推理思路"浓缩"成高质量的数据集,再让小模型通过拟合这些数据,在特定任务上逼近大模型的效果。
蒸馏技术在当前专业模型训练的数据集构造中已经占据了举足轻重的地位。一个广为人知的例子是李飞飞团队发表的论文《s1: Simple test-time scaling》------他们仅花费约 50 美元,就基于通义千问 Qwen2.5-32B 微调出了一个在推理能力上比肩 ChatGPT o1 和 DeepSeek R1 的模型,而微调所用的数据集中,就有一部分正是蒸馏自 Google Gemini 2.0 Flash Thinking。
笔者在 大模型训练全流程实战指南工具篇(八)------EasyDataset问答数据集生成流程 中介绍的EasyDataset工具就提供了数据蒸馏的功能。
EasyDataset 的蒸馏原理并不复杂,但设计很巧妙:它既会考虑任务场景的全覆盖,又会兼顾数据的多样性和平衡性。其核心机制是通过多级标签逐层构造完整的领域知识树,再针对每个叶子标签自动生成问题与答案。

下面以"渗透测试"场景为例,演示完整的蒸馏操作流程:
第一步:创建项目,设定顶级主题
在 EasyDataset 中创建一个新项目,项目名称将作为蒸馏任务的顶级主题。假设要蒸馏渗透测试相关的数据集,可以将项目命名为"Web安全攻防:渗透测试实战指南"------这也是笔者常用的做法:直接借用一本知名书籍的名称作为主题锚点,并在项目描述中填入该书的完整目录,让大模型在生成标签时有一个清晰的知识边界。

第二步:进入蒸馏模块,配置生成参数
进入项目后点击"数据蒸馏"模块,选择"全自动蒸馏数据"。在配置界面中,需要设定两个关键参数:
- 标签层级与每层标签数量:层级越深,生成的标签粒度越细,覆盖的知识点也越具体。例如 2 层可能只覆盖"Web 安全 → SQL 注入"这样的粗粒度主题,而 3~4 层则可以细化到"Web 安全 → SQL 注入 → 报错注入 → 报错函数利用"这样的细粒度知识单元。
- 每个标签生成的问题数量:决定最终数据集的规模。
配置完成后,右侧会实时预览预计生成的问题总数,方便根据训练需求调整参数。


第三步:启动蒸馏,实时跟踪进度
点击"开始自动蒸馏"后,界面会详细展示任务执行进度,包括标签构建阶段、问题生成阶段和答案生成阶段各自的状态与完成条数,方便你随时掌握任务进展。

第四步(可选):手动精细化调整
除了全自动蒸馏,EasyDataset 也支持手动逐级生成标签------你可以先定义一级标签,再逐层展开细化,每一步都有人工介入把关。这种方式更适合对领域知识有清晰把控的场景,大家可以按需探索。
2.2 开源论文、社区现成数据集
除了自行采集数据之外,开源社区上更是有不少可以直接使用的安全数据资产:
-
Hugging Face / ModelScope 上的安全数据集 :搜索 "cybersecurity"、"安全" 等关键词,可以找到安全问答对、漏洞检测代码等数据集。以笔者开头提到的论文 《VulnLLM-R: Specialized Reasoning LLM with Agent Scaffold for Vulnerability Detection》 为例,该论文的数据集就发布在了huggingface上,大家可以直观的看到数据的格式并拿来使用:

-
CTF 竞赛 Writeup:各大 CTF 平台的赛后题解是极好的"攻防实操"语料,笔者建议单独归类采集。
实操建议: 在使用 Hugging Face 等平台上的现成数据集时,建议先查看数据集的标签分布、数据量级和许可证信息(License),确认其是否允许商用、是否与训练目标匹配,避免后续合规风险。
以上就是笔者今天分享的全部内容啦!本教程示例代码可以关注笔者同名公众号:大模型真好玩 ,并私信大模型训练免费获得。
三、总结
本期内容正式开启了实战篇。笔者系统梳理了训练网络安全大模型的七类核心数据来源------学术论文与顶会、NIST/MITRE 等标准框架、CVE/CWE 漏洞库、电子书籍、技术社区与厂商报告、开源现成数据集,以及通过 EasyDataset 蒸馏生成的定制化语料------每类都给出了具体的获取渠道和可复现的采集代码。
数据收集完成,但此刻手里还是异构的原料:论文是双栏排版的 PDF,需要解析版面、提取正文;电子书图文混排,表格和代码块散落其中;社区文章里转载重复、广告插入、标题党内容层出不穷......这些噪声和格式壁垒,如果不加以处理,会直接拉低模型的训练质量。
那么,如何将这些"毛坯料"加工成模型真正能消化的高质量数据集?下一期《预训练数据的处理》告诉大家,大家敬请期待!
除大模型训练外,笔者也在同步更新《深入浅出LangChain&LangGraph AI Agent 智能体开发》免费专栏,要说明该专栏适合所有对 LangChain 感兴趣的学习者,无论之前是否接触过 LangChain。该专栏基于笔者在实际项目中的深度使用经验,系统讲解了使用LangChain/LangGraph如何开发智能体,目前已更新 50 讲,并持续补充实战与拓展内容。欢迎感兴趣的同学关注笔者的掘金账号与专栏,也可关注笔者的同名微信公众号大模型真好玩 ,每期分享涉及的代码均可在公众号私信: LangChain智能体开发免费获取。