Skip to content

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 给出的建议越准确:

  • 命名有意义userAuthTokent 更好
  • 添加注释:关键逻辑的注释帮助 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 给出解题思路(不要代码),再基于思路要求它生成代码——分步验证能有效提升准确率。