Page 246 - 《软件学报》2026年第5期
P. 246
张添翼 等: LLM-Extractor: 基于大语言模型的软件配置间约束提取方法 2125
我们事先人工分析了每条提示词并交叉确认答案, 完成实验后再由研究人员对实验结果进行双重评估和标注, 最
后整合评估结果. 实验结果如表 12 所示, 从表中我们可以发现, LLM 在此类需要结合知识经验进行推理的问题上
表现相对较差, 使用 GPT-4o 的实验精确率在 0.68–0.72 之间, 而使用 GPT-4o-mini 的实验精确率仅在 0.25–0.32 之
间, 分析实验数据我们认为 GPT-4o-mini 更倾向于认为两个功能节点之间存在依赖关系, 从而输出了更多的错误
依赖. 综合召回率等其他指标我们认为, LLM 在此类综合理解推理任务上的应用能力仍有待加强.
E C -E C 关联抽取实验结果
表 11
软件名称 提示次数 模型 Precision Recall Accuracy F1 score
GPT-4o-mini 0.696 6 0.953 8 0.736 8 0.805 2
openGauss 114
GPT-4o 0.879 5 0.948 1 0.912 5 0.877 2
GPT-4o-mini 0.676 5 0.958 3 0.733 3 0.793 1
PostgreSQL 45
GPT-4o 0.866 7 0.963 0 0.888 9 0.912 3
GPT-4o-mini 0.5 0.846 2 0.648 6 0.628 6
Squid 37
GPT-4o 0.764 7 0.928 6 0.864 9 0.838 7
表 12 E F -E F 关联抽取实验结果
软件名称 提示次数 模型 Precision Recall Accuracy F1 score
GPT-4o-mini 0.258 1 0.8 0.324 3 0.390 2
openGauss 37
GPT-4o 0.714 3 0.909 1 0.864 9 0.8
GPT-4o-mini 0.318 2 0.7 0.6 0.437 5
PostgreSQL 45
GPT-4o 0.684 2 0.866 7 0.822 2 0.764 7
4.4 LLM-Extractor 与已有程序分析方法的对比评估
本节将通过实验探究 LLM-Extractor 与已有程序分析方法相比各有何优劣.
4.4.1 对比方法和实验系统选择
本节选择了 cDep 方法 [13] 作为对比方法, cDep 是一种基于 Soot [53] 程序分析框架开发的配置间约束提取方法,
该方法可以分析使用 Java 和 Scala 语言编写的软件源代码, 通过控制流和数据流分析提取源代码中存在的软件配
置间约束. cDep 不仅可以提取单个软件内的配置间约束, 还能分析同软件栈内跨不同软件的配置间约束, 本节仅
探究单个软件中配置间约束的提取任务.
为了对比 LLM-Extractor 和 cDep 方法相比各有何优劣, 本节选择 HDFS [54] 作为实验系统, HDFS 是 Hadoop 生
态中的重要组件, 它使用 Java 编程语言编写, 并且具有完整的具有配置对应关系的配置文档, HDFS 系统的基本情
况如后文表 13 所示.
4.4.2 LLM-Extractor 在 HDFS 上的提取效果
本节使用 LLM-Extractor 分析了 HDFS 配置文档 [55] 中出现的 425 个配置项, 根据文档描述构建 HDFS 文档
的 CFRG, 并基于该 CFRG 分析提取配置间约束, 同时本文为了比较 LLM-Extractor 与 cDep 在配置间约束提取任
务上的各自优劣, 还分析了 cDep 提取 HDFS 中配置依赖的实验数据, 如表 14 所示. 从实验结果可以看出, LLM-
Extractor 在 HDFS 系统上也表现出良好的泛化能力, 提取出 37 条配置间约束, 精确率超过 0.82, 其中绝大部分
(33/37) 为生效类型约束. cDep 在 Hadoop 软件栈中提取配置间约束的精确率为 87.9% [13] , 在这一项上整体优于
LLM-Extractor, 本文认为这得益于 cDep 较为先进的程序分析方法设计, 以及大语言模型相对不稳定的输出. 具体
在 HDFS 系统上, cDep 共提取出 93 条软件内配置依赖.
通过对二者输出结果的分析本文发现两者所提取的配置约束维度不同, 例如 cDep 输出结果中“Control
Dependency, dfs.balancer.keytab.enabled, dfs.balancer.keytab.file, org.apache.hadoop.hdfs…Balancer, *”表示了一条控
制依赖, 但是缺乏关键的控制条件和违反后果, 需要结合进一步的人工分析和测试确认. 而 LLM-Extractor 的输出
结果“dfs.datanode.peer.stats.enabled==false LeadTo NotEffect(dfs.datanode.outliers.report.interval)”中则包含了明确

