关于 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)