跳到内容

介绍GitHub Copilot的代码引用

今天,我们宣布了GitHub Copilot的一个私有测试版,其中包含一个用于检测与GitHup上公共代码匹配的代码建议的过滤器。

介绍GitHub Copilot的代码引用
作者

对您使用的代码做出更明智的决定。在GitHub Copilot建议与公共代码匹配的罕见情况下,此更新将显示代码出现的存储库列表及其许可证。立即注册私人测试版.

去年,GitHub Copilot,世界上第一个接受数十亿行公共代码培训的大规模AI对程序员,吸引了100多万开发人员,帮助超过27000个组织更快、更有效率地构建。在此期间,许多开发人员告诉我们,他们想看看GitHub Copilot的建议何时与公共代码匹配。

今天,我们宣布GitHub Copilot的私人测试版代码引用它包括一个更新的过滤器,用于检测和显示与GitHub上的公共代码匹配的代码建议的上下文。当过滤器被启用时,GitHub Copilot会使用大约150个字符的周围代码检查代码建议,并将其与GitHub.com.Matches上所有公共代码的索引进行比较,以及它们出现在其中的每个存储库的信息都会显示在编辑器中。开发人员现在可以选择是阻止包含匹配代码的建议,还是允许这些建议包含有关匹配的信息。

为什么?一些人想从别人的工作中学习,另一些人可能希望获得依赖而不是引入新的应用程序逻辑,还有一些人希望为类似的工作提供或获得荣誉。无论是什么原因,很高兴知道什么时候有类似的代码。

让我们看看它是如何工作的。

GitHub Copilot代码引用的工作原理

由于要索引数十亿个文件,而延迟预算仅为10-20毫秒,这甚至是工程上的奇迹。不过,如果存在匹配项,编辑器中会显示一条通知,其中显示:(1)匹配的代码,(2)该代码出现的存储库,以及(3)管理每个存储库的许可证。

为什么代码引用很重要

在创建代码引用工具的过程中,我们发现了一些有趣的事情:

第一,我们以前的研究表明匹配出现在GitHub Copilot建议中的不到1%。但这1%并不是均匀分布在所有用例中。在现有应用程序与周围代码的上下文中,我们几乎从未看到匹配项。但在一个空的或几乎空的文件中,我们更经常看到匹配项。

建议严重偏向于提示,因此GitHub Copilot可以为您当前的任务提供量身定制的建议。这意味着,在一个有很多上下文的现有应用程序中,您将得到一个针对您的代码定制的建议。但在一个空的或几乎空的文件中,几乎没有上下文。所以,你更有可能得到一个符合公共规范的建议。

我们还发现,当建议与公共代码匹配时,这些匹配经常出现在数十个(如果不是数百个)存储库中。在某些方面,这并不奇怪,因为支持GitHub Copilot的模型类似于巨型概率机。出现在许多存储库中的代码片段更有可能是模型检测到的“模式”,与我们在公共代码中其他地方看到的模式类似。

例如,Java项目研究发现高达11%的存储库可能包含与发布到Stack Overflow的解决方案类似的代码,并且这些代码片段中的绝大多数没有属性。关于Python的另一项研究发现许多匹配项过于通用,无法追溯到原始用法。小规模研究发现堆栈溢出答案包含来自Android应用程序的代码。

最后,具有匹配代码的存储库通常由多个、有时是冲突的许可证管理,这使得将匹配归因于其源更加困难。通过查阅参考列表,开发人员现在可以:

  • 确定是否要归因于、归因于什么以及归因于谁,而不是从一开始就简单地阻止匹配。
  • 通过研究其他开发人员处理类似问题的方法,向他们学习。
  • 依赖开源库以避免新的业务逻辑。
  • 在接受匹配建议之前评估代码的上下文。
  • 发现新项目并为上游做出贡献。

构建更好的开发人员体验和社区

这仅仅是一个开始。随着GitHub不断创新,我们将始终努力帮助开发人员保持流动,创造性地构建,并保持与社区的透明连接。我们很高兴您能够使用代码引用来尝试GitHub Copilot。

快乐编码。


从GitHub了解更多信息

工程类

工程类

直接来自GitHub工程团队的帖子。
GitHub环球2024

GitHub环球2024

获取AI、DevEx和安全全球开发者活动十周年门票。
GitHub复制

GitHub复制

不要独自飞行。免费试用30天。
在GitHub工作!

在GitHub工作!

查看我们当前的职位空缺。