代码助手写错版本API:1,872个Python库的发布级记录让四个模型修复率齐升到68.5%–69.9%
核心概要
代码助手常写出属于旧版本、在用户已安装版本中已不存在的Python调用。PyPI API Drift 对1,872个最常下载库的55,565个发布做免导入静态抽取,记录签名与发布间变化,并区分真正移除与仅退出文档API。在预注册的代码修复实验中,同一模型家族四个模型借助该API历史把兼容且保意图的迁移率提升到68.5%–69.9%,无辅助时为7.0%–56.6%。
深度剖析
Python库的公开API随发布不断变化,代码助手却无法判断某个调用在用户安装的那个版本里是否还存在。 此前的版本感知基准规模小、手工整理或冻结在某一时点,缺少一份可持续刷新的、记录哪个公开API存在于哪个库哪个发布的基础设施。 这份记录覆盖1,872个库、55,565个发布,含15,258,652条发布间变化和210,535条去重后的破坏性变化。
记录靠静态解析构建,不导入也不执行任何库代码,只按需读取wheel中需要的字节。 抽取用Python的ast解析模块,记录函数完整签名、类成员、导入与__all__,并对连续发布逐路径做差。 在300个随机项目的8,149个发布上重放抓取逻辑,只下载wheel字节的8.5%,中位发布成本81 KB和两次请求。
一个名字从公开API中消失时,只有在新发布上通过可达性检验证明它无法再被属性访问,才记为移除。 若名字仍可达或静态无法判定,则记为一次非破坏性的left_public_api并向后延续,避免把退出__all__误判为删除。 在与流水线隔离的AI智能体运行时审计中,高置信度破坏性变化的确证率为91.9%(Wilson 95%区间86.6–95.2%),样本为134个此前未用过的库。
在预注册的代码修复实验中,把数据集里的API历史交给模型,能提高它把旧版本代码改成新版本可运行代码的比例。 同一模型在闭卷条件下成功率为56.6%,仅给新发布文档时为60.1%,给API历史时为68.5%。 同一实验在来自同一模型家族的四个模型上重复,借助API历史时修复成功率落在68.5%–69.9%,而各模型闭卷成绩为7.0%–56.6%。
启示与展望
这份记录面向使用Python库及其编码智能体的开发者与研究者,覆盖1,872个最常下载库各自至多80个最近正式发布,抽取为静态且免导入。检查器在14个广泛使用包的1,823个源文件上按各自已安装依赖版本运行,共报出20条结果。
作者明确称这是高精度、低召回的记录而非完整真值:编译扩展只能经stub看到,装饰器改写的参数未被建模,运行时生成的名字常缺失。全部验证由与流水线隔离的AI智能体完成,未经人工裁定;干净样本外精度为88.8%和91.9%,标注为样本内的数字是在依据同批样本修复后测得。
