GitHub仓库中AI使用特征与演进的实证研究:来自代码注释的证据 Empirical Study on the Characteristics and Evolution of AI-usage in GitHub Repositories: Evidence from Code Comments
分析35k+AI引用注释,揭示开发者如何使用和调整AI辅助代码
前置知识
代码注释分析
通过挖掘源代码中的注释文本,可以捕捉开发者在编码时的意图、决策过程和反思。注释与代码紧密关联,能够提供比提交消息或文档更细粒度的开发活动证据。本研究通过分析明确提及AI工具的注释(如generated by ChatGPT),来追踪AI在实际项目中的使用情况。
本文的核心数据来源就是这些AI引用注释,理解如何从注释中提取和解读开发意图是理解研究方法的基础。
Dawid-Skene期望最大化算法
DS-EM是一种概率聚合方法,用于将多个标注者的标签整合为一致的真实标签。它通过EM算法同时估计每个样本的真实类别和每个标注者的可靠性(混淆矩阵)。对于每个样本i,其潜在真实类别Yi的先验为pi_k = P(Y = k),观测标签l(A)_i和l(B)_i服从混淆矩阵C(A)和C(B),假设独立性:P(l(A)_i, l(B)_i | Yi = k) = C(A)k,l(A)_i C(B)k,l(B)_i。
本文使用DS-EM聚合两个LLM的分类器结果,将大规模自动化注释的质量提升到接近人工标注的水平,这是研究能够扩展到3.5万条数据的关键技术。
BERTopic主题建模
BERTopic是一种基于Transformer的主题建模方法,采用五步流水线:使用句子嵌入编码文档,通过UMAP降维,用HDBSCAN密度聚类,构建词袋表示,最后用c-TF-IDF提取可解释的主题表示。与传统LDA不同,BERTopic不需要预先指定主题数量,能够自动发现文本中的语义模式。
本文用BERTopic分析首次变更提交消息,将8717条提交自动聚类成8类开发者行为模式,这是理解AI辅助代码如何被后续修改的核心分析方法。
研究动机
现有关于AI辅助编程的研究大多依赖受控实验或基准评估,测量模型在代码生成等任务上的性能,但这些研究反映的是人工或短期评估场景,无法真实反映开发者如何在项目中实际使用、调整和集成AI输出。虽然已有工作分析了提交、代码审查、pull request和issue讨论,但这些主要捕捉高层次的协作和协调活动,而开发者如何在源文件内部与模型生成的代码进行更细粒度的交互,仍然相对未被探索。
本文的目标是本研究旨在通过分析GitHub代码注释中明确引用AI使用的实例,以及关联的代码块和后续提交,系统性地研究开发者如何在现实世界的软件开发生命周期中集成、反思和修改AI辅助代码,并探索这种行为随时间的演进规律。
与已有工作不同的是,本研究不同于以往工作的地方在于关注代码注释这一细粒度的人工制品,它捕获了开发者在编码时的推理和反思,经常包含对模型参与的自承认(如generated by ChatGPT、suggested by Copilot、AI-generated, please review)。注释与代码共置,提供开发者在开发活动期间如何解释和修改AI生成内容的细粒度证据。
核心方法
研究采用多阶段、混合方法设计,结合大规模数据挖掘、人类定性编码、概率多模型标注和语义聚类。首先通过GitHub Code Search API收集2022年12月至2026年3月期间明确引用AI使用的代码注释,并提取关联的代码块。然后采用两阶段注释流程:先人工标注500个样本建立分类体系,再用LLM扩展标注至完整语料库,通过DS-EM概率聚合确保一致性。对于RQ2,追踪这些代码块的首次变更提交,用BERTopic进行主题建模和语义分组。对于RQ3,进行时间序列分析,观察AI使用行为的纵向演进。
核心创新在于利用代码注释这一独特视角来追踪AI在实际项目中的使用轨迹,并通过人类引导的LLM大规模标注加DS-EM概率聚合的方法,实现了在保持标注质量的同时将分析规模扩展到35361条注释。这避免了纯人工标注的不可行性,也克服了纯自动化方法的可靠性问题。另一个关键创新是将注释与其关联代码块以及后续提交链接起来,构建了从AI辅助代码生成到集成、修改的完整轨迹。
方法步骤详情
数据收集阶段:构造480个搜索查询模板,组合16个AI关键词(ChatGPT、GPT、Copilot等)、6个动作动词和4个连接词,通过GitHub Code Search API获得66960个匹配结果。经过两阶段过滤后保留35361条注释,覆盖12944个仓库。注释提取阶段:追踪每个文件的提交历史,定位匹配注释首次出现的提交,从补丁中提取关联的代码块,最终得到35278个代码块。人工标注阶段:随机选择500个平衡语言的样本,两名有6年以上编程经验的标注者独立编码,沿两个维度标注:任务类型和AI贡献类型。经过开放式编码和轴心编码,最终确定6个任务类型和4个AI贡献类型。LLM扩展标注阶段:使用gemma-4-31b和nemotron-3-super-120b两个开放权重模型,通过少样本提示进行标注。然后用DS-EM算法聚合两个模型的预测,以400个人工标注作为金标准初始化,迭代至收敛或达到100轮。首次变更提交提取阶段:从引入提交开始追踪代码块的后续修改,找到最早重叠该代码块的提交作为首次变更提交,成功检索12996个。主题建模阶段:对10139条首次变更提交消息(过滤后)应用BERTopic,使用BAAI-bge-base-en-v1.5嵌入,UMAP降维(n_neighbors=10, n_components=10, min_dist=0.2),HDBSCAN聚类(min_cluster_size=10, min_samples=5),得到388个主题。通过语义分组将相似主题合并为8类开发者行为模式。纵向分析阶段:按月聚合任务类型和AI贡献类型的标注计数,形成连续时间序列,排除Generic Mention类别以减少语义噪声。对每个序列进行归一化、三个月滚动平均平滑和IQR异常值裁剪,计算描述统计量和线性趋势斜率,使用Newey-West调整标准误差评估统计显著性。
技术新颖性
技术创新体现在多个方面:首次在大规模上系统性地分析了代码注释中的AI引用,填补了细粒度AI使用行为研究的空白;提出了人类引导的LLM标注加DS-EM概率聚合的两阶段标注框架,在保证质量的同时实现了规模扩展;将注释、代码块和后续提交链接起来,构建了完整的AI辅助代码生命周期视图;应用BERTopic对提交消息进行主题建模和语义分组,自动识别出8类后集成开发者行为模式;进行了近40个月的纵向分析,揭示了AI使用行为的演进趋势,这是首项系统性地追踪AI辅助编程实践随时间变化的实证研究。
实验结果
对于RQ1,人工标注的500个样本中,任务类型分布为:代码实现362个(89.82%)、代码增强20个(4.96%)、Bug识别与修复26个(6.45%)、测试23个(5.71%)、文档16个(3.97%)、通用提及97个(19.40%)。DS-EM扩展到完整数据集后,27581个有效注释中,代码实现18149个(72.04%)、代码增强4039个(16.03%)、文档1295个(5.14%)、测试1322个(5.25%)、Bug识别与修复388个(1.54%)。AI贡献类型分布为:实现类16137个(82.13%)、知识概念支持2798个(14.76%)、人工制品生成714个(3.63%)。对于RQ2,10139条首次变更提交消息通过BERTopic聚类和语义分组,识别出8类后集成行为:功能集成与扩展2769条(27.32%)、重构与清理1465条(14.45%)、Bug修复与更正1304条(12.86%)、配置依赖与环境管理810条(7.99%)、文档709条(7.00%)、测试与评估432条(4.26%)、数据模式与流水线处理128条(1.26%)、日志与监控72条(0.71%)。对于RQ3,纵向分析显示代码实现保持主导地位(均值u=0.739)但无显著趋势(b=-0.00080, p=0.449),代码增强显著增长(b=+0.00113, p=0.049),测试显著增长(b=+0.00097, p=0.004),文档显著下降(b=-0.00151, p=0.008),Bug识别与修复显著增长(b=+0.00021, p=0.025)。AI贡献类型中,实现类保持主导(u=0.814)但趋势不显著(b=-0.00004, p=0.970),知识概念支持显著增长(b=+0.00185, p=0.025),人工制品生成显著下降(b=-0.00181, p=0.006)。数据分布方面,2022年仅占0.31%,2023年7.80%,2024年19.78%,2025年52.41%,2026年19.69%,显示AI引用活动在2025年达到峰值。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| 任务类型标注 | Gwets AC1 | 0.7005 | 人工标注间AC1=0.760 | DS-EM达到人工标注92.2%的一致性水平 |
| AI贡献类型标注 | Gwets AC1 | 0.8128 | 人工标注间AC1=0.657 | DS-EM超过人工标注间一致性23.7% |
| DS-EM假阳性检测 | 识别比例 | 7697/34778 (22.14%) | 无自动化方法 | 有效过滤非真实AI引用 |
局限与改进
作者承认的局限性包括:检测AI相关注释依赖于关键词查询,可能引入假阳性(如人名Claude),通过人工验证随机子集缓解;注释和代码块的分类可能误解释实际任务,因为AI引用注释表达的是开发者意图;捕获的代码块可能包含非AI辅助代码,也可能未能捕获所有AI辅助的完整代码;链接AI引用注释和提交的假设是仓库历史保留时间顺序和作者身份,排除了异常时间戳或不一致元数据的提交;数据集仅限于Python和JavaScript的公共GitHub仓库,可能无法代表其他生态系统或闭源项目;只捕获自承认的AI使用,明确提及ChatGPT或Copilot等工具,可能低估了沉默或未承认的使用;由于AI辅助编程实践快速演进,发现应视为当前开源趋势的代表而非开发者行为的完整谱系。
独立分析的弱点
研究依赖开发者明确承认AI使用,可能遗漏大量实际使用AI但未在注释中声明的案例,导致数据集代表性不足。代码块提取依赖补丁可见性,可能无法准确定位完整功能单元,特别是在大范围重构或文件级修改场景中。首次变更提交的追踪假设提交粒度与代码块粒度一致,但实际上提交可能包含多个无关修改,引入噪声。时间窗口仅到2026年3月,无法捕捉更长周期的演进模式,特别是AI工具快速迭代可能带来的行为变化。仅关注首次变更提交,缺失了对AI辅助代码长期演变轨迹的分析,包括稳定化、重构和重复修改模式。Python和JavaScript的选择可能不适用于其他语言生态,如静态类型语言、函数式语言或特定领域语言。
未来方向
作者提出的未来工作包括:扩展分析至首次变更提交之外,捕捉AI辅助代码的长期演变,包括稳定化、重构和重复修改模式;扩展研究至Python和JavaScript之外,检验观察到的集成和适应行为是否可泛化到更多编程语言、生态系统和开发语境;表征开发者从AI寻求的知识和概念支持类型,评估当前AI工具在满足这些需求方面的有效性;研究持续的后集成修改,识别开发者需求与AI提供的支持之间的差距。基于研究发现的延伸方向包括:开发自动化的AI使用检测工具,不依赖显式注释;研究不同AI工具(Copilot、ChatGPT、Claude)对开发行为的不同影响;分析AI辅助代码的质量指标,如错误率、维护性、性能;探索团队和组织层面的AI使用模式,包括协作流程、知识共享和决策制定。
复现评估
研究提供了匿名化的复制包,包含注释指南、数据集和相关代码,但未明确说明开源许可证和匿名期。数据规模较大(35361条注释、12944个仓库、12996个提交),使用开源LLM(gemma-4-31b、nemotron-3-super-120b)进行标注,需要较大算力支持。研究方法文档较为详细,包括搜索查询模板、提示工程示例、BERTopic参数设置和DS-EM超参数,其他研究者可以在类似规模的数据上复现关键分析。但GitHub API的配额限制可能影响数据收集的完全复现,特别是搜索查询的执行和文件历史追踪。
论文图表
该图展示了一个真实的GitHub代码注释示例,展示了开发者在代码中使用EOF_SENTINEL = object() #cool flag to pass这样的注释,Copilot建议了一个标志,然后开发者接受了建议,注释为suggested by Copilot。初始提交消息是New architecture refactoring,在后续提交中,开发者用Finish refactoring new architecture的消息修改了相同的代码块。
这张图是理解研究问题的核心示例,展示了AI引用注释如何与代码块和后续提交相关联,提供了研究的数据来源和分析单元的直观说明,帮助读者理解AI辅助代码在实际项目中的真实形态和演变轨迹。