← 返回资讯
赵一鸣
产品评测编辑
已审核

GPT-5 vs Claude Opus 4:我花了 $200 做编程对比,结果出乎意料

上个月,我手头有个中型项目要重构——一个用了三年的 Flask 后端,大概 8000 行代码,要迁移到 FastAPI。这种活儿,手动改太慢,全交给 AI 又怕翻车。

GPT-5 vs Claude Opus 4:我花了 $200 做编程对比,结果出乎意料

GPT-5 vs Claude Opus 4:我花了 $200 做编程对比,结果出乎意料

说实话,写这篇文章之前我挺纠结的。

因为结论可能跟你想的不太一样。

上个月,我手头有个中型项目要重构——一个用了三年的 Flask 后端,大概 8000 行代码,要迁移到 FastAPI。这种活儿,手动改太慢,全交给 AI 又怕翻车。

于是我决定做个实验:同样的任务,分别用 GPT-5 和 Claude Opus 4 来干,看看谁更靠谱。

测试环境

先说下我的测试条件:

对,Claude 更贵。但贵有贵的道理——也有没道理的地方。

第一轮:路由改写

第一个任务是把 Flask 的 @app.route 改成 FastAPI 的 @app.get/post

GPT-5 的表现

PYTHON
# GPT-5 生成的代码
@app.get("/api/users/{user_id}")
async def get_user(user_id: int, db: Session = Depends(get_db)):
    user = db.query(User).filter(User.id == user_id).first()
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    return user

嗯,中规中矩。类型注解加了,依赖注入也用了。但是——

它把 user_id 默认当成 int,而我原来的代码里有些 ID 是 UUID。这个细节它没注意到。

Claude Opus 4 的表现

PYTHON
# Claude Opus 4 生成的代码
@app.get("/api/users/{user_id}")
async def get_user(
    user_id: str,  # 保持与原 Flask 路由一致
    db: AsyncSession = Depends(get_async_db)
):
    stmt = select(User).where(User.id == user_id)
    result = await db.execute(stmt)
    user = result.scalar_one_or_none()
    
    if not user:
        raise HTTPException(status_code=404, detail=f"User {user_id} not found")
    return user

等等,这里我要更正一下——Claude 不仅注意到了 ID 类型,还主动把 SQLAlchemy 改成了异步版本。

绝了。

这一轮,Claude 赢了。

第二轮:错误处理迁移

Flask 的错误处理用的是 @app.errorhandler,FastAPI 用的是异常处理器。

GPT-5

直接把所有错误处理器改成了 @app.exception_handler,但是——它漏掉了自定义错误码的映射。我原来有个 APIError 基类,里面有 error_code 字段,GPT-5 没处理这个。

翻车了。

Claude Opus 4

PYTHON
@app.exception_handler(APIError)
async def api_error_handler(request: Request, exc: APIError):
    return JSONResponse(
        status_code=exc.http_status,
        content={
            "error": exc.error_code,  # 保留了自定义错误码
            "message": exc.message,
            "details": exc.details
        }
    )

Claude 不仅保留了 error_code,还主动加了 details 字段。

但是——它把 http_status 写成了 status_code,而我原来的代码里用的是 http_status

大概是...看走眼了吧。

这一轮,平手。各有各的问题。

第三轮:异步改造

这是最复杂的部分。Flask 是同步的,FastAPI 推荐用异步。

GPT-5

它把所有数据库操作都加了 await,但是——它没改数据库连接池的配置。结果就是,异步代码跑起来比同步还慢。

因为连接池还是同步的,每次 await 都在等锁。

这事儿挺有意思的——GPT-5 知道要加 await,但不知道要改底层配置。

Claude Opus 4

PYTHON
# Claude 主动改了连接池配置
engine = create_async_engine(
    DATABASE_URL,
    pool_size=20,
    max_overflow=10,
    pool_pre_ping=True,  # 加了健康检查
    echo=False
)

Claude 不仅改了连接池,还加了 pool_pre_ping 来防止连接失效。

但是——它把 pool_size 从原来的 5 改成了 20,而我原来的服务器只有 2 核 4G,根本扛不住 20 个连接。

说白了,Claude 有时候会"过度优化"。

这一轮,Claude 赢了,但赢得不完美。

最终结果

| 指标 | GPT-5 | Claude Opus 4 |

|------|-------|---------------|

| 代码正确率 | 78% | 85% |

| 需要手动修改 | 47 处 | 31 处 |

| 生成速度 | 快 2.3 倍 | 基准 |

| Token 消耗 | 少 35% | 基准 |

| 总花费 | $87 | $113 |

我的结论

如果你追求速度和成本,GPT-5 更合适。它生成快,token 消耗少,适合批量处理简单任务。

如果你追求代码质量,Claude Opus 4 更靠谱。它更懂上下文,会主动考虑边界情况,但价格也更贵。

但是——

最靠谱的方案是混着用。

简单任务(路由改写、模板生成)用 GPT-5,复杂任务(异步改造、架构设计)用 Claude Opus 4。

我后来就是这么干的,总成本降到了 $95,代码质量也没掉。

一个意外的发现

测试过程中我发现,两个模型都有个共同的问题:它们都不会主动问你业务逻辑。

比如我有个 API 是"用户积分兑换",里面有复杂的业务规则。两个模型都是直接改代码,完全没问这些规则是什么意思。

结果就是,改完的代码语法对了,但业务逻辑全乱了。

这事儿让我意识到——AI 编程助手再强,也只是工具。你得告诉它业务背景,它才能写出正确的代码。

写在最后

这次测试花了我 $200 和两个周末。

值不值?

挺值的。至少我知道了什么时候该用哪个模型,什么时候该自己上。

如果你也在纠结选哪个模型,我的建议是:

1. 小项目、简单任务:GPT-5,便宜快

2. 大项目、复杂逻辑:Claude Opus 4,质量高

3. 生产环境:混着用,省钱又靠谱

对了,如果你有不同的测试结果,欢迎在评论区分享。我挺好奇其他人的体验是不是跟我一样。


标签:#GPT5 #ClaudeOpus4 #AI编程 #代码对比 #FastAPI迁移

303
4339 阅读
5 评论
分享
链接已复制
编辑说明

本文由 MakeSense 编辑团队撰写并审核。文中引用的数据和观点均经过交叉验证,如有疏漏欢迎在评论区指正。最后更新:2026年07月10日 17:37

赵一鸣

产品评测编辑

前产品经理,现专注 AI 工具评测。实测过 30+ 款 AI 产品,擅长横向对比和用户体验分析。

读者评论 5

运营小陈 1周前
转发到团队群了,大家都觉得有参考价值。
回复 点赞 (4)
数据分析师 1周前
数据引用很扎实,建议补充一下近三个月的最新数据。
回复 点赞 (9)
产品经理阿杰 2天前
从产品角度看,这个方向确实有机会,但商业化路径还需要验证。
回复 点赞 (15)
张工 5天前
写得很实在,特别是实测对比那部分,跟我自己的使用感受一致。
回复 点赞 (12)
前端工程师 1周前
代码示例很清晰,直接用到项目里了。
回复 点赞 (6)