关于 GitHub Copilot 行内建议
Copilot 行内建议是由 GitHub Copilot 生成的自动完成风格的行内建议。Copilot 行内建议营造出与 AI 驱动的配对程序员协作的体验,自动提供完成代码的建议。此外,它还能建议代码注释、测试等。它在受支持的编辑器中直接提供这些建议,您在编写代码时即可看到,并且可适用于广泛的编程语言和框架。欲了解更多信息,请参阅 什么是 GitHub Copilot?。
Copilot 的建议可能是当前行的补全,也有时会是一整段新代码。您可以接受全部或部分建议,拒绝建议,或继续键入以忽略建议。
Copilot 行内建议通过结合自然语言处理和机器学习来理解您光标位置周围的代码,并向您提供建议。此过程可分为多个步骤。
输入处理
用户光标周围的代码会先由 Copilot 行内建议系统进行预处理,并结合上下文信息(例如编辑器中打开标签页的代码片段),以提示的形式发送至大型语言模型。有关数据保留的说明,请参阅 GitHub Copilot 信任中心。
大型语言模型随后接收该提示并基于提示给出响应。系统仅旨在帮助编码。
语言模型分析
处理输入提示的大型语言模型是针对行内建议进行微调的语言模型,它是一种在大量代码数据上训练的神经网络,专门用于提供行内建议。
您可以更改用于行内建议的模型。请参阅 更改 GitHub Copilot 行内建议的 AI 模型。
响应生成
语言模型根据对输入提示及其提供的上下文的分析生成响应。该响应以生成的代码和纯文本注释的形式出现,范围从当前行的补全到整段新代码。
输出格式化
Copilot 生成的响应被格式化为“幽灵文本”,在视觉上与周围代码区分开来,并以建议的形式呈现给用户。仅当用户明确接受建议时,才会将其添加到文件/代码库中。用户可以接受全部或部分建议,拒绝建议,或继续键入以忽略建议,此情况下建议将被丢弃。
GitHub Copilot 行内建议旨在为您提供最相关且有用的代码建议,以增强现有代码。但它并不一定总能提供您所需的答案。Copilot 的使用者有责任在接受建议前审查并验证系统生成的响应,确保其准确且合适。此外,作为产品开发过程的一部分,我们进行红队测试,以了解并提升行内建议的安全性。生成的建议还会经过内容过滤。内容过滤系统会检测并阻止 Copilot 输出任何有害或冒犯性的内容,或不安全的代码。此外,根据用户的 GitHub 设置,过滤器还会阻止或标注包含公共代码匹配的建议。
GitHub Copilot 行内建议的使用场景
GitHub Copilot 行内建议可以在多种场景下提供编码帮助。
根据您的指令生成代码
除了依赖 Copilot 提供建议外,您还可以使用代码注释来告诉 Copilot 您期望在注释后出现的代码。例如,您可以使用 “使用递归” 或 “使用单例模式” 等注释来指定 Copilot 应该建议的算法类型。或通过注释告知 Copilot 向类中添加哪些方法和属性。
生成单元测试用例
Copilot 行内建议可以通过根据编辑器中键入的周围代码生成代码片段,帮助您编写单元测试用例。这可以减少您在编写测试用例时的重复工作。例如,当您为特定函数编写测试用例时,Copilot 可以依据函数的签名和主体,建议可能的输入参数和预期输出值。行内建议还可以基于代码的上下文和语义,建议确保函数正常工作的断言。
Copilot 行内建议还可以帮助生成针对边缘情况和边界条件的测试用例,这些情况可能难以手动识别。例如,Copilot 能建议错误处理、空值或意外输入类型的测试用例,帮助您确保代码的健壮性和韧性。不过,需要注意的是,生成的测试用例可能并未覆盖所有可能场景,仍需进行人工测试和代码审查,以确保代码质量。
对于程序员来说,这可能是一个有用的工具,因为它可以为常见的编码任务和挑战提供指导和支持。
提升 GitHub Copilot 行内建议的性能
Copilot 行内建议可以在多种不同的上下文中生成代码建议,具有不同的性能和质量指标。为提升性能并解决部分限制,您可以采用多种措施。有关 Copilot 行内建议的限制,请参阅 GitHub Copilot 行内建议的限制。
保持提示词切题
Copilot 仅旨在生成与代码相关的补全或代码本身。因此,将编辑器中的内容上下文限制为代码或与编码相关的信息,可提升模型的输出质量。
将 Copilot 行内建议作为工具,而非替代品
虽然 Copilot 可以成为生成代码的强大工具,但应将其视为辅助工具,而非取代人类编程。您应始终在接受建议前审查 Copilot 生成的代码,并在之后进一步验证,以确保其满足需求且不存在错误或安全问题。
重要提示
用户自行承担由生成代码带来的所有风险,包括安全漏洞、错误以及知识产权侵权。
使用安全编码和代码审查实践
虽然 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 的限制之一是可能生成看似有效但在语义或语法上不正确,或未能准确体现开发者意图的代码。为降低不准确代码的风险,您应仔细审查和测试生成的代码,特别是在处理关键或敏感应用时。还应确保生成的代码遵循最佳实践和设计模式,并契合代码库的整体架构和风格。
法律与监管考虑
用户在使用任何 AI 服务和解决方案时,需要评估可能的特定法律和监管义务,这些服务可能并不适用于所有行业或场景。此外,AI 服务或解决方案并非设计用于且不得以适用服务条款和相关行为准则禁止的方式使用。
后续步骤
有关如何使用 Copilot 行内建议的详细信息,请参见