t4n15hq/defi-exploit-finetune
GitHub: t4n15hq/defi-exploit-finetune
基于 rekt.news 事后分析与链上交易时间线构建数据集,通过 QLoRA 微调小型语言模型,用于辅助生成结构化 DeFi 漏洞利用分析报告的端到端学习项目。
Stars: 1 | Forks: 0
# DeFi 漏洞利用分析师微调
本仓库记录了一个端到端的学习项目:构建 DeFi 漏洞利用分析数据集,使用 QLoRA 微调小型指令模型,在 Gradio 应用背后部署 adapter,并评估该模型在漏洞事后分析中是否真正变得更加实用。
模型产物已作为 LoRA adapter 托管在 Hugging Face 上:
- 模型: [t4nishq/qwen3-4b-defi-exploit-analyst](https://huggingface.co/t4nishq/qwen3-4b-defi-exploit-analyst)
- 演示空间: [t4nishq/defi-exploit-analyst](https://huggingface.co/spaces/t4nishq/defi-exploit-analyst)
- 基础模型: `Qwen/Qwen3-4B-Instruct-2507`
## 项目成果
本次微调作为领域风格和任务格式的适配取得了成功。与基础模型相比,该 adapter 能够更稳定地以 DeFi 安全分析师的格式作答:包括根本原因、攻击流程、链上指标、影响、控制措施和待解决问题。
该项目也暴露了一个关键局限:仅靠微调并不能使模型成为精确事件事实的可靠来源。在定性基准测试中,尽管该 adapter 改善了结构和领域框架,但当 prompt 未提供来源上下文时,它仍会幻觉出地址、日期、区块链和漏洞利用机制。
主要的经验在于,这是一次非常出色的首次微调实践,但下一个生产级别的版本应将微调模型与对源文章及链上证据的检索结合起来。
## 仓库内容
| 路径 | 用途 |
|---|---|
| `app.py` | 延迟加载 LoRA adapter 的 Hugging Face Space Gradio 应用 |
| `requirements.txt` | Space 应用的运行时依赖 |
| `data/articles/` | 按链/类别分组的 rekt.news 来源文章文本 |
| `data/all_addresses.csv` | 整合后的地址提取输出 |
| `data/all_tx_hashes.csv` | 整合后的交易哈希提取输出 |
| `scripts/` | 文章抓取与分类辅助脚本 |
| `new/` | 地址提取、Etherscan 获取、多链获取及中间数据集构建脚本 |
| `training/training_pipeline.py` | 主要训练样本生成流水线 |
| `training/clean_dataset.py` | 数据集清理与去重处理 |
| `training/split_dataset.py` | 创建训练集/评估集划分 |
| `training/hf_finetune.py` | Hugging Face QLoRA 微调入口 |
| `training/benchmark_compare.py` | 基础模型与 adapter 的定性基准测试运行器 |
| `training/render_benchmark_report.py` | 静态基准测试报告渲染器 |
| `training/training_data.jsonl` | 最终清理后的聊天数据集 |
| `training/train.jsonl` | 训练集划分 |
| `training/eval.jsonl` | 评估集划分 |
| `training/benchmark_prompts.jsonl` | 固定的基准测试 prompt 集 |
| `reports/` | 用于提交基准测试快照和结果摘要的目录 |
## 数据集
最终数据集包含:
| 划分 | 行数 |
|---|---:|
| 完整清理后数据集 | 2,487 |
| 训练集 | 2,289 |
| 评估集 | 198 |
| 基准测试 prompt | 10 |
每行训练数据均采用聊天格式的 JSONL 记录,包含:
- `system`: DeFi 安全分析师行为指令。
- `user`: 关于漏洞利用摘要、漏洞类别、攻击机制、链上证据、预防或分诊的问题。
- `assistant`: 基于源文章上下文和交易时间线上下文生成的结构化答案。
- `metadata`: 漏洞利用标识、地址、链和示例类型。
该数据集由两个证据流构建而成:
- 来自 `rekt.news` 的叙述性事件报告。
- 通过 Etherscan 兼容 API 获取的链上交易/地址时间线。
目标不是训练一个通用的区块链模型。目标更为狭窄:教导一个紧凑的指令模型,使其能够基于 DeFi 事件上下文撰写漏洞利用事后分析风格的报告。
## 数据集流水线
```
flowchart LR
A["rekt.news article text"] --> B["article classification"]
B --> C["attacker address extraction"]
C --> D["Etherscan and multichain timeline fetching"]
D --> E["article + timeline pairing"]
E --> F["chat example generation"]
F --> G["cleanup and dedupe"]
G --> H["train/eval split"]
H --> I["QLoRA fine-tune"]
I --> J["benchmark + Space app"]
```
重要的清理步骤:
- 移除了 15 条受中文/日文/韩文 (CJK) 污染的生成内容。
- 移除了 14 条重复的 `(exploit, address, type)` 示例。
- 修复了多漏洞文章标签的解析问题。
- 修复了 `-rekt2`、`-rekt3` 和 `-rekt4` 等后续标识的文章加载问题。
- 保留了源文章和核心 CSV 摘要在仓库中。
- 将可重建的大容量 API JSON 缓存排除在 git 之外。
## 训练运行
已完成的训练运行使用了以下配置:
| 设置 | 值 |
|---|---|
| 基础模型 | `Qwen/Qwen3-4B-Instruct-2507` |
| 方法 | QLoRA / LoRA adapter |
| 量化 | 4-bit NF4 |
| LoRA rank | 32 |
| LoRA alpha | 32 |
| Epochs | 2 |
| 最大序列长度 | 4096 |
| 梯度累积 | 32 |
| 硬件 | Hugging Face Space Dev Mode 上的 NVIDIA L4 |
| 运行时间 | 3小时 26分钟 |
最终训练输出:
| 指标 | 值 |
|---|---:|
| 最终训练损失 | 1.161 |
| 最终评估损失 | 1.248 |
| 最终评估 token 准确率 | 0.6758 |
| 训练样本/秒 | 0.369 |
| 训练步数/秒 | 0.012 |
结果解读:
- 损失曲线稳步下降,说明 adapter 学习了数据集分布。
- 评估损失相比于早期检查点有所改善,并且最终与训练损失接近,因此没有出现明显的灾难性过拟合迹象。
- 约 0.676 的 token 准确率对于长篇结构化生成来说是合理的,但这并不等同于事实准确度。
- 最重要的评估依然是定性的:即模型是否陈述了正确的漏洞利用机制,并拒绝捏造无根据的事实。
## 基准测试结果
基准测试在 10 个 prompt 上对比了基础模型和微调 adapter:
- 已知漏洞利用问题。
- 关于钱包模式、预言机操纵、跨链桥分诊、审计盲区和事后分析的泛化问题。
- 采用并排答案审查,而非多项选择评分。
观察到的结果:
- 微调 adapter 通常能产生更好的 DeFi 特定结构。
- 它使用了更多的安全分析框架:根本原因、控制措施、事件时间线、可疑指标、爆炸半径和待解决问题。
- 与基础模型相比,它与目标答案风格更为契合。
观察到的弱点:
- 当 prompt 不包含来源证据时,它仍会捏造具体的事件事实。
- 有几个基准测试答案看起来很完善,但包含了错误的地址、日期、链或机制。
- 这意味着该 adapter 应被视为分析师写作助手,而不是独立的真相来源。
基准测试的教训非常重要:微调改善了行为,但要保证事实可靠性,仍需引入知识检索。
## 应用
`app.py` 中的 Gradio 应用刻意保持轻量:
- 从 `HF_REPO` 加载 adapter 仓库。
- 检测仓库是 PEFT adapter 还是完整模型。
- 自动为基础模型加载 adapter 仓库。
- 使用延迟加载,以便 Space 可以在拉取模型之前启动。
- 通过 `HF_TOKEN` 或 `HUGGING_FACE_HUB_TOKEN` 支持私有模型仓库。
这使得部署与训练分离开来。该应用用于模型演示和手动探测,不用于权威的事件归属。
## 经验教训
当目标行为非常具体时,微调的效果最好。这个项目很有价值,因为任务具有清晰的形态:DeFi 漏洞利用事后分析,包括根本原因、攻击流程、证据、缓解措施和不确定性。
数据集质量比原始行数更重要。少数受污染或重复的行很容易被忽视,但它们会直接影响模型行为。在训练前进行清理是值得的。
训练指标是必要的,但还不够。较低的评估损失表明了学习的发生,但手动基准测试审查表明,模型仍可能充满自信地犯错。
QLoRA 对于学习来说非常实用。一个 4B 模型,结合 4-bit 加载和 LoRA adapter,在单张 L4 GPU 上成功完成了训练。该 adapter 仅约 132 MB,这使得推送和部署比处理完全合并的模型要容易得多。
长上下文的代价很高。8192 token 的运行在 L4 上触碰了 GPU 显存限制。将其减少至 4096 token 并增加梯度累积使得运行得以稳定。
下一个好版本应该使用检索。对于事实性的 DeFi 漏洞利用分析,模型应在推理阶段接收相关文章和交易时间线,而不是依赖记忆中的事件细节。
## 局限性
在没有来源支撑和人工审查的情况下,此模型不应用作权威的安全报告生成器。
已知局限:
- 可能会幻觉出漏洞利用细节、地址、时间戳、链和交易流程。
- 可能会对生成训练样本的风格过拟合。
- 对于数据集中未能清晰表示的事件,可能会生成看似合理但不正确的事后分析。
- 不独立验证实时链上数据。
- 不能替代人工漏洞利用调查。
## 下一次迭代
下一个版本应侧重于可靠性,而不仅仅是增加训练量:
- 增加对 `data/articles/` 和获取的交易时间线的检索功能。
- 构建包含预期事实和明确通过/失败标准的基准测试。
- 根据事实正确性对答案进行评分,而不仅仅是风格。
- 在缺少来源证据时加入拒绝回答的行为。
- 增加正确答案为“不确定”的示例。
- 将生成的训练数据与人工验证的黄金示例分离开来。
## 鸣谢
源文章来自 rekt.news。链上数据通过 Etherscan 兼容 API 获取。本仓库是一个学习项目,将公开的事件叙述和公开的链上数据打包成用于 DeFi 安全分析的微调工作流。
标签:AI安全, Chat Copilot, DeFi, Gradio, Hugging Face, QLoRA, Qwen, rekt.news, 事故调查, 勒索软件攻击, 区块链安全, 去中心化金融, 大模型微调, 安全事件分析, 安全分析师, 智能合约, 模型幻觉, 知识库检索, 网络安全, 逆向工具, 链上分析, 隐私保护