Skip to main content

负责任地使用 GitHub Copilot 内嵌建议

了解 Copilot 内联建议的用途、能力与局限性,以负责任的方式使用该功能。

关于 GitHub Copilot 内联建议

Copilot 内联建议是由 GitHub Copilot 以内联形式生成的自动补全式建议。 Copilot 内联建议营造了一种与 AI 驱动的结对程序员协作的体验,可自动提供代码补全建议。 此外,它还生成代码注释、测试等建议。 在编写代码时,该功能可直接在受支持的编辑器中提供这些建议,并且可以处理各种编程语言和框架。 有关详细信息,请参阅 什么是GitHub Copilot?

Copilot 提供的建议有时是当前行的补全,也可能是一个全新的代码块。 你可以接受全部或部分建议,关闭建议,也可以忽略建议并继续键入代码。

Copilot 内联建议通过结合自然语言处理和机器学习,来理解光标位置周围的代码,并向您提供建议。 此过程可以细分为多个步骤。

输入处理

来自用户光标周围的代码会先由 Copilot 内联建议系统进行预处理,再与上下文信息(例如编辑器中打开的其他标签页里的代码片段)结合,并以提示词的形式发送给大型语言模型。 有关数据保留的信息,请参阅 GitHub Copilot 信任中心

随后,大型语言模型会接收该提示,并根据提示内容生成响应。 该系统仅用于辅助编程工作。

语言模型分析

处理输入提示的大型语言模型是用于内联建议的微调语言模型,这是一个神经网络,它已针对专用于提供内联建议的大型代码数据主体进行训练。

可以更改用于内联建议的模型。 请参阅“更改适用于 GitHub Copilot 内联建议的 AI 模型”。

响应生成

语言模型根据其对输入提示和所提供上下文的分析生成响应。 此响应会以生成的代码和纯文本注释的形式返回,其范围可能从当前行的补全内容到完整的新代码块不等。

输出格式设置

Copilot 生成的响应会以“幽灵文本”的形式呈现,在视觉上与周围代码区分开来,作为建议展示给用户。 该建议内容仅在用户明确接受后才会被添加到文件/代码库中。 用户可选择全部或部分建议、关闭建议,或忽略建议(忽略时建议将自动失效)并继续键入内容。

GitHub Copilot 内联建议旨在为你提供最相关和有用的代码建议,以增强现有代码。 但是,该功能可能无法始终提供你期望的解决方案。 Copilot 用户有责任在采纳系统生成的建议前对其进行检查和验证,以确保其准确性和适用性。 此外,作为产品开发流程的一部分,我们还会开展红队演练,以理解并提升 Copilot 内联建议的安全性。 生成的建议也通过内容筛选器运行。 该内容筛选系统会检测并阻止 Copilot 输出任何有害、冒犯性内容或不安全代码。 此外,根据用户的GitHub设置,筛选器还会阻止或注释包含与公共代码匹配的建议。

GitHub Copilot 内联建议的使用场景

GitHub Copilot 内联建议可以在多种情境中提供编程帮助。

根据指令生成代码

除了直接依赖 Copilot 提供建议外,你还可以通过代码注释向 Copilot 描述你期望在注释后出现的代码。 例如,你可以通过注释(如“使用递归”或“使用单例模式”)来指定 Copilot 应建议的算法类型。 你还可以通过注释告知 Copilot 要添加到某个类的方法和属性。

生成单元测试用例

Copilot 内联建议可以根据编辑器中已输入的上下文代码,帮助你生成单元测试用例的代码片段。 这有助于在编写测试用例的重复任务上节省时间。 例如,如果要为特定函数编写测试用例,则可以使用 Copilot 根据函数的签名和正文建议可能的输入参数和预期输出值。 内联建议还可以基于代码的上下文和语义,推荐用于验证函数是否正确运行的断言。

Copilot 内联建议也有助于生成针对边界条件和极端情况的测试用例,这些情况往往较难通过人工方式识别。 例如,Copilot 可以建议错误处理、null 值或意外输入类型的测试用例,从而帮助你确保代码可靠且可复原。 但是,请务必注意,生成的测试用例可能并不涵盖所有可能的场景,并且仍需要手动测试和代码评审来确保代码的质量。

对于程序员来说,这是一个有用的工具,因为它可以为常见的编码任务和挑战提供指导和支持。

提升 GitHub Copilot 内联建议的性能

