提示是向 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 中,使用 #file
变量或 @workspace
参与者。 有关如何在 IDE 中引用文件的说明,请参阅“在 IDE 中向 GitHub Copilot 提问”。
试验和迭代
如果未获得所需的结果,请反复修改提示并重试。
如果正在使用 Copilot 以便在编码时获取建议,可以彻底删除建议,然后重新开始。 也可以保留建议并请求修改。
如果正在使用 Copilot Chat,可以在下一个请求中引用上一个回复。 也可以删除上一个回复并重新开始。
保持与历史记录相关
Copilot Chat 利用历史聊天记录获取有关请求的上下文。 要只向 Copilot 提供相关历史记录:
- 利用线程为新任务启动一个新对话
- 删除不再相关或未提供所需结果的请求
遵循良好的编码实践
如果在要求 Copilot 提供代码库中的建议或解释时没有获得所需的回复,请确保现有的代码遵循最佳实践且易于阅读。 例如:
- 使用一致的代码样式和模式
- 对变量和函数使用描述性名称
- 注释代码
- 将代码构建成具有作用域的模块化组件
- 包括单位测试
Tip
使用 Copilot 帮助代码遵循最佳实践。 例如,要求 Copilot 添加注释,或者将大型函数分解成更小的函数。
延伸阅读
- GitHub 博客中的如何使用 GitHub Copilot:提示、技巧和用例
- GitHub 博客中的在 IDE 中使用 GitHub Copilot:提示、技巧和最佳实践
- GitHub 博客中的关于提示设计和 LLM 的开发人员指南
- GitHub 博客中的提示 GitHub Copilot Chat 成为你的个人 AI 助手以实现辅助功能