LibShift Search:一种相似性驱动的模型,用于将已废弃的 Python API 方法映射到当前替代方案

《Information and Software Technology》:LibShift Search: A similarity-driven model for mapping deprecated Python API methods to current alternatives

【字体: 时间:2026年09月09日 来源:Information and Software Technology 4.6

编辑推荐:

   摘要 背景:使用大语言模型(LLM)进行源代码生成已迅速进步,新模型现在能够生成语法正确且功能上有用的代码。然而,一个持续存在的问题仍然存在:这些模型往往由于依赖静态历史训练数据,会推荐过时的或已弃用的 API。随着第三方库的快速演变,这种错配对现实世界中的软件开发构成了挑战

  

摘要
背景:使用大语言模型(LLM)进行源代码生成已迅速进步,新模型现在能够生成语法正确且功能上有用的代码。然而,一个持续存在的问题仍然存在:这些模型往往由于依赖静态历史训练数据,会推荐过时的或已弃用的 API。随着第三方库的快速演变,这种错配对现实世界中的软件开发构成了挑战,特别是在维护代码质量和符合当前最佳实践方面。
目标:本研究通过将 API 演变建模为语义搜索问题,来解决 LLM 生成的代码与当前库用法之间的脱节。目标是开发一个模型无关的检索系统,能够识别准确的、特定版本的弃用方法替代方案。
方法:我们引入了 LibShift Search,这是一个检索框架,使用包括代码、方法名和文档字符串在内的多模态嵌入,从流行的 Python 库的当前版本中恢复语义等价的方法。该系统在 pandas、Pydantic、PyTorch、NumPy、SciPy 和 SQLAlchemy 六个库的 96 个已弃用方法上进行了评估。嵌入是使用通过对比三元组损失训练来最大化语义接近度的模型计算的。我们构建了 LibShift 数据库,这是一个版本感知的存储库,捕获跨库版本的方法级变更,以支持该系统。
结果:LibShift Search 仅使用代码嵌入就实现了超过 85.5% 的 Recall@10,展示了在检索适当替代方法方面的强劲性能。即使在没有弃用元数据或文档字符串的情况下,嵌入也是有效的,展示了在各种设置下一致的检索性能。LibShift 数据库进一步支持验证跨库版本的 API 存在性和兼容性。
结论:我们的框架标志着迈向自动化发现弃用 API 潜在替代方案的第一步,无需人类反馈或文档作为中介。通过使用多模态嵌入和版本感知数据库,LibShift Search 提供了一种可扩展的方法,用于检查并对齐生成式 AI 输出与当前 API 用法,并减少对开发者驱动纠正循环的依赖。

