跳至主要内容

GitHub Copilot 的提示工程

遵循以下策略来改进您的 Copilot 结果。

提示是您向 GitHub Copilot 发出的请求。例如,您向 Copilot Chat 提出的问题,或您要求 Copilot 补全的代码片段。除了您的提示外,Copilot 还会使用其他上下文,例如您当前文件中的代码和聊天历史记录,来生成响应。

遵循本文中的提示来编写可以生成 Copilot 更好响应的提示。

先概括,再具体

为 Copilot 编写提示时,首先向 Copilot 提供目标或场景的广泛描述。然后列出任何具体要求。

例如

编写一个函数,告诉我一个数字是否为素数

该函数应接受一个整数,如果该整数为素数则返回 true

如果输入不是正整数,则该函数应报错

给出示例

使用示例来帮助 Copilot 理解您的需求。您可以提供示例输入数据、示例输出和示例实现。

例如

编写一个函数,查找字符串中的所有日期并将其返回到数组中。日期可以格式化为

  • 05/02/24
  • 05/02/2024
  • 5/2/24
  • 5/2/2024
  • 05-02-24
  • 05-02-2024
  • 5-2-24
  • 5-2-2024

示例

findDates("I have a dentist appointment on 11/14/2023 and book club on 12-1-23")

返回:["11/14/2023", "12-1-23"]

单元测试也可以用作示例。在编写函数之前,您可以使用 Copilot 为该函数编写单元测试。然后,您可以要求 Copilot 编写由这些单元测试描述的函数。

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

如果您希望 Copilot 完成一项复杂或大型任务,请将该任务分解成多个简单的小任务。

例如,不要要求 Copilot 生成一个单词搜索谜题,而是将流程分解成更小的任务,并要求 Copilot 一次完成一项

  • 编写一个函数,生成一个 10x10 的字母网格。
  • 编写一个函数,在给定有效单词列表的情况下,查找字母网格中的所有单词。
  • 编写一个函数,使用前面的函数生成一个包含至少 10 个单词的 10x10 字母网格。
  • 更新前面的函数,以打印字母网格和网格中 10 个随机单词。

避免歧义

避免使用模棱两可的术语。例如,如果“this”可能是当前文件、上一个 Copilot 响应或特定代码块,则不要询问“这是什么作用”。相反,请具体说明

  • createUser 函数的作用是什么?
  • 您上次回复中的代码的作用是什么?

歧义也可能适用于库

  • 如果您正在使用不常见的库,请描述该库的作用。
  • 如果您想使用特定库,请在文件顶部设置导入语句或指定要使用的库。

指示相关代码

如果您在 IDE 中使用 Copilot 来获取代码建议,请打开任何相关文件并关闭不相关文件。Copilot 将使用打开的文件来理解您的请求。

如果您在 IDE 中使用 Copilot Chat,请打开您希望 Copilot 参考的文件或突出显示代码。您还可以指定 Copilot Chat 应参考哪些文件。例如,在 VS Code 中,使用 #file 变量或 @workspace 参与者。有关如何在 IDE 中参考文件的说明,请参阅“在您的 IDE 中提问 GitHub Copilot”。

实验和迭代

如果您没有得到想要的结果,请迭代您的提示并重试。

如果您正在使用 Copilot 来获取代码建议,您可以完全删除建议并重新开始。或者,您可以保留建议并请求修改。

如果您正在使用 Copilot Chat,您可以参考上一个回复中的内容来发出下一个请求。或者,您可以删除上一个回复并重新开始。

保持历史记录相关

Copilot Chat 使用聊天历史记录来获取有关您请求的上下文。要仅向 Copilot 提供相关历史记录

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

遵循良好的编码实践

如果您在请求 Copilot 提供代码库中的建议或解释时没有得到想要的响应,请确保您现有的代码遵循最佳实践并且易于阅读。例如

  • 使用一致的代码风格和模式
  • 为变量和函数使用描述性名称
  • 注释您的代码
  • 将您的代码结构化为模块化、作用域化的组件
  • 包含单元测试

提示

使用 Copilot 帮助您的代码遵循最佳实践。例如,要求 Copilot 添加注释或将大型函数分解成较小的函数。

进一步阅读