GitHub Copilot改变了开发人员编写代码的方式。但是,当它创建与另一个公共存储库中已有的代码类似的代码时,它也可能会产生问题。2022 年,GitHub 推出了一项功能,允许用户自动屏蔽匹配公共代码的建议。据 GitHub 发言人称,该系统的触发率不到 1%。但有时,开发人员可能想查看这些代码片段是什么 - 要么使用它们(在其公司设置的许可限制范围内),要么使用该片段来自的整个库。
因此,为了找到中间立场,GitHub 今天推出了 GitHub Copilot 代码引用功能的内测版,为开发人员提供了这种选择。打开代码引用后,Copilot 不会自动阻止其生成的任何匹配代码,而是在侧边栏中将其显示给开发人员,并让他们决定如何处理它。随着时间的推移,该功能也将出现在副驾驶聊天中。
GitHub去年 11 月预览了此功能,但显然花了一段时间才发布。
正如 GitHub 首席执行官 Thomas Dohmke 告诉我的那样,微软、GitHub 和大多数 Copilot 企业客户都在使用原始的阻止功能,但他也指出,这是一个有点生硬的工具。“它让你无法自行决定是否真的想要使用该代码并将其归回开源许可证。它实际上并没有让你发现可能有一个库可以用来代替合成代码,”他告诉我。“它会阻止您探索这些库并提交拉取请求。您可能会复制某些开源存储库中已存在的所有内容。”
多姆克指出,这通常适用于常见的计算机算法,例如排序,它们往往存在于许多不同的地方。现在,开发人员可以拒绝代码,直接使用它(假设库使这成为可能),或者让 Copilot 重写代码,使其不再与原始代码匹配。
截至目前,不可能只看到与特定许可证匹配的结果,但团队正在积极寻找反馈,看看这是否是用户所要求的功能。
“我们让人们了解比赛,然后继续探索或做出正确的决定,”多姆克说。“我认为它填补了原始解决方案的空白。”
当 Copilot 没有太多上下文可以使用时,代码引用功能也往往会更频繁地触发。当 Copilot 可以从您正在处理的现有代码中看到大量上下文时,它不太可能生成与公共代码相匹配的建议。但是当您刚刚开始时,生成匹配代码的可能性要大得多。
其核心是一个非常快速的搜索引擎(GitHub 表示希望将延迟保持在 10-20 毫秒),可以快速找到匹配的代码及其许可证。截至目前,匹配的代码片段按照搜索引擎找到它们的顺序列出。在去年的最初公告中,GitHub 表示开发人员应该具有“按存储库许可证、提交日期等对库存进行排序的能力”,因此我预计它将稍后添加此功能。