Enjoy software architecture and programming

27May 2023

GitHub Copilot Chat 透明度声明[译文]

2754 words - 14 mins

什么是 GitHub Copilot Chat?

GitHub Copilot Chat是一个聊天界面,它可以让您提出编程相关的问题并得到相应的答案。这个聊天界面为您提供了快速、便捷的方式获取编程信息和支持,而不需要您浏览复杂的文档或搜索在线论坛。该聊天界面可以回答许多编程相关的问题,包括语法、编程概念、测试用例、调试等等。

除了在 Copilot 代码编辑器中可用的自动建议外,这个聊天界面旨在回答编程问题,以提高您的生产力,为您提供易于获得的编程相关信息和帮助。

GitHub Copilot Chat 的功能是什么?

GitHub Copilot Chat 如何工作?

Copilot Chat 的系统行为可以分解为几个关键步骤。

  • 输入处理: 用户的输入提示在传输给大型语言模型前,会由 Copilot 聊天系统进行预处理,这样可以根据用户的上下文和提示来获得响应。用户的输入可以采用代码片段或普通语言的形式。该系统仅旨在回答与编程相关的问题。
  • 语言模型分析: 经过预处理的提示随后会通过 Copilot 聊天语言模型,它是一个基于大量文本数据训练过的神经网络。语言模型会分析输入的提示,并根据对输入语法和语义的理解生成一个响应。
  • 响应生成: 语言模型根据对输入提示的分析生成一个响应,这个响应可以是生成的代码、代码建议或现有代码的解释。
  • 输出格式: Copilot Chat 生成的响应会被格式化并显示给用户,以便易于阅读和理解。它可能包括语法高亮、缩进和其他格式化特性。

总体而言,Copilot Chat 的系统行为设计直观且用户友好,可让您快速轻松地提出与编码相关的问题并完成编码任务。但是,对于用户来说,重要的是要了解使用 Copilot Chat 的潜在限制和风险,并仔细审查和验证系统生成的响应,以确保它们准确且适合手头的任务。

如何使用 GitHub Copilot Chat?

Copilot Chat可以在各种场景中提供编码帮助。一些例子包括:

  • 生成单元测试用例: Copilot Chat可以帮助编写单元测试用例,根据编辑器中的现有代码,或用户在编辑器中突出显示的代码片段生成代码片段。这在您想要快速高效地编写测试用例而不想花费太多时间在重复任务上时非常有用。例如,如果您正在为一个特定的函数编写测试用例,您可以使用 Copilot Chat 基于函数的签名和主体,提供可能的输入参数和期望的输出值。Copilot Chat 还可以根据代码的上下文和语义,提供确保函数正常工作的断言。此外,Copilot Chat 还可以帮助您编写边界条件和边缘情况的测试用例,这些情况可能很难手动识别。例如,它可以为错误处理、Null 值或意外输入类型建议测试用例,帮助您确保代码的健壮性和韧性。但是,需要注意的是,生成的测试用例可能无法覆盖所有可能的场景,仍然需要人工测试和代码审查来保证代码质量。

  • 解释代码: Copilot Chat 可以通过生成代码功能和目的的自然语言描述来帮助解释选定的代码。如果您想了解代码的行为,或对需要了解代码工作原理的非技术性利益相关者来说,这可能很有用。例如,如果您在代码编辑器中选择一个函数或代码块,Copilot Chat可以生成一个纯语言描述,说明代码的作用以及它如何融入整个系统。这可以包括函数的输入和输出参数、依赖关系以及它在更大的应用中的用途等信息。总的来说,通过生成通俗的语言解释和建议文档,Copilot Chat可以帮助开发者和利益相关者更容易、更有效地理解所选代码,从而实现更好的合作和更有效的软件开发。然而,需要注意的是,生成的解释和文档可能并不总是准确或完整的,可能需要人工审查和纠正。

  • 提出代码修复建议: Copilot Chat 是一款可以帮助您解决代码中出现的 bug 的工具,它会根据错误或问题的上下文提供代码片段和解决方案的建议。如果您无法确定 bug 的根本原因,或者需要指导如何最好地解决它,那么这将非常有用。例如,如果您的代码产生了错误消息或警告,Copilot Chat 可以根据错误消息、代码语法和周围的代码提出可能的修复建议,并生成可以合并到代码库中的代码片段。但是值得注意的是,建议的解决方案可能不总是最佳或完全的,人工审核和测试可能是必要的,以确保代码的质量。

  • 回答编码问题: Copilot Chat 允许您就特定的编码问题请求帮助或澄清,并以自然语言格式或代码片段格式获得响应。对于程序员来说,这是一个有用的工具,它可以为常见的编码任务和挑战提供指导和支持。此外,与传统文档或支持论坛相比,聊天界面可以提供更个性化和互动式的体验,使开发人员能够实时获得帮助。

