GitHub Copilot 深度使用指南:从代码补全到 AI 结对编程
去年底一个同事问我:Copilot 到底值不值每个月 10 刀?
我当时愣了一下。因为我自己用了快两年,从来没认真想过这个问题。就像你不会问”鼠标值不值得买”——它就是工作环境的一部分了。
但这个问题问出来,倒让我重新梳理了一遍:我到底在用 Copilot 做什么?哪些用法真的省了时间,哪些其实是在自我安慰?
Tab 补全只是入门
大多数人对 Copilot 的印象停在:你打几个字,它把剩下的代码补出来,按 Tab 接受。
这确实是它最基础的功能。但如果你只用这一个,10 刀买的其实是个高级自动补全,性价比不太高。
真正的价值在于:Copilot 不是在猜你要打什么字,而是在理解你在写什么程序。
我第一次意识到这一点是在写一个数据处理脚本。我写了函数签名和注释,解释这个函数要做的事情,然后按 Enter——Copilot 直接生成了完整的函数体,逻辑基本对,只有一个边界条件需要调整。
从那以后,我的写代码方式变了。我开始先写注释,用自然语言描述我想做什么,然后让 Copilot 来填代码。注释不是给它看的,是给未来的我看的。代码是它帮我生成的副产品。
上下文是最重要的变量
Copilot 给你的补全质量,很大程度上取决于你给了它多少上下文。
同一个函数名,在不同的文件里,Copilot 会给出完全不同的实现。它会读你当前文件,读同一个项目里你打开的其他文件,甚至读你的变量命名习惯。
所以有几个习惯我一直保持:
打开相关文件。如果我在写一个新的 API Handler,我会先打开已有的 Handler 文件看一眼,让 Copilot 学到这个项目的风格。不需要做什么,就是打开。
注释要写得具体。”处理用户数据”这种注释生成的代码很泛。”从数据库读取 user_id 对应的用户信息,如果不存在返回 404 错误”这种注释生成的代码会准确得多。
变量名别偷懒。你写 d,它猜不出你想要什么。你写 downloadedFileCount,它自然知道这是个计数器,会给你合理的操作。
Copilot Chat:换个方式用
VS Code 里的 Copilot Chat 是我用得越来越多的功能,但用法和大多数人想的不一样。
我不怎么用它来问”帮我写一个 xxx 函数”。这种需求直接在编辑器里写注释更快。
我主要用 Chat 来做三件事:
解释代码。碰到一段看不懂的代码(特别是接手别人的项目时),选中,问”解释一下这段代码在做什么,有什么潜在问题”。比你自己逐行读要快,而且它会帮你找出可能的坑。
重构建议。写完一个功能,选中整个函数,问”这段代码有什么可以改进的地方?”。不是让它帮你改,而是听它说问题在哪,你自己判断要不要改。这个过程很像代码 Review,只是 Reviewer 永远在线。
生成测试用例。这是 Copilot 做得相当好的一件事。选中你的函数,让它帮你写单元测试。它会覆盖主流程、边界条件、异常情况,基本上你自己写也就是这些测试,但你能省掉 70% 的打字时间。
一个我经常用的工作流
我现在写新功能的流程大概是这样的:
先在一个新文件里,用注释把整个功能的逻辑写清楚。不是代码,就是中文(或英文)描述:这个模块要做什么,有哪些输入,有哪些输出,有哪些边界情况要处理。
然后开始写函数签名,一个一个来,每个函数上面加一句注释描述这个函数的职责。
这时候 Copilot 已经知道整个模块的意图了,它给的补全会非常准。我的工作变成了:接受合理的建议,拒绝不合适的,修改有偏差的地方。
最后,用 Chat 让它帮我写测试,顺便扫一遍有没有明显的问题。
这个流程下来,一个中等复杂度的功能,我写的”代码”可能只有 30%,剩下的是 Copilot 填的。但所有的设计决策、命名、结构,都是我的。
它会在哪里出问题
用了两年,我对 Copilot 的局限性有几个固定印象:
它不知道你的业务逻辑。它能生成语法正确、逻辑通顺的代码,但它不知道你们公司的订单状态机有哪些特殊规则,不知道这个接口只能被特定角色调用,不知道这个字段的命名有历史原因不能改。这些东西需要你来把关。
它很容易生成”看起来对”但细节错的代码。特别是涉及到时区、编码、并发的时候。生成完之后不要直接信,至少要快速扫一遍。
它会随着你项目的质量而质量变化。你的项目里有很多遗留代码、命名混乱、结构随意,它学到的就是这些,给你补全的代码风格也会混乱。好的代码库会让 Copilot 更有用。
关于那 10 刀
回到那个问题。
我同事后来也开了订阅,用了两个月跟我说:感觉没想象的那么神。
我问他怎么用的,他说就是自动补全。
我说你试试改改用法,他试了一周,说确实不一样了。
Copilot 不是那种插上就自动帮你写代码的工具。它更像一个需要磨合的搭档——你越了解怎么跟它配合,它给你的就越多。
刚开始用可能感觉只是省了一点打字时间。但当你形成了一套和它协作的工作流之后,提升就不只是打字速度了,而是整个开发节奏。
不过它确实不适合所有人。如果你的工作大量涉及高度定制的业务逻辑、遗留系统,或者你本身代码写得很快,边际收益会小一些。
对我来说,值。