Page 238 - 《软件学报》2026年第5期
P. 238
张添翼 等: LLM-Extractor: 基于大语言模型的软件配置间约束提取方法 2117
的语句. LLM-Extractor 将这些语句输入给 LLM 并提供少量样本案例, 抽取 E C 对软件功能 E F 的依赖关系, 最后将
找到的 Require 关联关系加入 CFRG 中.
(2) E C -E C 关系抽取
这一步的目的是抽取配置项之间的直接关联关系. 由于第 3.1.1 节中的配置标注步骤已经标注了每个语句中
的软件配置项, LLM-Extractor 只需筛选出直接包含多个配置项的语句, 进而引导 LLM 分析这些语句抽取多个配
置之间的直接关联. 多个配置之间的直接关联可以分为 3 种情况: 1) LeadTo 关系, 表示一个或多个配置条件成立
时, 会导致特定的影响, 该种影响可能是配置生效相关的, 也可能是系统功能状态相关的. 例如从文档语句“If fsync
is set to off, the setting of wal_sync_method does not take effect”中可以提取得到: (fsync==off) LeadTo AtStatus
(wal_sync_method, doesn’t take effect). 2) Require 关系, 该种关联关系结构与条件导致型相反, 由配置条件作为配
置生效或者特定系统功能正常运行的必要条件. 例如从配置文档语句“resource_track_duration is valid only when
enable_resource_track is set to on”中可以提取: Effect(resource_track_duration, valid) Require (enable_resource
_track==on). 3) Otherwise 关系, 这种关系存在于配置建议、配置警告语句中, 句中建议或者要求配置项应满足一
定的取值条件, 以达到系统正常运行等目的, 这些目的需要结合该句语句的上下文进行分析获得. 例如从 “You are
advised to set max_cached_tuplebufs to a value greater than or equal to twice of max_changes_in_memory”中可以提取
(max_cached_tuplebufs≥max_changes_in_memory) Otherwise AtStatus(cache for logical decoding not enough).
借助 LLM 提示工程, 辅以思维链和少样本学习方法, LLM-Extractor 分 3 个步骤提取上述的 3 种关联关系:
1) 判断是否存在可检测的配置条件; 2) 提取所有配置条件并使用合取析取连接; 3) 判断这些组合配置条件是否构
成上述 3 种逻辑关系, 并输出关联关系. 获得输出后 LLM-Extractor 在 CFRG 中添加新的关联关系和配置状态实
体. 对于在 3 种逻辑关联关系涉及的 Effect, LLM-Extractor 分成两类处理: 1) 对于配置生效的影响, LLM-Extractor
在 CFRG 中添加一个配置状态实体 E CS , 并添加 RelatedTo 关系将 E CS 关联到对应的软件配置项 E C ; 2) 不涉及软
件配置项, 这种情况 Effect 可能可以关联 CFRG 中已有的软件功能实体 E F , 即 Effect ∈ E FS , 此时 LLM-Extractor 通
过向量匹配的方式匹配 Effect 与 E FS , 若相似度高于特定阈值 s, 则认为该 Effect 与该 E FS 相同. 若 Effect 无法匹配
E FS , LLM-Extractor 在 CFRG E F . 对于
到已有的 中添加新的 E FS 节点, 但是该节点不关联已有的软件功能实体
E Cond Otherwise E FS 关系, 可以把这种关系实际等同于 not E Cond LeadTo E FS , 并在 CFRG 中添加相应的条件节点
E Cond 和 LeadTo 关系.
(3) E F -E F 关系抽取
这一步的目的是在 CFRG 上进一步添加软件功能 E F 之间存在的依赖关系, 进而链接可能通过多个 E F 节点相
E C 节点. 通过第 2.2.1 节的经验研究我们发现, 软件功能实体之间也可能存在一定的约束关系, 例如在图 5
关联的
中, audit logs 依赖 auditing function 的开启. 同时通过图 5 的例子可以发现, 这些功能间依赖可能传递配置约束关
系. 因此抽取功能间的依赖关系, 有助于提取经过多层传递形成的复杂配置间约束.
通过第 2 节的配置文档分析我们发现, 软件功能实体及其状态间的依赖关系具有 3 方面特点: 1) 一般不直接
出现在配置文档的文本描述中, 需要研究人员结合专家经验判断; 2) 一般出现在同一章节涉及的功能实体之间. 例
如在配置项 wal_receiver_status_interval 的描述中提到“If this parameter is set to 0, the standby server does not send
information”, 根据 CFRG 初始化规则, 我们从该句中提取软件功能实体“the standby server”以及对应的功能状态
“does not send information”, 同时补充相反状态“can send information”. 而在同一章节的配置项 hot_standby 的描述
中, 我们发现 hot_standby 的功能是“hot_standby specifies whether to allow connections and queries on a standby
server during its recovery”. 研究人员基于软件使用和运维经验, 认为“connections and queries on a standby server”应
当依赖于“the standby server can send information”. 从上述的例子中我们发现, 研究人员的判断过程结合了涉及功
能描述的文本以及自身经验, 而且这两个功能实体均出现在“standby server”章节中. 我们认为 LLM 在使用大量各
类数据预训练的过程中可以获得此类经验, 因此 LLM-Extractor 调用 LLM 接口, 引导 LLM 判断不同文段描述中
的功能实体是否存在依赖关系.

