TL;DR
测试日期:2025-08-04。环境:Cursor 1.2.4,VS Code 1.102.3,GitHub Copilot 1.331.0,Node.js 20.16.0。结论:Cursor适合跨文件改造,Copilot适合行级补全和测试补齐。不要让AI直接改生产分支。先建基线、限定上下文、跑测试、再提交PR。
前置条件与基线检查
-
确认本地版本。以下命令在 Windows Terminal、macOS Terminal、Linux shell 均可执行。
node -v git --version npm -vv20.16.0 git version 2.45.2 10.8.1 -
建立独立分支。不要在 main/master 上使用 AI 批量改代码。
git checkout -b feat/ai-job-search-refactor-20250804Switched to a new branch 'feat/ai-job-search-refactor-20250804' -
记录当前测试基线。我的样例项目是制造业岗位搜索接口,包含 184 个单元测试。
npm test -- --runInBandTest Suites: 22 passed, 22 total Tests: 184 passed, 184 total Time: 38.214 s
Note: 如果你在搜索“Cursor下载”或“GitHub Copilot怎么用”,先完成官方安装和登录。免费路线可用 Cursor 免费额度、VS Code 内置 Copilot 试用或本地模型;限制是上下文长度、速率和模型质量不稳定。
步骤:让 Cursor 做跨文件改造,让 Copilot 做局部补全
-
先找真实入口,不要凭文件名猜。以“职位搜索”模块为例。
grep -R "job search\|searchJobs\|职位" -n src test | head -20src/api/jobs.ts:42:export async function searchJobs(query) src/services/ranking.ts:11:export function rankJobs(jobs, profile) test/jobs.search.test.ts:8:describe('job search') -
在仓库根目录新增 Cursor 规则文件,约束输出格式。这个比“写得更好”有效。
mkdir -p .cursor cat > .cursor/rules.md <<'EOF' Project rules: - Do not change public API names unless tests are updated. - Prefer small pure functions. - Add tests before behavior change. - For job search ranking, preserve salary, location, skill keyword weights. - Return diff only when asked. EOFcreated .cursor/rules.md -
在 Cursor Chat 使用明确提示词。不要让它“优化项目”。可复制:
Read src/api/jobs.ts, src/services/ranking.ts, test/jobs.search.test.ts. Task: add support for manufacturing skill aliases: CNC=数控, PLC=可编程控制器, MES=制造执行系统. Constraints: 1. Keep existing API response shape. 2. Add unit tests first. 3. Show changed files and reasoning in 8 lines max.Expected: Cursor lists 2-3 files, proposes tests, avoids unrelated formatting changes. -
用 Copilot 生成测试断言。把光标放在测试文件空白处,写注释后等待补全。
// test: search "CNC" should match jobs containing "数控"Expected: Copilot suggests an it(...) block with query, fixtures, and expect(...). -
执行测试并拒绝红灯提交。
npm test -- --runInBand test/jobs.search.test.tsPASS test/jobs.search.test.ts Tests: 9 passed, 9 total Time: 4.862 s
Warning: Copilot 很容易编造不存在的 helper。每次接受补全后立即搜索符号来源。
grep -R "normalizeSkillAlias" -n src test
src/services/ranking.ts:6:function normalizeSkillAlias(keyword)
PR前验证与故障定位
-
查看 AI 改动范围。超过 300 行且没有迁移理由,拆小。
git diff --statsrc/services/ranking.ts | 34 +++++++++++++++++++++++++ test/jobs.search.test.ts | 41 ++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) -
测接口耗时。我的本地样例从 142ms 变为 149ms,增幅 4.9%,可接受。
curl -w "\ntime_total=%{time_total}s\n" "http://localhost:3000/api/jobs?q=CNC" -o /tmp/jobs.json -stime_total=0.149231s -
提交前跑全量检查。
npm run lint && npm test -- --runInBandLint: 0 errors Test Suites: 22 passed, 22 total Tests: 187 passed, 187 total
如何验证它确实修好了: 搜索“CNC”返回包含“数控”的岗位;搜索“PLC”返回电气自动化岗位;旧关键词“数控”结果数量不下降;全量测试通过;接口耗时增幅低于 10%。这比主观评价“AI写得不错”可靠。
References: Cursor教程:使用内置 Rules 固定项目约束;GitHub Copilot教程:用注释驱动测试补全;Gemini怎么注册、Google AI怎么用、Gemini国内使用属于独立账号和网络问题,不应混入代码审查流程。若官方、免费或自建路线不稳定,商都加速器也可作为网络连通性选项之一:wizzegroup.com。