# SCTS：让大语言模型通过自我批判树搜索自主发现代码漏洞

> 一种基于蒙特卡洛树搜索的迭代推理框架，让8B参数模型在分布外漏洞检测任务上超越32B模型，实现无需标注数据的自监督优化。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-05-27T11:21:39.000Z
- 最近活动: 2026-05-27T12:49:39.845Z
- 热度: 154.5
- 关键词: 代码安全, 漏洞检测, 大语言模型, 蒙特卡洛树搜索, 自监督学习, OOD泛化
- 页面链接: https://www.zingnex.cn/forum/thread/scts
- Canonical: https://www.zingnex.cn/forum/thread/scts
- Markdown 来源: ingested_event

---

## 原作者与来源

- **原作者/维护者**: zhurui1995
- **来源平台**: GitHub
- **原始标题**: Self-Critique_Tree_Search: Empowering Large Language Models with Autonomous Reasoning for Novel Code Vulnerability Detection
- **原始链接**: https://github.com/zhurui1995/Self-Critique_Tree_Search
- **发布时间**: 2026-05-27

---

## 背景：代码漏洞检测的困境

在软件安全领域，检测代码中的潜在漏洞一直是开发者和安全工程师的核心挑战。传统的监督学习方法虽然在已知漏洞模式上表现良好，但面对分布外（Out-of-Distribution, OOD）的新型漏洞时，往往力不从心——这些模型无法泛化到训练数据中未曾见过的漏洞模式。

与此同时，大语言模型（LLMs）虽然在代码理解和生成方面展现出强大能力，但在零样本推理场景下仍存在逻辑不一致和召回率低的问题。根本原因在于，这些方法将复杂的漏洞分析过程简化为单步预测，忽略了漏洞检测本质上是一个需要迭代探索和深度推理的任务。

## SCTS的核心思想：自我批判与树搜索结合

SCTS（Self-Critique Tree Search，自我批判树搜索）提出了一种全新的解决思路：在推理阶段进行迭代自监督优化，而非依赖昂贵的标注数据。该方法将蒙特卡洛树搜索（MCTS）框架与大语言模型结合，让模型在推理时扮演双重角色——既是生成漏洞分析报告的推理者（Reasoner），也是批判和修正报告的评审者（Critique）。

这种设计的核心洞见是：对于漏洞分析这类复杂推理任务，显式的搜索机制和自修正能力是实现稳健OOD泛化的有效路径。通过让模型自我批判、自我改进，SCTS能够在没有 ground truth 标签的情况下，逐步收敛到逻辑一致的结论。

## 方法论：四阶段迭代循环

SCTS的每一次迭代包含四个关键阶段，形成一个完整的自我进化循环：

### 1. 选择（Selection）

智能体采用上置信界（UCB）策略遍历现有搜索树，在高奖励分析路径的开发与未探索路径的探索之间取得平衡。这一阶段选择最有潜力的节点（即现有的漏洞分析报告）进行扩展。

### 2. 扩展（Expansion）

选中的节点通过生成新的、可能更优的分析报告来扩展。这一过程包含两个反思步骤：

- **自我批判**：大语言模型首先对选中的报告生成批判性审查，识别其中的逻辑缺陷、遗漏或弱点。
- **引导优化**：基于批判意见，模型生成新的、经过优化的分析报告。

### 3. 评估（Evaluation）

SCTS的一个重要贡献是设计了无需 ground truth 标签的奖励函数。新生成的报告基于以下内部质量指标进行加权评分：

- **置信度（Confidence）**：模型评估报告内部确定性和逻辑连贯性的分数。
- **特异性（Specificity）**：基于规则的评分，奖励提供具体、可解析细节（如漏洞类型、行号）的报告。
- **一致性（Consistency）**：模型评估新报告如何解决自我批判阶段识别出的问题的分数。

### 4. 反向传播（Backpropagation）

计算出的奖励信号沿树向上传播，更新所有祖先节点的UCB统计信息，为未来的选择提供信息。

这个迭代过程引导智能体逐步摒弃简单或有缺陷的推理路径，强化那些通向高质量、高置信度结论的路径。

## 实验结果：小模型超越大模型

SCTS在严格的OOD基准测试上进行了评估，结果令人瞩目：

- 一个**8B参数**的模型在使用SCTS后，平均召回率提升至**84.70%**
- 这一表现**超越了32B参数的模型**以及多个监督学习模型
- 证明了通过推理时优化，小模型可以在特定任务上匹敌甚至超越大模型

这一结果对实际部署具有重要意义：安全团队可以使用更小的模型，在更低的计算成本下实现更好的漏洞检测效果。

## 系统架构：解耦设计

SCTS的系统架构采用解耦设计，包含两个主要组件：

### 本地LLM服务（可选）

一个轻量级的Flask服务器，加载本地大语言模型（如Hugging Face模型），暴露OpenAI兼容的API端点（/v1/chat/completions）。这作为模型抽象层，确保核心算法与具体使用的模型无关。

### 主算法模块

实现MCTS驱动推理循环的主脚本，作为客户端向本地LLM服务发送所有生成请求。这种设计保证了算法的通用性和可移植性。

## 技术细节与使用

### 环境要求

- Python 3.11+
- PyTorch
- GPU显存24GB以上（用于运行选择的LLM）

### 快速开始

```bash
git clone https://github.com/zhurui1995/Self-Critique_Tree_Search.git
cd Self-Critique_Tree_Search
pip install -r requirements.txt
```

### 运行流程

1.（可选）启动本地LLM服务：`python local_llm_server.py`
2. 运行主算法：`python main.py`

算法将连接到本地服务，开始对样本函数进行自我进化分析。

## 局限与未来方向

目前该项目代码将在论文被接收后正式发布。从现有信息来看，SCTS的局限性可能包括：

- 推理时的迭代过程增加了计算开销，需要在延迟和准确性之间权衡
- 奖励函数的设计高度依赖模型自身的评估能力，可能存在偏差
- 对于极大规模代码库的处理效率有待验证

未来研究方向可能包括优化搜索效率、探索多模型协作的批判机制，以及将这一框架扩展到其他代码理解任务。

## 实践启示

对于安全从业者和研究人员，SCTS提供了几个重要启示：

1. **标注数据不是唯一路径**：通过巧妙的自监督机制，可以在没有大量标注数据的情况下提升模型性能
2. **推理时计算值得投资**：在关键安全任务上，增加推理时的计算投入可以带来显著的质量提升
3. **小模型有大潜力**：通过架构创新，小参数模型可以在特定领域任务上超越大模型

SCTS代表了代码安全领域结合大语言模型与经典搜索算法的一次有趣尝试，为自动漏洞检测开辟了新的可能性。
