中文

面向 Pythonic 习惯用法的重构:基于大型语言模型的混合知识驱动方法

软件工程 2024-06-07 v1

摘要

Pythonic 习惯用法在 Python 编程社区中备受推崇且广泛使用。然而,许多 Python 用户发现使用 Pythonic 习惯用法有些困难。采用基于规则的方法或仅使用 LLM 方法并不足以克服代码习惯化的三个持久挑战,包括代码遗漏、错误检测和错误重构。受规则确定性和 LLM 可适应性的驱动,我们提出一种包含三个模块的混合方法。我们不仅编写提示来指示 LLM 完成任务,还调用分析规则接口 (ARI) 来完成任务。ARI 是通过引导 LLM 生成代码而生成的 Python 代码。首先,我们构建一个知识模块,包含 ASTscenario、ASTcomponent 和 Condition 三个要素,并引导 LLM 为后续使用生成 Python 代码以纳入 ARI 库。随后,对于任意无语法错误的 Python 代码,我们调用 ARI 库中的 ARI,从 ASTscenario 中提取 ASTcomponent,然后筛选出不满足条件的 ASTcomponent。最后,我们设计提示来指示 LLM 抽象和习惯化代码,然后调用 ARI 库中的 ARI 将非习惯化代码重构为习惯化代码。接下来,我们对我们的方法 RIdiom 与 Prompt-LLM 进行全面评估,评估九个已建立的 Pythonic 习惯用法。我们的方法在准确率、F1 分数和召回率方面表现优于 Prompt-LLM,同时保持与 RIdiom 相当的精度水平,这些指标在每个习惯用法的每个度量标准上都始终超过或接近 90%。最后,我们将评估扩展到四个新的 Pythonic 习惯用法。我们的方法在准确率、F1 分数、精度和召回率方面持续优于 Prompt-LLM,实现的度量值持续超过 90%。

关键词

引用

@article{arxiv.2406.03660,
  title  = {Refactoring to Pythonic Idioms: A Hybrid Knowledge-Driven Approach Leveraging Large Language Models},
  author = {Zejun Zhang and Zhenchang Xing and Xiaoxue Ren and Qinghua Lu and Xiwei Xu},
  journal= {arXiv preprint arXiv:2406.03660},
  year   = {2024}
}

备注

Accepted by FSE 2024,22 pages