乐于分享
好东西不私藏

AI写代码到底靠不靠谱?我让Claude Code+GLM5写了5个项目

AI写代码到底靠不靠谱?我让Claude Code+GLM5写了5个项目

2026年,AI写代码已经不是新鲜事。但AI写代码到底靠不靠谱?我让Claude Code写了5个真实项目,给出了成功率、代码质量、踩坑经验。

先看下token消费量:

测试环境

工具: Claude Code(Anthropic的AI编程助手)

模型: GLM5

项目类型: 全栈Web应用、工具库、数据处理、脚本、API

测试周期: 2026年3月-4月

项目1:全栈Web应用(个人博客)

▪ 需求

功能:

  • 文章发布、编辑、删除
  • 标签分类
  • 评论功能
  • Markdown编辑器
  • 响应式设计

技术栈:

  • 前端:React + TypeScript + Tailwind CSS
  • 后端:Node.js + Express + PostgreSQL
  • 部署:Docker + Nginx

▪ 结果

成功率: 85%

能做的:

  • ✅ 生成项目脚手架(create-react-app + Express)
  • ✅ 设计数据库schema
  • ✅ 实现CRUD接口
  • ✅ 实现前端页面布局
  • ✅ 集成Markdown编辑器

不能做的:

  • ❌ 复杂的交互逻辑(如拖拽排序)
  • ❌ 性能优化(如虚拟滚动)
  • ❌ 安全细节(如CSRF防护)

▪ 踩坑

坑1:生成的API没有错误处理

// Claude生成的代码app.get(‘/api/posts’, async (req, res) => {    const posts = await db.query(‘SELECT * FROM posts’);    res.json(posts);});// 需要手动添加app.get(‘/api/posts’, async (req, res) => {    try {        const posts = await db.query(‘SELECT * FROM posts’);        res.json(posts);    } catch (error) {        console.error(error);        res.status(500).json({ error: ‘Internal server error’ });    }});

坑2:SQL注入风险

// Claude生成的代码(有注入风险)app.get(‘/api/posts/:id’, async (req, res) => {    const { id } = req.params;    const post = await db.query(`SELECT * FROM posts WHERE id = ${id}`);    res.json(post);});// 需要手动修复app.get(‘/api/posts/:id’, async (req, res) => {    const { id } = req.params;    const post = await db.query(‘SELECT * FROM posts WHERE id = $1’, [id]);    res.json(post);});

▪ 评分

代码质量: ⭐⭐⭐⭐☆ (4/5) 

可维护性: ⭐⭐⭐☆☆ (3/5) 

安全性: ⭐⭐☆☆☆ (2/5)

项目2:工具库(日期处理)

▪ 需求

功能:

  • 日期格式化
  • 日期计算(加减天数)
  • 日期比较
  • 时区转换
  • 相对时间(如”3天前”)

技术栈:

  • TypeScript
  • Jest(测试)

▪ 结果

成功率: 95%

能做的:

  • ✅ 实现所有核心功能
  • ✅ 处理边界情况(如闰年)
  • ✅ 编写单元测试
  • ✅ 生成文档

不能做的:

  • ❌ 性能优化(如大量日期的批量处理)

▪ 踩坑

坑1:时区处理有bug

// Claude生成的代码(有时区bug)function formatDateTime(date: Date, timeZone: string): string {    return date.toLocaleString(‘en-US’, { timeZone });}// 实际测试时发现某些时区不准确// 需要手动修复function formatDateTime(date: Date, timeZone: string): string {    return date.toLocaleString(‘en-US’, {        timeZone,        year: ‘numeric’,        month: ‘2-digit’,        day: ‘2-digit’,        hour: ‘2-digit’,        minute: ‘2-digit’,        second: ‘2-digit’,        hour12: false    });}

▪ 评分

代码质量: ⭐⭐⭐⭐⭐ (5/5) 

可维护性: ⭐⭐⭐⭐☆ (4/5) 

测试覆盖: ⭐⭐⭐⭐☆ (4/5)

项目3:数据处理脚本(日志分析)

▪ 需求

功能:

  • 解析日志文件
  • 统计错误数量
  • 生成报表
  • 发送邮件通知

技术栈:

  • Python
  • pandas
  • smtplib

▪ 结果

成功率: 90%

能做的:

  • ✅ 解析日志文件
  • ✅ 统计错误数量
  • ✅ 生成CSV报表
  • ✅ 发送邮件

不能做的:

  • ❌ 大文件处理(日志文件超过1GB时会OOM)

▪ 踩坑

坑1:大文件OOM

# Claude生成的代码(有OOM风险)def parse_log_file(file_path):    with open(file_path, ‘r’) as f:        lines = f.readlines()  # 一次性读取所有行    # 处理逻辑…# 需要手动修复def parse_log_file(file_path):    results = []    with open(file_path, ‘r’) as f:        for line in f:  # 逐行读取            # 处理逻辑…            results.append(result)    return results

▪ 评分

代码质量: ⭐⭐⭐⭐☆ (4/5) 

