Appearance
Copilot 的回答质量很大程度上取决于提示语写得好不好。本页介绍 8 个经过验证的 prompt 工程原则,从"怎么让 Copilot 理解你的意图"到"怎么保持对话上下文清洁",每条原则都附带可复制的示例。
GitHub Copilot Prompt 工程:写出高质量提示语的 8 个原则
Prompt(提示语)是你向 Copilot 发出的请求,可以是一个问题、一段代码,或者一句自然语言描述。Copilot 会结合你的 prompt、当前代码上下文和对话历史来生成回答。
原则 1:先写大意,再加细节
从宽泛的描述开始,然后逐步添加约束条件,效果优于一次性塞入所有要求:
写一个 JavaScript 函数,判断一个数是否是质数
该函数接收一个整数参数,返回 true 或 false
如果输入不是正整数,抛出一个带描述信息的错误分步描述让 Copilot 更容易理解每个约束的优先级和意图。
原则 2:用示例说明期望
举例往往比描述更有效,提供示例输入/输出让 Copilot 理解格式和逻辑:
写一个 Go 函数,从字符串中提取所有日期,返回字符串数组。
日期格式可以是:
* 05/02/24
* 05/02/2024
* 2024-05-02
示例:
findDates("我有牙医预约 11/14/2023,书友会是 12-1-23")
返回:["11/14/2023", "12-1-23"]也可以用单元测试作为示例——把测试用例给 Copilot,让它实现通过测试的代码。
原则 3:把复杂任务拆成小任务
大任务直接发给 Copilot 容易得到不完整或错误的结果。把它拆成有逻辑顺序的子任务:
第一步:写一个函数,生成 10x10 的字母网格,随机填充第二步:写一个函数,在刚才的网格里查找横向单词第三步:写一个函数,在网格里查找纵向单词逐步构建,每步验证正确后再进行下一步。
原则 4:消除歧义
模糊的问题得到模糊的回答。把隐含的假设说清楚:
不好的写法:
这段代码做了什么?好的写法:
`createUser` 函数做了什么?它的参数和返回值分别是什么?对于不常见的库,要说明是哪个库:
用 `date-fns`(不是 `moment.js`)实现日期格式化,将 ISO 字符串转为"YYYY年MM月DD日"格式原则 5:告诉 Copilot 相关代码在哪里
Copilot 用打开的文件作为上下文。操作建议:
- 打开相关文件:把所有有关联的文件都在 IDE 中打开
- 关闭无关文件:无关文件会稀释上下文,降低回答精度
- 选中目标代码:在 IDE Chat 里,先高亮选择你要问的代码块
- 用关键词引用:
@workspace让 Copilot 搜索整个工作区,#file:路径指定特定文件
原则 6:反复迭代
得到的回答不满意时,不要从头开始——在现有基础上修改问题:
上面的函数没有处理空字符串的情况,请加上空字符串检测用 async/await 改写这个函数,原来的 Promise 链不够清晰也可以让 Copilot 引用它之前给出的回答:
你上面写的 `parseDate` 函数有个边界情况没处理,输入 "2024-13-01" 应该怎么处理?原则 7:保持对话上下文干净
Copilot Chat 使用整个对话历史作为上下文,对话越长、越杂,回答质量越容易下降:
- 新任务开新对话:每个独立任务用单独的对话线程
- 删除偏题的消息:如果某条回答跑偏了,删掉它再重问
- 不要在一个对话里混多个话题:比如别把"调试 API"和"写文档"放在同一个对话里
原则 8:让代码本身更容易被理解
Copilot 理解代码的能力受代码质量影响。代码写得越清晰,Copilot 给出的建议越准确:
- 命名有意义:
userAuthToken比t更好 - 添加注释:关键逻辑的注释帮助 Copilot 理解意图
- 模块化:函数职责单一,比一个 200 行的函数更容易获得精准建议
- 写单元测试:测试文件告诉 Copilot 函数的预期行为
如果代码本身写得很乱,也可以先让 Copilot 帮你添加注释或拆分函数,再进行后续操作。
和 Claude Code、Cursor 的对比
- Claude Code:交互方式偏向"把任务完整说清楚,等待执行",更适合一次性实现较大的功能
- Cursor:Prompt 技巧类似,但支持 @ 引用特定文件,上下文管理和 Copilot 相近
- Copilot:原则基本通用,在 IDE Chat 里加
@workspace/#file引用效果更精准
常见问题
Q: 英文 prompt 比中文更有效吗?
A: 对于代码生成任务,差别不大,Copilot 对两种语言都能理解。但涉及某些技术文档中只有英文术语的场景,英文 prompt 可能更精准。日常使用中文完全没问题。
Q: Prompt 越长越好吗?
A: 不是。关键是精准和相关——只提供 Copilot 真正需要的信息。过长的 prompt 可能稀释重点,导致 Copilot 抓不住核心要求。
Q: 写了很多次还是得不到好的结果,怎么办?
A: 尝试换一种角度描述问题;或者先让 Copilot 给出解题思路(不要代码),再基于思路要求它生成代码——分步验证能有效提升准确率。