我让AI写了70%的代码:一个独立开发者的真实数据
开篇先定义清楚:本文的「70%」指需要手动编写(非自动生成)的业务代码中,AI(Claude Code)直接生成或辅助生成的比例。总代码量 2.5万行,其中 Prisma Client 和 shadcn/ui 这类工具自动生成的占 35%(8750行),不在统计范围内。剩下的 1.6万行业务代码里,AI参与了约 1.1万行——70%。下面每一节都是基于这个口径。
目录:
- 逐模块数据
- AI vs 人工:四类代码的边界
- AI 擅长的:写了就能用
- 只有人能做的:架构决策与 Bug 修复
- 时间账:AI 让总工期缩短了多少
- AI 代码的四种隐性成本
- AI 时代,哪些技能在涨价,哪些在打折
- 新手 vs 资深:两套使用策略
- 标准 Prompt 模板
- AI 代码的安全风险
- 常见问题
1. 逐模块数据:AI 到底参与了哪些代码
以下是志趣社区各模块的 AI 参与度。每个模块标注了代码行数,方便判断这个百分比的"体重":
| 模块 | 该模块总行数 | AI 参与度 | 原因 |
|---|---|---|---|
| Docker/Nginx 配置 | ~180 | 95% | 模式固定,AI 比人记得全 |
| 数据库迁移 SQL | ~100 | 90% | 触发器语法、索引参数,查文档不如问 AI |
| Controller 层 | ~1200 | 80% | 标准 CRUD,改 entity 名就行 |
| Service 基础 CRUD | ~2500 | 70% | Prisma 查询 + DTO 校验组合 |
| 前端页面组件 | ~3500 | 60% | UI 布局 AI 擅长,状态管理我主导 |
| 类型定义/DTO | ~800 | 50% | Prisma 自动生成的不算,自定义的 AI 辅助 |
| Service 复杂逻辑 | ~1200 | 30% | 精选算法评分公式、评论树构建——需要我设计 |
| 反爬/安全中间件 | ~400 | 20% | 安全逻辑必须先自己想清楚 |
| Bug 修复(累计) | ~900 | 5% | 几乎纯人工,AI 只能辅助定位 |
为什么 Bug 修复 AI 参与度这么低? 不是 AI 不会修——是 AI 不知道你的系统里哪个文件、哪行代码有问题。你给它一个错误堆栈和上下文,它能给出修复方案。但"从用户反馈到定位根因"这个环节,AI 帮不上忙。
2. AI vs 人工:四类代码的边界
这篇说的 70% 只统计了"需要写"的代码。以下是四类代码的定义和实际例子:
| 类别 | 例子 | 算不算"AI写了" | 占总量 |
|---|---|---|---|
| 工具自动生成 | npx prisma generate 输出、npx shadcn-ui add 组件 |
❌ 不算 | 35% |
| AI 生成 | AI 写了全部逻辑,我只改环境变量 | ✅ 算 | 28% |
| AI 辅助 | AI 写骨架,核心逻辑我改 | ✅ 算 | 28% |
| 人工编写 | 完全自己写 | ❌ 不算 | 9% |
一句话总结:工具自动生成的不算。剩下需要动脑动键盘的代码里,AI 干了 70%。
3. AI 擅长的:写了就能用
这些代码的共同特征:有标准答案,全世界有 100 万个人写过类似的东西。
Dockerfile(AI 生成,95% 参与度,~100 行):
AI 写的多阶段构建 Dockerfile,只改了两个环境变量名:
# AI 生成的 — 我改了两行:端口号 4000 和 appuser uid 1001
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --legacy-peer-deps
COPY . .
RUN npx prisma generate && npm run build
FROM node:20-alpine AS production
RUN addgroup -g 1001 -S appgroup && adduser -S appuser -u 1001 -G appgroup
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/prisma ./prisma
USER appuser
EXPOSE 4000
CMD ["node", "dist/main.js"]
Prisma 迁移 SQL(AI 生成,90% 参与度,32 行):
-- AI 写的 searchVector 触发器 + GIN 索引 + 回填,32 行,零修改
CREATE OR REPLACE FUNCTION update_search_vector() RETURNS trigger AS $$
BEGIN
NEW."searchVector" := to_tsvector('chinese', COALESCE(NEW.title, '') || ' ' || COALESCE(NEW.content, ''));
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trg_search_vector
BEFORE INSERT OR UPDATE ON "Post"
FOR EACH ROW EXECUTE FUNCTION update_search_vector();
CREATE INDEX idx_post_search ON "Post" USING GIN ("searchVector");
-- 回填历史数据
UPDATE "Post" SET "searchVector" = to_tsvector('chinese', COALESCE(title, '') || ' ' || COALESCE(content, ''));
4. 只有人能做的:架构决策与 Bug 修复
案例一:评论系统重构(人工,~200 行)
根因:CommentTree 组件里所有评论共享 replyText 和 submitting 状态。评论 A 的回复会污染评论 B 的表单。
❌ AI 写的 v1 架构:
CommentTree(全局状态 replyText, replying, submitting)
├── render(c1) → 使用全局 replyText
├── render(c2) → 使用全局 replyText ← 同一个变量!
└── render(c3) → 使用全局 replyText
✅ 我改的 v3 架构:
CommentTree(无回复状态)
├── CommentItem c1 → 自己管自己的 replyText, submitting
├── CommentItem c2 → 自己管自己的 replyText, submitting
└── CommentItem c3 → 自己管自己的 replyText, submitting
这个重构的核心是架构决策——“状态应该隔离到每个评论组件”,不是代码量。AI 可以写出 CommentItem 组件,但判断"什么时候该拆"是我做的。
Claude Opus 这类复杂推理模型可以参与简单架构梳理,比如「这个文件有哪些可以拆分的职责」,但最终决策——拆不拆、怎么拆、会不会引入新问题——需要开发者自己权衡。
案例二:HTTP 异常过滤器崩溃(Bug 修复,3 行代码,30 分钟排查)
排查路径(人做):
错误日志 "ERR_HTTP_HEADERS_SENT"
→ NestJS 什么情况下会重复发响应?
→ 翻 interceptors 和 filters 的执行顺序
→ 发现 ScrapingDetection 返回 429 后,HttpExceptionFilter 又尝试 response.json()
→ headersSent 已经是 true → 抛未捕获异常 → Node.js 进程崩溃
修复(AI 辅助):
if (response.headersSent) return; // 就这一行
AI 在这里帮了什么?我给它看了错误堆栈和 ScrapingDetection 代码,它帮我确认了"拦截器在过滤器之前执行"。但它不可能自己发现这个 Bug,因为它不知道 ScrapingDetection 和 HttpExceptionFilter 之间的调用顺序冲突。
5. 时间账:AI 让总工期缩短了多少
| 功能 | 手写预估 | AI 辅助实际 | 节省 |
|---|---|---|---|
| Docker 环境搭建 | 4h | 30min | 87% |
| Nginx 配置 | 3h | 20min | 89% |
| JWT 认证 + 2FA | 8h | 3h | 63% |
| 帖子 CRUD + 校验 | 6h | 1.5h | 75% |
| 全文搜索迁移 | 3h | 30min | 83% |
| 通知系统 | 5h | 2h | 60% |
| 评论系统 | 10h | 4h | 60% |
| 精选算法 | — | 3h | 纯人工 |
| 反爬中间件 | — | 2.5h | 纯人工 |
| 23个Bug排查 | — | ~15h | 纯人工 |
| 合计 | ~44h | ~32.5h | ~26% |
为什么"写"快了 70%,总工期只缩短了 26%?
因为 32.5 小时的时间分布是这样的:
写代码: ██████████ 12h(37%)—— 这部分 AI 加速了 ~70%
调试 Bug: ████████ 9h(28%)—— 几乎没加速
架构设计: ██████ 6h(18%)—— 没加速
写文章/文档: ████ 4h(12%)—— AI 辅助
其他: █ 1.5h(5%)
AI 加速了 37% 的工作,但这部分工作的速度提升没法等比转化为总工期缩短。
以上时间数据来自单人项目,不代表团队协作或多模块项目的效果。
6. AI 代码的四种隐性成本
成本一:审查时间
AI 生成 100 行,我需要 2-3 分钟审查。1.1 万行 AI 代码,审查花了约 3.5 小时。这个时间会计入 AI 的总成本,而不是节省。
成本二:过度自信的 Bug
真实案例 — 分页 NaN Bug:
❌ AI 写的:
skip: (page - 1) * pageSize
// 当前端没传 page 参数时:page = undefined
// (undefined - 1) * 50 = NaN → Prisma 抛 500
✅ 修复后:
const safePage = Math.max(1, Number(page) || 1);
skip: (safePage - 1) * pageSize
AI 的代码不会在不确定的地方加防御性校验。它相信函数签名里 page: number = 1 就能拦截 undefined——但实际上 @Query('page') 传进来的是 NaN,TypeScript 的默认值不管用。
真实案例 — Prisma N+1 查询:
❌ AI 写的:
const posts = await prisma.post.findMany();
for (const p of posts) {
p.author = await prisma.user.findUnique({ where: { id: p.authorId } });
}
// 100 篇帖子 = 101 次数据库查询
✅ 人工优化:
const posts = await prisma.post.findMany({ include: { author: true } });
// 100 篇帖子 = 1 次数据库查询
AI 不会自动帮你做 include 优化,因为它"看"不到数据库查询次数。
成本三:理解断层
AI 帮你写完了代码,跑通了。三天后改逻辑,盯着屏幕 20 分钟不知道从哪下手。AI 替你做了理解工作,但理解没有被转移到你的脑子里。
成本四:代码风格不统一
一个 AI 写的异常过滤器用 try-catch,另一个 AI 写的拦截器用 .pipe()。30 天后的代码库像 3 个人写的。解法:每次 AI 生成后用统一指令重写——“用跟 comments.service.ts 一样的错误处理方式重写这个”。
额外成本(未在本文时间统计中计入):
- AI API 调用费用(本项目约 $35/月)
- AI 生成的代码在后续迭代中的重构成本(当需求变化时,AI 代码的重构比手写代码更难,因为你不完全理解它)
- 上下文窗口限制(项目变大了之后,不能把所有代码一次性喂给 AI)
7. AI 时代,哪些技能在涨价,哪些在打折
在涨价(更需要了):
| 技能 | 涨幅 | 为什么 |
|---|---|---|
| 代码审查 | ↑↑↑ | 你现在每天审查的代码量是以前的 3-5 倍 |
| 需求拆解 | ↑↑↑ | 能把模糊需求翻译成 AI 能执行的精确指令 |
| 调试能力 | ↑↑ | AI 写 Bug 的方式跟人不一样,更难排查 |
| 技术写作 | ↑↑ | 文档和注释现在比代码本身更重要 |
在打折(AI 能替代大部分):
| 技能 | 折扣 | 为什么 |
|---|---|---|
| 记忆 API 语法 | ↓↓ | AI 比你记得全 |
| 写标准 CRUD | ↓↓↓ | AI 比你快 10 倍 |
| 写配置文件 | ↓↓↓ | Docker/Nginx/K8s config AI 不会忘 |
| 写 SQL 迁移 | ↓↓ | 触发器语法、索引参数,AI 比人熟 |
以上变化幅度仅基于后端开发视角。前端、测试、运维等岗位的技能变化可能有不同的侧重点。
8. 新手 vs 资深:两套使用策略
新手(1-3 年经验):
不要照搬"让 AI 写 70% 代码"的策略。
新手最大风险:AI 写出了能跑的代码 → 你以为懂了 → 实际没懂 → Bug 炸了不知道怎么排查。
建议策略:
- AI 参与度控制在 30-40%
- 让 AI 写配置文件、数据迁移、测试用例——这些适合新人理解
- 核心业务逻辑必须自己写,至少要自己设计架构
- 每个 AI 写的模块,花 20 分钟读相关文档(不是 10 分钟)
- 先学会不用 AI 排查 Bug,再用 AI 辅助排查
资深(4 年+):
可以像本文一样把 AI 参与度提到 70%。但注意:
- 审查时间不会减少——你还是需要逐行看 AI 的代码
- 你省的是"写"的时间,不是"想"的时间
- 架构决策权永远在自己手里
9. 标准 Prompt 模板
以下是我摸索出来的三个高频场景 Prompt 模板:
模板一:写新功能
你是一个 NestJS + Prisma 后端开发者。项目使用 TypeScript 严格模式。
现有代码的风格参考(附上类似功能的文件路径):
- Controller 用 @Controller 装饰器,返回 { code, message, data } 格式
- Service 用 @Injectable(),错误处理与 comments.service.ts 一致
- DTO 用 class-validator 装饰器
请实现以下功能:
[描述功能]
要求:
1. 所有参数加校验(class-validator)
2. 数据库查询用 include 避免 N+1
3. 错误情况返回明确的错误码和用户可读的消息
4. 不要使用 any 类型
模板二:排查 Bug
以下代码在生产环境中出现 [描述错误现象]。
错误日志/堆栈:
[粘贴日志]
相关代码(附上文件内容):
[粘贴代码]
请分析:
1. 可能的根因(列出 2-3 个最可能的原因)
2. 每个原因需要什么额外信息来确认
3. 修复方案(给出可用的代码)
模板三:代码审查
审查以下代码,从这几个角度给出意见:
1. 安全性:有没有 SQL 注入、XSS、越权风险
2. 性能:有没有 N+1 查询、不必要的循环、大对象拷贝
3. 错误处理:异常情况是否都被覆盖了
4. 可读性:变量命名、函数长度、注释质量
5. 与项目现有代码风格的一致性
代码:
[粘贴代码]
10. AI 代码的安全风险
AI 生成的代码可能存在以下安全隐患,不能只靠"审查":
SQL/Nosql 注入:AI 可能写出拼接 SQL 而非使用参数化查询的代码。Prisma 天然防注入,但如果 AI 写了 $queryRawUnsafe,必须人工验证输入是否来自用户。
Nginx 配置暴露:AI 给的 Nginx 配置可能遗漏安全头、或者 proxy_pass 配置不当导致后端 IP 泄露。
敏感信息泄露:AI 生成的日志代码可能打印用户输入或 Token——确保日志里有脱敏。
解决方案:
- ESLint + SonarJS 自动扫描安全规则
- Prisma 禁止
$queryRawUnsafe的使用(或加// security-reviewed注释强制人工审查) - CI 中跑
npm audit和 Snyk 安全扫描
11. 常见问题
Q: AI 能帮我做架构设计吗?
部分能。如果你给 Claude Opus 或 GPT-5 看你的项目结构和需求,它能给出合理的架构建议(如"这个模块应该拆分成两个 Service")。但它不知道你的团队能力、历史债务、以及哪些设计限制是"故意的"而非"疏忽"。所以最终决策还是你做。
Q: AI 写的代码有版权问题吗?
目前法律灰色地带。GitHub Copilot 曾被起诉使用 GPL 代码训练模型。如果你用 AI 生成的代码部署到商业产品,建议:1)不要让 AI 逐行复制已知开源项目的代码;2)关键的差异化逻辑自己写;3)关注你使用的 AI 工具的服务条款中对"生成代码所有权"的声明。
Q: 团队协作中怎么用 AI?
团队引入 AI 辅助开发时,关键是统一三个东西:1)统一的 Prompt 模板,保证代码风格一致;2)统一审查标准——AI 写的代码必须通过和人类代码一样的 CI 检查;3)PR 里标注"AI 辅助生成"的标签,让 reviewer 知道该用什么标准来看这段代码。
Q: 你怎么选择用哪个 AI 工具?
我的组合:Claude Code 写代码(最擅长 TypeScript+NestJS)、Cursor 做编辑器内的轻量补全、DeepSeek API 处理批量文本任务(便宜 62 倍)。如果你只选一个,Claude Code 或 Cursor 都可以——关键是深入用一个月,摸清它的边界再扩展。
AI 写了我 70% 的代码。但它没有做任何一个架构决策、没有排查任何一个生产 Bug、没有在设计评论系统时考虑"状态隔离"。
它让我更快地到达了"需要做决策"的时刻。多出来的时间,我用来做只有人能做的事。
如果一个开发者只会写 AI 能写的代码,那他确实该焦虑。如果一个开发者能做 AI 做不了的判断,那 AI 就是他最好的工具。
你属于哪一类?
本文基于志趣社区(zhiqu.ac)开发 30 天的真实统计。数据来自单人全栈项目,不代表所有场景。你的体验可能完全不同——欢迎来社区分享。
更多推荐



所有评论(0)