性能: ⭐⭐⭐☆☆ (3/5) 

健壮性: ⭐⭐⭐☆☆ (3/5)

项目4:RESTful API(任务管理)

▪ 需求

功能:

  • 创建任务
  • 更新任务
  • 删除任务
  • 查询任务列表
  • 任务状态流转

技术栈:

  • Go + Gin
  • PostgreSQL
  • Docker

▪ 结果

成功率: 90%

能做的:

  • ✅ 设计API规范
  • ✅ 实现所有CRUD接口
  • ✅ 数据库迁移
  • ✅ 生成Swagger文档

不能做的:

  • ❌ 复杂的查询(如多表联查)
  • ❌ 性能优化(如索引优化)

▪ 踩坑

坑1:并发安全问题

// Claude生成的代码(有并发问题)func UpdateTaskStatus(c *gin.Context) {    id := c.Param(“id”)    var req UpdateStatusRequest    c.BindJSON(&req)    // 查询    task, _ := db.GetTask(id)    // 更新    task.Status = req.Status    db.UpdateTask(task)    c.JSON(200, task)}// 需要手动添加事务和乐观锁func UpdateTaskStatus(c *gin.Context) {    id := c.Param(“id”)    var req UpdateStatusRequest    c.BindJSON(&req)    tx := db.Begin()    defer tx.Rollback()    // 查询(加锁)    task, _ := tx.GetTaskForUpdate(id)    // 检查版本    if task.Version != req.Version {        c.JSON(409, gin.H{“error”: “conflict”})        return    }    // 更新    task.Status = req.Status    task.Version++    tx.UpdateTask(task)    tx.Commit()    c.JSON(200, task)}

▪ 评分

代码质量: ⭐⭐⭐⭐☆ (4/5) 

并发安全: ⭐⭐⭐☆☆ (3/5) 

性能: ⭐⭐⭐☆☆ (3/5)

项目5:CLI工具(文件转换)

▪ 需求

功能:

  • 转换图片格式(PNG→JPG, JPG→PNG)
  • 批量处理
  • 压缩图片
  • 生成缩略图

技术栈:

  • Rust
  • clap(命令行解析)
  • image库

▪ 结果

成功率: 80%

能做的:

  • ✅ 命令行参数解析
  • ✅ 图片格式转换
  • ✅ 批量处理
  • ✅ 生成缩略图

不能做的:

  • ❌ 复杂的压缩算法
  • ❌ 多线程优化

▪ 踩坑

坑1:内存泄漏

// Claude生成的代码(有内存泄漏)fn convert_image(input: &Path, output: &Path) -> Result<()> {    let img = image::open(input)?;    img.save(output)?;    Ok(())}// 需要手动添加资源清理fn convert_image(input: &Path, output: &Path) -> Result<()> {    let img = image::open(input)?;    let mut out_file = File::create(output)?;    img.write_to(&mut out_file, ImageFormat::Png)?;    drop(out_file); // 显式释放    Ok(())}

▪ 评分

代码质量: ⭐⭐⭐☆☆ (3/5) 

性能: ⭐⭐⭐☆☆ (3/5) 

安全性: ⭐⭐⭐⭐☆ (4/5)

总结:AI写代码的优缺点

▪ 优点

  1. 速度快
    生成脚手架、CRUD代码比手写快10倍
  2. 覆盖广
    各种编程语言、框架都能处理
  3. 代码规范
    生成的代码通常符合最佳实践
  4. 降低门槛
    新手也能快速搭建项目

▪ 缺点

  1. 不擅长复杂逻辑
    如性能优化、并发安全、安全防护
  2. 有bug
    生成的代码需要测试和review
  3. 缺乏上下文
    不知道项目的业务逻辑和架构
  4. 过度依赖
    可能导致开发者能力退化
以上。
整体上的感觉,目前仍然需要“扶着走”。AI会有不少清奇的逻辑回路,需要纠正。

如何正确使用AI写代码?

▪ 1. 搭建脚手架

✅ 适合: 生成项目结构、基础配置

❌ 不适合: 复杂的架构设计

▪ 2. 生成样板代码

✅ 适合: CRUD接口、基础页面

❌ 不适合: 核心业务逻辑

▪ 3. 编写测试

✅ 适合: 单元测试、集成测试

❌ 不适合: 性能测试、压力测试

▪ 4. 代码审查

✅ 适合: 检查代码风格、常见错误

❌ 不适合: 业务逻辑review

一句话记住核心

AI写代码 = 快速生成脚手架 + 大量样板代码 + 需要人工测试和优化

AI是助手,不是替代。真正有价值的是:理解业务、架构设计、性能优化、安全防护——这些都需要人的判断。

AI已来,程序员的天已经塌了!

有产品Sense的程序员将统治世界!

Vibe Coding:LLM幻觉也能写出高质量代码?

LLM天生有幻觉,为啥 VibeCoding 还被吹爆?不怕写出 Bug 吗?

学习了知识图谱,发现大模型的幻觉还能再降低几个点!怎么做到的?一文讲清楚