Copilot 内联建议可在多种不同上下文中生成代码建议,其性能和质量指标也各不相同。 为提升性能并缓解 Copilot 内联建议的一些局限性,你可以采取多种优化措施。 有关 Copilot 内联建议的限制的详细信息,请参阅 GitHub Copilot 内联建议的限制

使提示与主题相关

Copilot 仅用于生成与代码相关或直接生成代码的补全内容。 因此,将编辑器中内容的上下文限制为代码或编码相关信息可以增强模型的输出质量。

将 Copilot 内联建议作为工具使用,而不是替代方案

虽然 Copilot 是生成代码的强大工具,但请务必将其用作工具,而不用于替代人工编程。 在接受建议之前,应始终查看 Copilot 生成的代码,并在收到建议后对其进行进一步验证,以确保它满足要求,并且没有错误或安全问题。

重要

用户须自行承担与生成代码相关的所有风险,包括但不限于安全漏洞、bug 及知识产权侵权。

使用安全编码和代码评审做法

尽管 Copilot 内联建议可以生成语法正确的代码,但其结果并不总是安全的。 你应始终遵循安全编码的最佳实践,例如避免硬编码密码或 SQL 注入漏洞,并结合代码评审流程,以应对 Copilot 的局限性。

掌握最新动态

Copilot 内联建议仍是一项相对较新的技术,未来可能会不断演进。 应随时了解工具的任何更新或更改,以及可能出现的任何新安全风险或最佳做法。 默认情况下,Visual Studio Code、Visual Studio 和 JetBrains IDE 套件中启用自动扩展更新。 如果启用了自动更新,Copilot 将在你打开 IDE 时自动更新到最新版本。 有关 IDE 中的自动更新的详细信息,请参阅首选 IDE 或代码编辑器的文档。

GitHub Copilot 的内联建议限制

根据你的代码库规模和输入数据等因素,在使用 Copilot 内联建议时,你可能会体验到不同程度的性能表现。 以下信息旨在帮助你理解与 Copilot 内联建议相关的系统限制和关键性能概念。

作用域受限

Copilot 内联建议基于大量代码进行训练,但其适用范围仍然有限,可能无法处理更复杂的代码结构或较为冷门的编程语言。 对于每种语言,收到的建议质量可能取决于该语言训练数据的数量和多样性。 例如,JavaScript 在公共存储库中表现良好,并且是 GitHub Copilot 最受支持的语言之一。 对于 Copilot 来说,公共仓库中代表性较少的语言可能更难以提供帮助。 此外,Copilot 内联建议只能基于正在编写的代码上下文提供建议,因此可能无法识别更宏观的设计或架构问题。

最后,Copilot 内联建议的目标是生成代码及与代码相关的输出。 使用 Copilot 内联建议并不适用于生成自然语言内容。

潜在偏见

Copilot 的训练数据取自现有代码存储库,其中可能包含工具可能会延续的偏见和错误。 此外,Copilot 内联建议可能偏向某些编程语言或编码风格,从而导致建议的代码并非最优或不完整。

安全风险

Copilot 基于所编写代码的上下文生成代码,如果不谨慎使用,可能会暴露敏感信息或漏洞。 使用 Copilot 为安全敏感型应用程序生成代码时,应小心谨慎,并始终全面评审和测试生成的代码。

与公共代码匹配

Copilot 内联建议以概率方式生成新的代码。 虽然概率较低,但 Copilot 可能会生成与训练集中的代码匹配的代码建议。

代码不准确

Copilot 的其中一个限制是,它可能会生成看似有效的代码,但实际上该代码在语义或语法上可能不正确,或者可能无法准确反映开发人员的意图。 若要降低代码不准确的风险,应仔细评审和测试生成的代码,尤其是在处理关键或敏感应用程序时。 还应确保生成的代码遵循最佳做法和设计模式,并符合代码库的整体体系结构和样式。

用户在使用任何 AI 服务和解决方案时需要评估潜在的特定法律和法规义务,这些 AI 服务和解决方案可能不适合在每个行业或场景中使用。 此外,AI 服务或解决方案的设计目的并非用于适用服务条款和相关行为准则所禁止的用途,也不得以其中所禁止的方式使用。

后续步骤

有关如何使用 Copilot 内联建议的详细信息,请参阅:

  •         [AUTOTITLE](/copilot/using-github-copilot/getting-code-suggestions-in-your-ide-with-github-copilot)
    

其他阅读材料

  •         [AUTOTITLE](/free-pro-team@latest/site-policy/github-terms/github-terms-for-additional-products-and-features#github-copilot)
    
  •         [GitHub Copilot](https://copilot.github.trust.page/) 信任中心