GitHub Copilot Chat 的局限性是什么?

根据您的场景和输入数据的不同,您可能会遇到不同水平的性能表现。以下信息旨在帮助您了解 Copilot Chat 的系统限制和与性能相关的关键概念。

以下是 Copilot Chat 的一些局限:

  • 范围有限: Copilot Chat 已经在大量的代码语料库上进行了训练,但仍然有限制范围,可能无法处理更复杂的代码结构或较为冷门的编程语言。此外,Copilot Chat 只能根据正在编写的代码的上下文来建议代码,因此它可能无法识别更大的设计或架构问题。

  • 潜在的偏见: Copilot 的训练数据来源于现有的代码仓库,这些数据可能存在偏见和错误,这些偏见和错误可能会被工具所延续。此外,Copilot Chat 可能会偏向某些编程语言或编码风格,这可能会导致子优的或不完整的代码建议。

  • 安全风险: Copilot Chat 基于正在编写的代码的上下文提示编写新的代码,如果不小心使用,可能会暴露敏感信息或漏洞。用户在为安全敏感的应用程序生成代码时,应谨慎使用 Copilot Chat,并始终彻底审查和测试生成的代码。

  • 与公开代码匹配: Copilot Chat 有能力以概率的方式生成新代码。尽管它生成匹配训练集代码的概率很低,但是 Copilot Chat 建议可能包含与训练集中代码匹配的代码片段。Copilot Chat 利用过滤器阻止从 GitHub 存储库中匹配公共代码,但是您应该采取与使用未独立起草材料的任何代码编写相同的预防措施,包括进行严格的测试、IP 扫描和检查安全漏洞,确保其适用性。在您审查生成的代码之前,您应确保 IDE 或编辑器不会自动编译或运行该代码。

  • 不准确的代码: Copilot Chat 的局限性之一是,它可能会生成看似有效的代码,但实际上可能在语义或语法上并不正确,也可能没有准确反映开发者的意图。为了减少不准确代码的风险,尤其在处理关键或敏感应用程序时,您应仔细审查和测试生成的代码。您还应该确保生成的代码遵守最佳实践和设计模式,并符合代码库的整体架构和风格。

  • 对非编程主题的回答不准确: Copilot Chat 并非设计用于回答非编程问题,因此其回答在这些情况下可能并不总是准确或有帮助。如果用户向 Copilot Chat 提出非编程问题,它可能会生成一个与问题无关或毫无意义的答案,或者可能仅表明它无法提供有用的答复。

提高 GitHub Copilot Chat 性能的最佳实践是什么?

Copilot Chat 服务可以支持广泛的应用程序,例如代码生成、代码分析和代码修复,每个应用程序都有不同的性能指标和缓解策略。 为了提高性能并解决“限制”部分提到的一些问题,您可以采取多种措施。

  • 保持提示的主题相关性: Copilot Chat 的预期用途是专门解决与编码有关的问题。因此,将提示限制在编码问题或任务上可以提高模型的输出质量。

  • 将 Copilot Chat 用作工具,而不是替代品: 虽然 Copilot Chat 可以成为生成代码的强大工具,但重要的是将其用作工具而不是替代人工编程。 用户应始终查看和测试 Copilot Chat 生成的代码,以确保它满足他们的要求并且没有错误或安全问题。

  • 使用安全编码和代码审查实践: 虽然 Copilot Chat 可以生成语法正确的代码,但它可能并不总是安全的。用户应遵循安全编码的最佳实践,例如避免硬编码密码或 SQL 注入漏洞,以及上述代码审查实践,以解决 Copilot Chat 的局限性。

  • 提供反馈: 如果用户遇到 Copilot Chat 的任何问题或限制,他们应该通过门户网站上的共享反馈链接提供反馈。 这可以帮助开发人员改进工具并解决任何问题或限制。

  • 保持最新: Copilot Chat 是一项新技术,可能会随着时间的推移而发展。用户应及时了解该工具的任何更新或变化,以及可能出现的任何新的安全风险或最佳实践。

本文摘译自:GitHub Copilot Chat Transparency Note