Refactoring to Pythonic Idioms: A Hybrid Knowledge-Driven Approach Leveraging Large Language Models

2024年06月06日
  • 简介
    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在RIdiom中的九个已建立的Pythonic习惯进行了全面评估。我们的方法表现出卓越的准确性、F1值和召回率,同时保持与RIdiom可比的精度水平,所有指标的每个习惯的数值均始终超过或接近90%。最后,我们将评估扩展到四个新的Pythonic习惯。我们的方法始终优于Prompt-LLM,实现的指标值始终超过90%的准确性、F1值、精度和召回率。
  • 图表
  • 解决问题
    该论文旨在解决Python编程社区中Pythonic习惯用法的问题,即代码习惯化中的三个挑战:代码缺失、错误检测和错误重构。作者提出了一种混合方法,旨在通过ARIs和LLMs的结合来实现更准确、更高效的Pythonic习惯用法检测和重构。
  • 关键思路
    本文提出了一种混合方法,将ARIs和LLMs结合起来,以实现更准确、更高效的Pythonic习惯用法检测和重构。作者首先构建了一个知识模块,包括AST场景、AST组件和条件,然后提示LLMs生成Python代码,用于构建ARIs库。然后,通过ARIs从ARIs库中提取AST组件,并过滤掉不符合条件的组件。最后,通过提示LLMs将非习惯用法的代码重构为习惯用法的代码。
  • 其它亮点
    本文的实验结果表明,该方法在九个已建立的Pythonic习惯用法上具有优越的准确性、F1分数和召回率,同时保持与RIdiom相当的精度水平。作者还扩展了实验,验证了该方法在四个新的Pythonic习惯用法上的有效性。此外,作者还提供了一个ARIs库,可以用于其他Pythonic习惯用法的检测和重构。实验使用的数据集和代码均已开源。
  • 相关研究
    最近的相关研究包括:《Pythonic:Python编程习惯》、《Python Cookbook》、《Fluent Python》等。
PDF
原文
点赞 收藏 评论 分享到Link

沙发等你来抢

去评论