用同一段代码测了三款AI编程工具,差距比我想象中大
上周接了个小项目:做一个知识库管理工具,技术栈 React + Node.js + SQLite,不算复杂但覆盖前端、后端、数据库三层。正好借这个机会,把手上的 Cursor、GitHub Copilot、Claude Code 三款 AI 编程工具拉出来遛了一圈。
结论先说:别听网上吹哪个最好,具体场景差距能拉出几条街。
测试方式
为了公平,统一用同一个 Prompt 做三轮测试,每轮都是全新项目:
任务:
搭建 React + Vite 前端项目,实现 Markdown 编辑器 用 Express + better-sqlite3 写后端 API 前后端联调,实现笔记的增删改查
每轮之间清空所有 AI 记忆,用同一个 .cursorrules / .clinerules 约束风格。
第一轮:Cursor — 综合体验确实能打
Cursor 现在已经是 0.47 版本了(没错,还在 0.x),但稳定性比以前好了不止一星半点。
上手速度: 从安装到跑起来,5 分钟。装了 VS Code 插件基本无缝迁移,键位绑定直接复用。
Composer 模式实测:
第一轮生成前端框架,我直接 Ctrl+K 敲了这句话:
用 React + Tailwind CSS 搭一个笔记管理界面,左边文件夹树,右边 Markdown 编辑器,支持实时预览
20 秒不到,代码出来了。文件夹树用的递归组件,Markdown 编辑器集成的是 @uiw/react-md-editor,预览走的 react-markdown。
但问题也来了——生成的递归组件没加 memo 缓存,文件夹展开一多就卡。我让 Cursor Agent 模式修一下,它自己打开了性能面板分析,然后给每个树节点包了 React.memo,还顺手加了个虚拟滚动。
后端生成更稳:
用 Agent 模式写 Express 路由,给了一段数据模型的描述:
notes 表:id, title, content(markdown), folder_id, created_at, updated_at
folders 表:id, name, parent_id, created_at
Cursor 生成的 SQL 建表语句加了外键约束和索引,RESTful API 带参数校验和错误处理,基本能直接用。
踩了一个坑:Cursor 默认用的 Node 版本是项目里 .nvmrc 指定的,但 Terminal 里不会自动切换,得手动 nvm use 一下。
评分:⭐⭐⭐⭐☆
优点:Agent 模式真的能干活,多文件修改不丢上下文 缺点:偶尔会编造不存在的 API,特别是某些第三方库的新版本
第二轮:Copilot — 补全很强,但别指望它写完整功能
GitHub Copilot 在 2026 年免费版已经支持 Claude 模型了,每个月有 2000 次补全和 50 次对话额度,对轻度用户完全够用。
代码补全体验:
Copilot 的王牌始终是补全。写 React 组件时,它预测意图的准确率很高:
function NoteCard({ note, onDelete, onEdit }) {
return (
<div className="p-4 border rounded-lg hover:shadow-md transition-shadow">
<div className="flex justify-between items-start">
<h3 className="font-medium">{note.title}</h3>
<div className="space-x-2">
<button onClick={() => onEdit(note)}>编辑</button>
<button onClick={() => onDelete(note.id)}>删除</button>
</div>
</div>
// 到这里 Copilot 自动补出了下面的内容
<p className="text-gray-600 mt-2 line-clamp-3">{note.content}</p>
<span className="text-xs text-gray-400">{note.updated_at}</span>
</div>
);
}
这是 Copilot 最舒服的场景——你在写样板代码,它帮你填空。
Chat 模式问题很大:
进入 Copilot Chat 让它写后端 CRUD,效果可以用「惨不忍睹」形容。它写出来的 Express 路由没有任何错误处理中间件,SQL 用字符串拼接(better-sqlite3 支持参数化查询但默认它不写),还得逐行让人 review。
// Copilot 生成的(不安全)
app.get('/notes/:id', (req, res) => {
const note = db.prepare(`SELECT * FROM notes WHERE id = ${req.params.id}`).get();
res.json(note);
});
// 实际应该写的
app.get('/notes/:id', (req, res) => {
const stmt = db.prepare('SELECT * FROM notes WHERE id = ?');
const note = stmt.get(req.params.id);
if (!note) return res.status(404).json({ error: 'Not found' });
res.json(note);
});
数据来源:better-sqlite3 官方文档推荐始终使用参数化查询(github.com/WiseLibs/better-sqlite3)。
评分:⭐⭐⭐☆☆
优点:行内补全依然行业顶级 缺点:Chat 模式下代码质量一般,不会主动写测试和错误处理
第三轮:Claude Code — 思维深度碾压,但太贵了
Claude Code 最近更新了 Opus 4.6 模型,复杂逻辑推理能力确实强到离谱。
Install & Setup:
npm install -g @anthropic-ai/claude-code
claude
安装极其简单,但第一次用要 OAuth 登录 Anthropic 账号。
实测写后端:
给 Claude Code 的任务和 Cursor 一样,但这次我加了一个复杂需求:
写一个带事务的批量导入 API,支持 CSV 上传,每行校验,失败的不中断,成功/失败记录条数返回
说实话,这个需求放 Copilot 里估计要来回调好几轮。Claude Code 只用了 40 秒就生成了完整的实现:
router.post('/notes/import', upload.single('file'), async (req, res) => {
const results = { success: 0, failed: [] };
const rows = parseCSV(req.file.buffer.toString());
const transaction = db.transaction((records) => {
for (const row of records) {
if (!row.title || !row.content) {
results.failed.push({ row: row, reason: '标题或内容不能为空' });
continue;
}
const info = db.prepare(
'INSERT INTO notes (title, content, folder_id, created_at) VALUES (?, ?, ?, ?)'
).run(row.title, row.content, row.folder_id || null, new Date().toISOString());
results.success++;
}
});
transaction(rows);
res.json(results);
});
注意看,参数化查询、事务回滚、部分失败处理、行级校验都齐了。还额外帮我加了 CSV 列名映射和大文件流式处理。
但问题也很现实——贵。
按 Opus 4.6 的价格,完成这个项目的 API 层写了大约 400 行代码,消耗了约 $3.2 的 API 额度。同样的活如果全让 Claude Code 干,一个完整项目做下来可能上百美金。
评分:⭐⭐⭐⭐⭐(能力)/ ⭐⭐☆☆☆(性价比)
优点:逻辑能力天花板,复杂需求一次到位 缺点:价格劝退,日常小需求用纯属浪费
最终建议:怎么选
| 场景 | 推荐工具 | 理由 |
|---|---|---|
| 日常搬砖、CRUD | Cursor | Agent 模式靠谱,性价比高 |
| 写业务逻辑、补样板代码 | Copilot | 补全体验最好,免费版够用 |
| 搞复杂算法、架构重构 | Claude Code | 思维深度最强,别用来写简单 CRUD |
| 国内用户、不想交钱 | Trae(字节) | 免费,对国内生态适配好 |
从上表数据可以看到,不同工具的定价差异巨大(来源:各平台 2026 年 5 月官网定价),但更重要的是场景匹配。
我现在的日常配置是:Cursor 主力开发,Copilot 作为补全插件(免费版不白不嫖),遇到真搞不定的复杂问题再开 Claude Code。三个工具互补,比死磕一个好用太多。
工具永远只是工具,但选对了,效率翻倍不是吹的。
夜雨聆风