Copilot Workspace 实测:规划先行的AI编码,真的比直接写代码更强吗?

规划环节:它逼你把话说明白,然后帮你避坑

Workspace 和别的 AI 编码工具最大的不同是:你不需要先写代码,而是要写一份“规格说明”。我在一个 Next.js 项目里输入“用现有的 rate-limit.ts 工具给 API 路由加限流”,它花了大概 15 秒读完仓库,然后给出三步方案——导入工具、包装路由、加测试。我觉得方案没问题,就点了“批准”。接着它自动改了 5 个文件,生成了一个带描述的 PR。整个过程从打字到看到可审查的 PR,只用了 4 分 12 秒。

这个规划阶段不是摆设。有一次我让它给聊天功能加 WebSocket 支持,它读了我仓库后发现项目部署在 Vercel 的 Serverless Functions 上,不支持持久 WebSocket 连接。它主动建议改用 Edge Functions + 第三方实时服务。这个环境感知的规划直接阻止了我犯一个低级错误。在我测试的 12 个任务里,有 3 次(约 25%)规划阶段就发现了结构或兼容性问题。就算规划不对,我也可以在代码生成前修改它,比那些一上来就瞎写的工具安全多了


仓库感知:它学得快,代码风格像队友

Workspace 能完整读取 GitHub 仓库的提交历史、Issue 讨论、PR 评论和文件结构。结果就是它生成的代码自动遵循你项目的命名习惯、文件组织方式和错误处理风格

我特意对比了一下:在一个 Python FastAPI 项目里,所有已有接口都用了一个自定义的 handle_errors 装饰器处理异常。我让 Workspace 加个健康检查接口,它自动用了 handle_errors,根本没让我告诉它。而同样的提示给 Cursor 或 Copilot Chat,它们生成的代码都用了 try-except 块——因为它们没有仓库级上下文,不知道项目里已经有了标准模式。

执行过程中的自我纠错也值得一说。当代码 lint 或类型检查失败时,它会自己读错误、改文件、再重试。我亲眼看到一次 TypeScript 任务里,它用了项目里已经不存在的类型,自己抓到了编译错误,查了现在的类型定义,改了 import——全程没我插手。但也有一次,它修了一个 ESLint 警告又引入另一个,再修第二个又重犯第一个,循环了三次才靠我手动解决。我统计了一下,自我纠错 lint 错误成功率约 70%,类型错误约 60%。成功了省事,失败了反而浪费时间,我学会在第二次纠错失败后立刻手动介入


测试生成:方向对了,但深度不够,别指望它当安全网

这是我觉得最需要泼冷水的地方。Workspace 会给每个改动生成测试,而且遵循项目现有的测试框架(Jest、pytest、Go testing)——这些测试都能通过。

太浅了。12 个任务里,11 个测试只覆盖了正常路径和一两个明显边界情况。从不测试错误边界、竞态条件、超时场景、集成失败。比如限流任务,它测试了低于限制允许、高于限制拒绝,但没测时钟偏移导致计数器在窗口内重置的情况。文件上传任务测了大小限制,但没测网络错误导致上传失败时的处理。

我不认为这是 bug——它就像一个开发者拿到规格说明后花 10 分钟写出的初稿。方向对了,但如果你想只靠它自己生成的测试就合代码,那你就是在把未覆盖的边界情况直接推到线上。我检查了每个 PR,8 个需要我自己补写额外测试。


什么任务它行,什么任务它不行?

  • 最佳场景:改动涉及 3~5 个文件。我测了 5 个这种任务,全部一次正确,规划和代码都对。
  • 翻车场景:改动涉及 14 个文件(比如加新 API 端点 + 数据库迁移 + 前端更新)。规划阶段看似合理,但执行时步骤三依赖步骤二的 schema 变更,但变更还没应用——结果前端代码基于旧 schema 生成,后来修正又引入类型不匹配。自纠错循环了三轮才搞定,生成的 diff 复杂到审查时间比从头手写还久。
  • 语言支持不均:TypeScript 和 Python 的规划很具体——直接指出文件名、现有函数、具体改动。Go 的规划就比较笼统。Rust 的规划几乎成了高层摘要,最终生成的代码也是错的。
  • 纯浏览器编辑体验:你没法在本地 IDE 里同时操作。发现执行中的问题,要么用浏览器内置的 diff 查看器手动改(很痛苦),要么放弃会话,本地改完重新试。我每完成一个任务至少有一次想打开本地编辑器

我现在怎么用?

成熟项目的小改动——加个配置选项(已有类似选项)、加个镜像已有接口的新端点、加个遵循已有文档结构的页面——我会优先用 Workspace。规划阶段能发现环境问题,生成代码符合项目规范,生成的 PR 格式可以直接走团队流程。

但是全新功能、涉及 8 个以上文件的架构改动、或者代码风格不一致的老项目,我选择手写。规划在文件数超过 8 时容易失控,自纠错变成时间黑洞,浏览器编辑让我抓狂。

还有一个意外的好用途:新人 onboarding。新同事想知道怎么给接口加限流,不知道该用哪个工具、改哪些文件、用什么测试模式——我让他用 Workspace 自己写规格、审计划、看生成的 PR。计划教他项目约定比我说快得多,生成的测试也展示了我们的测试模式。这个教学场景比它当自主开发者更有价值。


直达网址:https://github.com/features/copilot

类似文章