查看GitHub Copilot最佳做法

已完成

Visual Studio Code的GitHub Copilot扩展可帮助开发人员更快地编写代码,并减少错误。

然而,GitHub Copilot 是一个 AI 配对程序员,它不是程序员。 若要充分利用GitHub Copilot工具,需要遵循最佳做法。

为作业选择正确的GitHub Copilot工具

虽然GitHub Copilot的代码完成功能和GitHub Copilot的聊天功能共享一些功能,但两种工具最好在不同的情况下使用。

代码补全在以下情况下能发挥最大价值:

  • 在编写代码时自动补全代码片段、变量名和函数。
  • 生成重复代码。
  • 使用自然语言从内联注释生成代码。
  • 为测试驱动开发生成测试。

或者,当将 GitHub Copilot 的聊天功能用于以下目的时,它们提供最有价值的服务:

  • 回答有关自然语言代码的问题。
  • 生成大量代码,然后对这些代码进行迭代以满足你的需求。
  • 使用关键字和技能完成特定任务。 GitHub Copilot Chat使用内置的关键字和旨在提供重要上下文的技能,在提示中快速完成常见任务。 不同GitHub Copilot聊天平台中提供了不同类型的关键字和技能。
  • 以特定角色身份完成任务。 例如,可以告诉 GitHub Copilot 对话助手,这是一位高级 C++ 开发人员,非常重视代码质量、可读性和效率。 建立角色后,可以要求GitHub Copilot查看代码。

充分利用 GitHub Copilot 内联建议

GitHub Copilot扩展会自动提供建议,帮助你更高效地进行编码。 当你遵循某些操作和行为时,GitHub Copilot 提供更好的建议。 你可能已经关注其中一些操作和行为,因为它们还可帮助你和同事了解你的代码。

提供GitHub Copilot的上下文

GitHub Copilot 在能够充分理解您正在做的工作以及需要帮助的地方时,效果最佳。 正如你在寻求帮助时为同事提供相关上下文一样,你需要为GitHub Copilot提供上下文。

打开文件

对于代码补全,GitHub Copilot 会查看您编辑器中打开的文件,以便建立上下文并生成合适的建议。 使用GitHub Copilot时,在Visual Studio Code中打开相关文件有助于定义上下文,并允许GitHub Copilot查看项目大图。

顶级注释

正如你将简要介绍同事一样,代码文件中的顶级注释可以帮助GitHub Copilot了解所创建代码的整体上下文。

适当的包含和引用

最好手动设置工作所需的包含或模块引用。 GitHub Copilot可以提出建议,但你可能最了解需要包括哪些依赖项。 这还可以告知GitHub Copilot在创建建议时要使用的框架、库及其版本。

有意义的函数名称

正如一个名为fetchData()的方法对同事(或几个月后的你)来说意义不大,fetchData()也不会帮助GitHub Copilot理解你的代码。 使用有意义的函数名称有助于 GitHub Copilot 生成执行您想要的建议。

特定且范围良好的函数注释

函数名称只能如此描述,而不能过长。 函数注释可以帮助填写GitHub Copilot可能需要知道的详细信息。

包含示例代码的 Prime GitHub Copilot

一种在右侧页面上获取 GitHub Copilot 的技巧是,将所需的代码示例复制并粘贴到打开的编辑器选项卡中。此示例应表示要 GitHub Copilot 模拟的代码。 提供示例有助于GitHub Copilot生成与要模拟的语言和任务匹配的建议。 GitHub Copilot帮助你创建一些与目标匹配的代码后,可以删除示例代码。 当你需要“训练”GitHub Copilot时,此方法特别有用。 例如,假设 GitHub Copilot 默认为建议实现较旧版本的库的代码片段。 可以将代码插入到使用最新版本库的项目中。 这有助于GitHub Copilot开始建议使用最新版本库的代码片段。 GitHub Copilot了解如何使用新的库版本后,可以删除示例代码。

始终如一,保持较高的质量标准

GitHub Copilot会分析您的代码,生成遵循现有模式的建议,因此俗语“输入垃圾,输出垃圾”适用。

始终保持较高的质量标准需要具备一定的专业标准。 尤其是当你随意编码,想要让某些东西正常运作时。 你可能希望在“黑客”模式下禁用 GitHub Copilot 补全。 可以从 GitHub Copilot 状态菜单(可从 Visual Studio Code 的状态栏访问)暂时禁用补全。

