jieyingc/fast-failure-detection
GitHub: jieyingc/fast-failure-detection
利用特征工程与 XGBoost 对 LLM 生成的代码补丁进行预验证失败预测,帮助 agent 软件修复流程在完整测试前低成本过滤高概率失败补丁。
Stars: 0 | Forks: 0
# LLM 生成补丁的快速失败检测
本项目研究轻量级机器学习模型能否预测在运行完整的测试或 CI pipeline 之前,LLM-agent 生成的代码补丁何时可能会验证失败。
在 agentic 软件修复工作流中,验证每个候选补丁的成本可能很高。预验证失败过滤器可以通过跳过极有可能失败的补丁来节省计算资源,同时使丢弃成功补丁的风险保持可见。
## 项目范围
本仓库展示了项目的特征工程、建模、交叉验证和成本权衡分析组件。仅限团队内部的扩展(例如 stacking 实验)不包含在此公开的研究版本中。
## 数据集
- 来源:`SWE-bench/SWE-smith-trajectories`
- 划分:`tool`
- 任务:对生成的补丁结果进行二分类
- 标签:`resolved`
- `1`:补丁最终通过验证
- `0`:补丁验证失败
主实验仅使用非空补丁。
## 方法
pipeline 从两个来源提取特征:
- 补丁侧信息:
- 补丁长度
- 添加和删除的行数
- 修改的文件数量
- 修改的测试/配置/文档/初始化文件
- assertion、import 和 exception-handling 的变更
- 文件路径 token
- 补丁文本 token
- Agent-trajectory 信息:
- 消息数量和消息长度
- action 和 observation 数量
- submit、bash 和 edit 工具调用次数
- 来自 user、assistant 和 tool 消息的角色分离文本特征
主要模型族为使用结构化特征和 TF-IDF 文本特征的 XGBoost。Logistic Regression 和 Random Forest 被用作 baseline。
## 评估
主要评估使用按仓库分组的交叉验证:
- 外部划分:按 `repo_id` 进行 `GroupKFold(n_splits=10)`
- 内部划分:用于阈值选择的分组训练/验证划分
- 阈值设定:如果 `P(success) >= threshold`,则保留该补丁
这避免了在来自同一仓库的 trajectory 上进行训练和测试。
本项目报告了标准的分类指标以及一个面向效用的代理指标:
```
K = correctly skipped failed patches / wrongly discarded successful patches
```
更高的 `K` 意味着过滤器在每次错误丢弃一个成功补丁的同时,会跳过更多的失败补丁。
## 关键结果
最强大的实用模型为:
```
XGBoost + structured patch/trajectory features + assistant-message TF-IDF
```
它将盈亏平衡过滤比率从结构化 XGBoost baseline 的约 `1.77` 提高到了约 `2.39`,同时保持了比重度依赖 embedding 的变体更简单的模型。
请参阅 [results/final_report_table.md](results/final_report_table.md) 获取公开项目报告中使用的汇总表。
## 仓库结构
```
src/
data_loading.py Load SWE-smith trajectory data
features.py Extract patch and trajectory features
models.py Model factory for LogReg, RF, and XGBoost
evaluate.py Predictive and proxy-cost metrics
splits.py Repository-grouped split utilities
pipeline.py Cross-validation and threshold-selection pipeline
embeddings.py Optional assistant-message embedding helpers
experiments.py Public experiment presets and runner helpers
scripts/
build_feature_table.py
build_proxy_metadata.py
compute_dataset_stats.py
run_cv.py
run_experiments.py
docs/
methodology_summary.md
notebook_audit.md
notebooks/
Original exploratory notebooks. See docs/notebook_audit.md before using them
as public-facing material.
```
## 复现
安装依赖:
```
pip install -r requirements.txt
```
构建特征表:
```
python -m scripts.build_feature_table
```
运行默认的交叉验证配置:
```
python -m scripts.run_cv
```
运行公开的实验预设:
```
python -m scripts.run_experiments
```
脚本会将生成的输出写入 `results/` 目录下。大型生成的 CSV、缓存和探索性输出已被 Git 刻意忽略。
## 局限性
- 成本模型是一个代理指标,而不是经过部署校准的经济模型。
- 阈值的选择取决于丢弃有效补丁的可接受风险。
- 数据来自 SWE-smith 的 trajectory,因此对于其他 agent 框架或修复策略,结果可能会有所不同。
- 我们曾探索过 embedding 变体,但其边际收益并不能明确证明在主要的公开版本中增加复杂性是合理的。
标签:AI代码分析, Apex, XGBoost, 数据管道, 机器学习, 特征工程, 软件工程, 逆向工具