Gitlink首次提交
下面是中文翻译:
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 秒即可完成一次故障定位。
提示词模板如下所示:
完整的提示词可以在 src/core/prompt.py 中找到。
src/core/prompt.py
我们在 Defects4J 基准,也就是 tag v2.0.1 上评估 PingFL。该基准可以在以下地址找到:
Defects4J:https://github.com/rjust/defects4j
可以通过以下命令安装所需的 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 仓库中。
Defects4jMod/defects4j-2.0.1-jvm-mod
最后,修改 Config 目录下的配置文件。你需要重点关注以下属性:
Config
java_agent_lib
MethodCallGraphBuilder/target/MethodCallGraphBuilder-1.0.jar
bug_exec
api_key
预处理阶段是运行 PingFL 的前提条件。它负责缺陷复现、缺陷信息收集、代码仓库分析等工作。
通过以下命令运行预处理:
python preprocess.py
现在,你可以使用以下命令运行 PingFL 来定位所有缺陷:
python run_all.py
如果要定位单个缺陷,可以使用如下示例命令:
python run.py --config config/pingfl_gpt4o_gpt4turbo.yml --project Chart --bugID 1
所有缺陷的列表位于 dataset/all_bugs.csv。
dataset/all_bugs.csv
运行 PingFL 后,调试结果会生成在 DebugResult 目录下。
DebugResult
要评估 PingFL 的性能,只需运行:
python evaluate.py
PingFL是一个可以进行软件缺陷自动调试的智能体系统,其可以自主地在源码中插入打印语句,分析程序的运行时状态,从而实现更准确的故障定位。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
下面是中文翻译:
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 的提示词模板
提示词模板如下所示:
完整的提示词可以在
src/core/prompt.py中找到。从零开始运行 PingFL
第 1 步:安装基准数据集
我们在 Defects4J 基准,也就是 tag v2.0.1 上评估 PingFL。该基准可以在以下地址找到:
Defects4J:https://github.com/rjust/defects4j
第 2 步:安装环境
可以通过以下命令安装所需的 Python 环境:
然后,将
Defects4jMod/defects4j-2.0.1-jvm-mod目录下的文件应用到你已经安装好的 defects4j 仓库中。最后,修改
Config目录下的配置文件。你需要重点关注以下属性:java_agent_lib:设置为 Java agent 的路径,即MethodCallGraphBuilder/target/MethodCallGraphBuilder-1.0.jarbug_exec:设置为你自己的 Defects4J 执行文件路径api_key:设置为对应模型所需的你自己的 API key第 3 步:预处理
预处理阶段是运行 PingFL 的前提条件。它负责缺陷复现、缺陷信息收集、代码仓库分析等工作。
通过以下命令运行预处理:
第 3 步:运行 PingFL
现在,你可以使用以下命令运行 PingFL 来定位所有缺陷:
如果要定位单个缺陷,可以使用如下示例命令:
所有缺陷的列表位于
dataset/all_bugs.csv。评估 PingFL
运行 PingFL 后,调试结果会生成在
DebugResult目录下。要评估 PingFL 的性能,只需运行: