目录

下面是中文翻译:


PingFL 概览

PingFL

PingFL 是一个 LLM 智能体系统,它通过引入程序动态信息来实现更准确的故障定位。

相关工作已发表于 ASE’25 “Let the Code Speak: Incorporating Program Dynamic State for Better Method-Level Fault Localization”。

受人类开发者常用的 print debugging 技术启发,PingFL 由两个协作式 LLM 智能体组成:一个是故障定位智能体,即 FL agent,它配备了多个工具,用于定位根本原因;另一个是 print debugging 智能体,即 PD agent,它的目标是验证 FL agent 提出的可疑位置。

在 Defects4J 基准上的评估结果表明,PingFL 优于其他基于 LLM 的方法,并且在跨项目场景中超过了传统故障定位技术。此外,我们发现 LLM 在解决故障定位任务时会表现出特定的策略和工具使用模式。

PingFL 具有较高的成本效益:平均只需花费 0.22 美元和 104.62 秒即可完成一次故障定位。

FL Agent 和 PD Agent 的提示词模板

提示词模板如下所示:

FL Agent 的提示词 PD Agent 的提示词

完整的提示词可以在 src/core/prompt.py 中找到。

从零开始运行 PingFL

第 1 步:安装基准数据集

我们在 Defects4J 基准,也就是 tag v2.0.1 上评估 PingFL。该基准可以在以下地址找到:

Defects4J:https://github.com/rjust/defects4j

第 2 步:安装环境

可以通过以下命令安装所需的 Python 环境:

conda create -n PingFL python=3.11.11
conda activate PingFL
pip install -r requirements.txt

然后,将 Defects4jMod/defects4j-2.0.1-jvm-mod 目录下的文件应用到你已经安装好的 defects4j 仓库中。

最后,修改 Config 目录下的配置文件。你需要重点关注以下属性:

  • java_agent_lib:设置为 Java agent 的路径,即 MethodCallGraphBuilder/target/MethodCallGraphBuilder-1.0.jar
  • bug_exec:设置为你自己的 Defects4J 执行文件路径
  • api_key:设置为对应模型所需的你自己的 API key

第 3 步:预处理

预处理阶段是运行 PingFL 的前提条件。它负责缺陷复现、缺陷信息收集、代码仓库分析等工作。

通过以下命令运行预处理:

python preprocess.py

第 3 步:运行 PingFL

现在,你可以使用以下命令运行 PingFL 来定位所有缺陷:

python run_all.py

如果要定位单个缺陷,可以使用如下示例命令:

python run.py --config config/pingfl_gpt4o_gpt4turbo.yml --project Chart --bugID 1

所有缺陷的列表位于 dataset/all_bugs.csv

评估 PingFL

运行 PingFL 后,调试结果会生成在 DebugResult 目录下。

要评估 PingFL 的性能,只需运行:

python evaluate.py
关于

PingFL是一个可以进行软件缺陷自动调试的智能体系统,其可以自主地在源码中插入打印语句,分析程序的运行时状态,从而实现更准确的故障定位。

4.3 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号