充分利用 GitHub Copilot 对话助手

使用GitHub Copilot的聊天功能时,可以采取多种方法来优化体验。

由泛入精

在编写GitHub Copilot提示时,首先为GitHub Copilot目标或方案提供广泛的说明。 然后列出任何具体要求。 考虑以下提示:

  1. 写函数来告诉我一个数字是否是质数。
  2. 如果整数为质数,该函数应采用整数并返回 true。
  3. 如果输入不是正整数,函数应引发错误。

提供示例

使用示例来帮助GitHub Copilot了解所需内容。 可以提供示例输入数据、示例输出和示例实现。

将复杂任务分解为更简单的任务

如果要GitHub Copilot完成复杂或大型任务,请将任务分解为多个简单小型任务。 例如,无需要求GitHub Copilot生成单词搜索谜题,将流程分解为较小的任务,并要求GitHub Copilot逐个完成这些任务:

  1. 编写一个函数,以生成一个 10 x 10 的字母网格。
  2. 编写一个函数,以便在给定一组有效单词的情况下查找字母网格中的所有单词。
  3. 编写一个函数,以使用上述函数生成一个 10 x 10 的字母网格,其中包含至少 10 个单词。
  4. 更新上一个函数,以打印字母网格和网格中的 10 个随机单词。

避免歧义

避免含糊不清的用词。 例如,当“this”可能是当前文件、最近的GitHub Copilot响应或特定代码块时,请不要问“这个做什么”。 不使用不明确的词,要具体:createUser 函数有什么作用?

指示相关代码

如果在 IDE 中使用 GitHub Copilot 聊天,请打开要 GitHub Copilot 参考的文件,或突出显示需要其参考的代码。 在提示中使用聊天参与者、斜杠命令和聊天变量来定义上下文。 例如,指定 GitHub Copilot Chat 应引用哪些文件。

使用聊天参与者、斜杠命令和聊天变量

聊天参与者旨在收集有关基本代码、特定域或技术的额外上下文。 当您指定合适的参与者时,GitHub Copilot Chat 可以更好地找到信息并将其发送到 GitHub Copilot 后端。 例如,在询问有关打开的项目的问题时,请使用 @workspace,或者在询问有关Visual Studio Code功能和 API 的问题时使用 @vscode

斜杠命令有助于GitHub Copilot Chat在你提问时更好地理解你的意图。 你是否了解代码库(/explain)、是否希望帮助解决问题(/fix),还是要创建测试用例(/tests)? 通过让GitHub Copilot Chat知道你正在尝试执行的任务,它可以调整其回复以适应任务,并提供有用的命令、设置和代码片段。

聊天参与者,例如@workspace@vscode,可以贡献提供特定领域上下文的聊天变量。 可以在聊天提示中使用 # 标记来引用聊天变量。 可以使用聊天变量更具体地了解提示的上下文。

例如, #file 聊天变量允许你在聊天提示中引用工作区中的特定文件。 这通过提供有关你正在处理的文件的上下文,有助于使GitHub Copilot Chat中的答案更贴近你的代码。 可以提出像 “Can you suggest improvements to #file:package.json?” 或 “How do I add an extension in #file:devcontainer.json?” 这样的问题。 使用 #file 变量可帮助你从GitHub Copilot获取更有针对性的准确响应。

试验和迭代

如果没有获得想要的结果,请迭代提示,然后重试。 在下一个请求中引用上一个响应。 还可以删除上一个响应并重新开始。

保持历史记录的相关性

GitHub Copilot聊天使用聊天历史记录来获取有关请求的上下文。 为了确保GitHub Copilot使用相关的聊天历史记录:

  • 使用线程为新任务启动新对话。
  • 删除不再相关的或未提供所需结果的请求。

遵循良好的编码做法

如果在向GitHub Copilot询问建议时未收到所需的响应,请确保现有代码遵循最佳做法并易于阅读。 例如:

  • 使用一致的代码样式和模式。
  • 对变量和函数使用描述性名称。
  • 为代码提供注释。
  • 将代码构造为模块化、限定范围的组件。
  • 包含单元测试。

概要

GitHub Copilot是一种功能强大的工具,可帮助你更快地编写代码,并减少错误。 但是,若要充分利用GitHub Copilot,需要遵循最佳做法。 通过为作业选择合适的GitHub Copilot工具,提供上下文,并遵循良好的编码做法,可以优化GitHub Copilot体验。