Skip to main content

Copilot Chat 的提示设计

按照以下策略改进 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("我要在 11/14/2023 去看牙医,并在 12-1-23 参加书友会")

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

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

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

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

例如,不要要求 Copilot 生成单词搜索迷宫,而是将此过程分解成更小的任务,并要求 Copilot 逐个完成这些任务:

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

避免多义性

避免含糊不清的用词。 例如,如果“这个”可能是当前文件、上一个 Copilot 回复或者特定的代码块,请不要问“这个有什么用”。 相反,应当具体化:

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

多义性也适用于库:

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

指示相关代码

如果正在 IDE 中使用 Copilot,以便在编码时获取建议,请打开任何相关文件并关闭不相关的���件。 Copilot 将使用打开的文件了解你的请求。

如果正在 IDE 中使用 Copilot Chat,请打开此文件,或者突出显示你希望 Copilot 引用的代码。 还可以使用关键字向 Copilot Chat 手动提供上下文。 例如,可以在 VS Code 中添加 @workspace 聊天参与者或在 JetBrains IDE 中添加 @project。 请参阅“GitHub Copilot Chat 速查表”。

试验和迭代

如果未获得所需的结果,请反复修改提示并重试。

如果正在使用 Copilot 以便在编码时获取建议,可以彻底删除建议,然后重新开始。 也可以保留建议并请求修改。

如果正在使用 Copilot Chat,可以在下一个请求中引用上一个回复。 也可以删除上一个回复并重新开始。

保持与历史记录相关

Copilot Chat 利用历史聊天记录获取有关请求的上下文。 要只向 Copilot 提供相关历史记录:

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

遵循良好的编码实践

如果在要求 Copilot 提供代码库中的建议或解释时没有获得所需的回复,请确保现有的代码遵循最佳实践且易于阅读。 例如:

  • 使用一致的代���样式和模式
  • 对变量和函数使用描述性名称
  • 注释代码
  • 将代码构建成具有作用域的模块化组件
  • 包括单位测试

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

延伸阅读