引言
软件工程由变革定义并以其为特征。从演变的设计模式到第三方库的频繁更新,开发者必须定期适应 shifting 技术格局。API 的演变——即库修改、弃用或替换现有方法——是这种变革中最具有破坏性和成本高昂的方面之一 [1], [2]。研究表明,即使库维护者记录了破坏性变更,由于缺乏可见性或工具支持,往往观察到迁移远离弃用 API 的滞后 [1], [3]。
随着开发者和维护者转向生成式 AI 工具来编写和审查代码,这一现实变得越来越关键。在 2024 年 Stack Overflow 开发者调查 [4] 中,收集了超过 65,000 名开发者的回答,76% 的报告称他们在开发过程中使用或计划使用 AI 工具,较前一年的 70% 有显著增长。具体而言,62% 的专业开发者表示他们目前使用 AI 工具,另有 13.8% 计划很快采用。补充这些发现的是 GitHub 的软件开发中的 AI 调查 [5],该调查询问了美国、巴西、德国和印度的 2000 名企业开发者,结果显示超过 97% 在工作中使用过 AI 编码工具。虽然大语言模型(LLM)在代码生成方面显示出前景,但它们并非免于陷阱;几项研究表明 LLM 经常推荐弃用或不正确的 API,特别是在训练数据过度代表过时用法的情况下 [3], [6]。例如,ChatGPT 4 被观察到推荐 pandas DataFrame 的 append() 方法,这是一个在版本 2.0.0 中弃用的函数,尽管该弃用早于模型的知识截止日期。GitHub Copilot 中也持续存在类似的模式,除非受到上下文线索的明确引导,否则它通常默认使用常见的遗留用法。图 1 说明了 ChatGPT-4 推荐弃用的 append() 方法的一个具体示例;图 2 显示了当模型被明确告知弃用并提供候选替代方案时的修正响应;图 3 展示了 GitHub Copilot 中的相同模式。
问题根源在于一个根本性的错配:LLM 是在庞大的历史语料库上训练的,而实际中的代码正确性取决于最新的、特定版本的行为。Almeida 等人 [2] 的工作表明,ChatGPT 不成比例地推荐过时或未授权的库,这是由于其依赖历史数据,而 Liang 等人 [1] 证明即使使用单样本提示,LLM 在库升级期间也难以建议正确的替代方案。这些局限性超越了孤立的例子;它们揭示了一个更深层的结构监督缺失。大语言模型专注于预测可能的标记,而不是确保时间准确性,并且它们目前缺乏标准化、可搜索的系统来验证或更新过时的 API 方法。
这一差距在生产代码中构成了现实世界的风险。开发者假设其正确性,可能会传播弃用的调用,从而危及可维护性或安全性。现有的缓解努力,如 AutoAPIEval [3], [7],事后评估 API 用法的正确性,而没有提供主动的、自动化的替代方案。
此外,软件维护中的研究确认,开发者通常依赖社交线索、GitHub 示例或 StackOverflow 讨论来发现替代 API [3],但这种社区驱动的滞后意味着罕见或边缘案例的弃用更不可能被自动纠正。Hora 等人 [8] 关于 Pharo 开发者迁移行为的研究也强调,缺乏自动化是及时适应的关键阻碍。
这项工作旨在解决弥合 LLM 与实时 API 演变之间差距的核心问题。作为第一步,引入了 LibShift Search,这是一个模型无关的框架,使用方法名、代码和文档(文档字符串)的多模态嵌入执行弃用 API 替代方法的语义检索。在 pandas、Pydantic、PyTorch、NumPy、SciPy 和 SQLAlchemy 六个主要 Python 库的 96 个已弃用方法上进行了评估。LibShift Search 仅使用代码嵌入实现了超过 76.7% 的 Recall@7。
LibShift 数据库为这种方法提供支持,这是一个版本感知的知识库,跟踪超过 100 个库版本中的类、方法和文件级快照,启用细粒度方法跟踪和弃用映射。正如通过六个主要 Python 库(例如 pandas、Pydantic、PyTorch)的实验结果验证的那样,LibShift Search 在检索正确的方法替代方案时实现了超过 92.2% 的 Recall@15,即使在文档字符串不可用的低资源设置下也是如此。
通过结合结构化历史知识与实时语义分析,我们为软件演化自动化的日益增长的研究领域做出了贡献 [1], [2], [3],并提出了一种实用系统,引导 LLM 远离弃用 API,为更安全、版本感知的代码生成奠定基础。
本研究调查以下研究问题:
RQ1:使用代码、名称和文档字符串嵌入的语义相似性搜索能否可靠地检索弃用方法的适当替代方案?
RQ2:检索性能在不同软件库和代码模态之间如何变化?
RQ3:在没有文档的情况下,结构和词汇代码特征在识别替代方案方面的有效性如何?
结果表明,基于代码的嵌入是最强的单个模态,结合特征可提高性能,进一步在前 45 名集合中检索到 88 个替代方案。重要的是,所提出的方法即使在缺少明确文档或弃用标记时也能工作,并且在此类元数据不可靠的现实场景中检索相关候选项。
最后,提供了一个全面的复制包。1 其中包括数据集、工件、脚本和结果,使他人能够复制和扩展我们的工作。为进一步支持研究和从业者社区,我们已经将 LibShift Search 工具及其底层数据作为 web 服务在 https://libshift.org/ 上公开可用。这个平台允许研究人员探索 API 迁移模式并测试新的嵌入模型,同时为从业者提供一种工具,以快速识别其 Python 项目中弃用方法的潜在替代方案。
本文其余部分结构如下。第 2 节建立了理论基础,第 3 节回顾了相关工作。我们的方法论在第 4 节中全面描述,实验结果在第 5 节中呈现和讨论。最后,第 6 节和第 7 节分别呈现了效度威胁和结论。

