背景痛点:提示词写得越随意,返工越频繁
第一次把 GitHub Copilot 请进 IDE 时,我以为'会说话就能写代码'。结果三天后,同一段逻辑被它反复生成三种完全不同的写法:变量命名一会儿匈牙利式,一会儿驼峰式;边界条件时而 <= 时而 <;最离谱的是把 async/await 和 .then 混在一个文件里。问题不在模型,而在提示词——太模糊、太短,也没有上下文。
开发里最常见的坑,大致就这三类:
- 任务描述太泛,比如'帮我写个排序',模型只能自己猜数据规模、稳定性要求,结果自然不稳定。
- 上下文缺失,Copilot 往往只能看到当前打开的文件,对项目里已有的工具函数、类型定义、测试风格一无所知,于是容易重复造轮子,或者生成和现有代码不一致的风格。
- 没有负例约束,没告诉它'不要怎么做',生成的代码里就可能悄悄混入废弃 API 或不安全的写法。
要提升效率,第一步不是'更会用 AI',而是把提示词当成接口文档来写:输入越严谨,输出越省心。
技术选型对比:三种提示策略谁更适合你
我把过去半年在团队里试过的几种方式,拿同一个小需求——'把 CSV 字符串转成嵌套 JSON'——做了横向对比,结论其实很直观。
| 策略 | 提示词长度 | 生成耗时 | 一次通过率 | 维护成本 | 适用场景 |
|---|---|---|---|---|---|
| 零提示(直接空行触发) | 0 字符 | 1.2 s | 20 % | 低 | 临时脚本、一次性代码 |
| 极简提示(一句话) | ≈30 字符 | 1.4 s | 35 % | 低 | 个人小工具,对风格不敏感 |
| 结构化提示(上下文 + 示例 + 约束) | ≈400 字符 | 2.1 s | 85 % | 中 | 业务主干、长期维护模块 |
结构化提示在'一次通过率'上明显更稳。多花的那 0.7 秒,换来的是少返工一小时,账算下来很划算。后面的实践,也都围绕这种结构化写法展开。
核心实现细节:把提示词拆成四段模板
我常用的提示词模板,基本可以拆成四段。顺序不要乱,Copilot 对上下文的理解是递进式的,先给边界,再给样例,再说任务,最后补环境信息,效果通常最好。
Negative Rules
先把不允许出现的东西说清楚,避免模型自由发挥。
// DO NOT use sync fs API, DO NOT introduce external deps, DO NOT mutate input.
Positive Example
再给一个最短可行样本,让模型知道你想要的输出长什么样。
// Example: Input: "1,Alice,0\n2,Bob,1"
// Output: [{id:1,name:"Alice",children:[{id:2,name:"Bob",children:[]}]}]
Task
把输入输出写得足够明确,尤其是字段、类型和约束,别让模型自己猜。
// Task: Given a CSV string with headers `id,name,parentId`,
// return a nested JSON array where each node has `children: Node[]`.
Context 最后补上项目环境,像是在给模型一张地图:语言版本、框架、已有工具函数都写进去。