章节摘要
背景
在本节中,我们概述了与本工作相关的关键概念,提供了软件库演变的背景,即(1)方法映射,以及(2)用于描述我们 LibShift 框架的术语。
相关工作
在本节中,我们涵盖了现有研究的光谱,从早期关于 API 演变和迁移的研究到特定于 Python 的弃用和修复研究。然后我们列举了检索技术用于支持 API 演变的用法,一直到这些领域中生成式人工智能的新兴使用。最后,我们将现有研究与我们的工作进行对比,以解释 LibShift 搜索的必要性。
软件迁移是维护和演化期间反复出现的需求。此类
方法论
本节全面概述了 LibShift Search 框架中使用的数据收集、预处理、特征提取和建模技术。主要目标是在库版本之间识别和映射弃用方法到其适当的替代方案。图 4 提供了端到端管道的高层视图,然后详细描述每个阶段。
结果
为了评估我们在从流行的 Python 库中恢复语义等价方法的可靠性,我们调查了其在多样化数据集上的性能以及结构代码特征与词汇代码特征的有效性。为此,我们解决以下研究问题:
效度威胁
我们在三个常见维度上讨论了本研究潜在的有效性威胁:内部、外部和构念效度。
结论
在本文中,我们解决了软件维护中一个持久且未充分探索的挑战:自动识别弃用 API 的替代方法。随着现代软件库的快速演变,开发者越来越多地依赖 LLM 等工具来指导其代码生成。然而,由于依赖过时的训练数据和缺乏版本感知,这些模型经常建议弃用或不正确的 API 调用,危及代码质量和可维护性 [7], [55]

CRediT 作者贡献声明
Anushkrishna Venkatakrishnan:撰写 – 原稿,可视化,验证,软件,方法论,调查,数据策展,概念化。
Bader Alkhazi:撰写 – 审阅与编辑,项目管理,资金获取。
Mohamed Wiem Mkaouer:撰写 – 审阅与编辑,监督,资源,项目管理,概念化。

写作过程中生成式人工智能及人工智能辅助技术的声明
在准备本作品过程中,作者使用了 Grammarly 和 ChatGPT 以改善论文的语言和可读性。在使用该工具/服务后,作者审阅并编辑了内容,并对出版物的内容承担全部责任。

利益冲突声明
作者声明以下可能被视为潜在利益冲突的财务利益/个人关系:无
如果有其他作者,他们声明他们没有已知的竞争财务利益或个人关系,这些关系可能影响本报告中的工作。

致谢
本工作由科威特大学研究资助编号 [FI02/22] 支持和资助。

Anushkrishna Venkatakrishnan|Bader Alkhazi|Mohamed Wiem Mkaouer
美国纽约州罗切斯特理工学院
相关新闻
生物通微信公众号
微信
新浪微博
  • 搜索
  • 国际
  • 国内
  • 人物
  • 产业
  • 热点
  • 科普

热点排行

    今日动态 | 人才市场 | 新技术专栏 | 中国科学人 | 云展台 | BioHot | 云讲堂直播 | 会展中心 | 特价专栏 | 技术快讯 | 免费试用

    版权所有 生物通

    Copyright© eBiotrade.com, All Rights Reserved

    联系信箱:

    粤ICP备09063491号