苦逼前端

AI 编程助手对比测试报告

Javascript2025-08-29 18:39:01AIclaudecursor

Claude-Code/Gemini-Cli/Cursor-Cli/JoyCode/Trae/CodeBuddy/Qoder 大比拼

测试场景:Git 仓库创建功能优化

项目概览

项目结构

  • ./frontend - 前端工程
  • ./backend - 后端工程

场景描述

此项目的功能是通过指定的模板来创建 Git 仓库。目前存在的问题是:创建仓库时会直接调用 Git 创建仓库的接口,没有判断是否已经存在,如果已经存在了会返回 400 错误。

迭代需求

用户输入仓库名字并且选择了 group 后,要先检查该仓库是否已经存在,如果已经存在则提示用户更换名字或 group。


测试结果对比

1. Claude-Code

第一轮对话

提示词:

此项目包含创建 git 仓库的功能,用户输入仓库名字并且选择了 group 后,要先检查该仓库是否已经存在,如果已经存在则提示用户更换名字或 group

结果:

  • 直接在创建 git 仓库的接口上做了个逻辑分支
  • 增加了仓库不存在的错误码
  • 检测仓库是否存在的 API 接口地址是瞎猜的
  • 前端修改了创建仓库的逻辑,如果匹配仓库不存在的错误码就弹窗提示用户

第二轮对话

提示词:

后端要新增一个接口来检查是否存在,前端当用户输入了仓库名字并且选择了 group 后就调用检查,另外你检查仓库是否存在的接口地址是错的,要参考 gitlab v4 的接口来调用

结果: 功能可用

功能展示

Claude-Code 用户界面 1 Claude-Code 用户界面 2

用户输入界面和检查结果 / 仓库名称检查功能

Claude-Code 用户界面 3

错误提示显示


2. Gemini-Cli

第一轮对话

提示词:

此项目包含创建 git 仓库的功能,用户输入仓库名字并且选择了 group 后,要先检查该仓库是否已经存在,如果已经存在则提示用户更换名字或 group

结果:

  • 直接在创建 git 仓库的接口上做了个逻辑分支
  • 增加了仓库不存在的错误提示
  • 直接假设数据库中存在了所有的库,直接去数据库中查,这明显是不对的

第二轮对话

提示词:

后端要新增一个接口来检查是否存在,前端当用户输入了仓库名字并且选择了 group 后就调用检查,另外你检查仓库是否存在要参考 gitlab v4 的接口来调用

结果: 只完成了后端部分,询问我是否继续实现前端功能

第三轮对话

提示词:

继续

结果: 功能可用

功能展示

Gemini-Cli 用户界面 1 Gemini-Cli 用户界面 2

用户输入界面 / 仓库检查功能

Gemini-Cli 用户界面 3

加载状态显示

优点

  • 请求过程中有 loading 显示
  • 整体完成速度快

3. Cursor-Cli

第一轮对话

提示词:

此项目包含创建 git 仓库的功能,用户输入仓库名字并且选择了 group 后,要先检查该仓库是否已经存在,如果已经存在则提示用户更换名字或 group

结果:

  • 直接在创建 git 仓库的接口上做了个逻辑分支
  • 增加了仓库不存在的错误提示
  • 直接假设数据库中存在了所有的库,直接去数据库中查,这明显是不对的

第二轮对话

提示词:

后端要新增一个接口来检查是否存在,前端当用户输入了仓库名字并且选择了 group 后就调用检查,另外你检查仓库是否存在要参考 gitlab v4 的接口来调用

结果: 功能可用

功能展示

Cursor-Cli 用户界面 1 Cursor-Cli 用户界面 2

用户输入界面 / 仓库检查功能

Cursor-Cli 用户界面 3

仓库存在检查结果

缺点

  • 生成内容时命令行窗口一直在抖动,需要失去焦点才触发
  • 名称可用时无提示

4. JoyCode

第一轮对话

提示词:

此项目包含创建 git 仓库的功能,用户输入仓库名字并且选择了 group 后,要先检查该仓库是否已经存在,如果已经存在则提示用户更换名字或 group

结果:

  • 直接在创建 git 仓库的接口上做了个逻辑分支
  • 增加了仓库不存在的错误提示
  • 直接假设数据库中存在了所有的库,直接去数据库中查,这明显是不对的

第二轮对话

提示词:

后端要新增一个接口来检查是否存在,前端当用户输入了仓库名字并且选择了 group 后就调用检查,另外你检查仓库是否存在要参考 gitlab v4 的接口来调用

结果: 功能不可用

主要问题:

  1. 虽然新创建了接口文件,但是直接把原来从数据库中查询的逻辑搬了过去,这明显是不对的(总结里还说是参考GitLab V4 API实现)
  2. 虽然新创建了接口文件,但是居然没有去应用入口注册接口,那前端调用时必然 404 了(上面三个都自动去应用入口注册了)
  3. 没有把第一步错误修改的 create 接口恢复

第三轮对话

提示词:

把上面 3 条贴了进去

结果: 功能不可用

  • 根据 gitlab v4 接口查询仓库是否存在的地址猜错了
  • 嘴很硬,说对 create 接口的修改是必要的,拒绝恢复

第四轮对话

提示词:

我让你恢复 create 接口的代码,你怎么那么多思考呢,你马上给我恢复别废话。另外你调用的 gitlab 查询仓库的接口地址不对,你还是多思考下你该干的事情吧。

结果: 功能不可用

  • 猜了另一个不对的地址
  • 把 create 接口的修改撤销了,同时把原来的代码也删了一部分
JoyCode 错误画面

第四轮后的错误状态

第五轮对话

提示词:

我来告诉你地址吧,是这个:${gitlabAPIPrefix}/projects/${encodeURIComponent(${namespace}/${repoName})}。另外 create 接口你给我删多了,我让你把你的修改撤销,你删我的代码做什么。

结果: 开始向我提问:

JoyCode 有一个问题: 关于 joyer-create.js 文件,我需要更多信息来确定需要恢复的具体部分。您能提供以下信息吗:

哪些部分是后来添加的检查代码? 哪些原始功能被删除了? 或者您是否有原始版本的文件内容可以参考?

继续提示词:

你他妈的不会 git checkout 吗

结果: 提示我手动运行一条命令:

cd backend/node-faas-platform && git checkout -- api/joyer-create.js

这就是 IDE/插件 永远比不上命令行工具的地方

但是功能仍然不可用,失去耐心开始看代码,发现查询仓库是否存在的接口,返回的是个 object,它却认为是个 array,去 array 里面找,当然找不到了:

// JoyCode 的检查是否存在的代码
const existingRepo = Array.isArray(projects) && projects.find(project => 
    project.name.toLowerCase() === name.toLowerCase() && 
    project.namespace && 
    project.namespace.path.toLowerCase() === group.toLowerCase()
);

// 上面三个的正确做法
const checkResult = await _.get(repoCheckURL);
// If we get a valid response with project data, it exists
if (checkResult && checkResult.id) {
    return {
        exists: true,
        repoUrl: `http://xingyun.jd.com/codingRoot/${namespace}/${repoName}`,
        projectId: checkResult.id
    };  
}

缺点

  • 一直在报文件读取、写入的错误,循环了好久才跳出来
  • 最终也没有完成任务

错误展示

JoyCode 错误画面 1

文件读取错误

JoyCode 错误画面 2

持续的错误显示


5. Trae

第一轮对话

提示词:

此项目包含创建 git 仓库的功能,用户输入仓库名字并且选择了 group 后,要先检查该仓库是否已经存在,如果已经存在则提示用户更换名字或 group

结果:

  • 直接在创建 git 仓库的接口上做了个逻辑分支
  • 增加了仓库不存在的错误提示
  • 检测仓库是否存在的 API 接口地址是瞎猜的
  • 前端工程没有修改

第二轮对话

提示词:

后端要新增一个接口来检查是否存在,前端当用户输入了仓库名字并且选择了 group 后就调用检查,另外你检查仓库是否存在的接口地址是错的,要参考 gitlab v4 的接口来调用

结果: 把前端项目改报错了,methods 里面加方法没有加逗号:

/Users/xingwenliang/ai-test/test-trae/frontend/src/pages/index/index.vue: Unexpected token, expected "," (509:12)
Trae 错误画面

第二轮后的错误状态

第三轮对话

提示词:

你把前端工程改挂了: /Users/xingwenliang/ai-test/test-trae/frontend/src/pages/index/index.vue: Unexpected token, expected "," (509:12)

结果: 说是改好了,结果并没有修改(其实是改了 handleGroupChange 后面的 ,)

Trae 修复尝试

第三轮的修复尝试

第四轮对话

提示词:

别放屁了,你并没有改

结果: 他说他改了

第五轮对话

提示词:

你他妈是单细胞动物吗,我说哪里你改哪里,你新增加了两个函数,前后都没有逗号。那么问题来了,你加了两个函数,一共需要加几个逗号?

结果: 前端改好了,但是后端接口报错 404,很明显和上面 JoyCode 的问题一样,只是写了接口并没有注册

第六轮对话

提示词:

你他妈接口写好了直接就能用了吗?自来水的原理是拧开水龙头就有水吗

结果: 终于改好了,功能可用,丢失焦点触发

功能展示

Trae 功能展示 2 Trae 功能展示 1

仓库名称输入 / 用户界面展示

Trae 功能展示 3

检查结果显示

缺点

  • Auto 模式下仍需手动点击 Accept
  • 经常报文件超大错误
Trae 错误提示

文件超大错误提示


6. CodeBuddy

第一轮对话

提示词:

此项目包含创建 git 仓库的功能,用户输入仓库名字并且选择了 group 后,要先检查该仓库是否已经存在,如果已经存在则提示用户更换名字或 group

结果:

  • 直接在创建 git 仓库的接口上做了个逻辑分支
  • 增加了仓库不存在的错误提示
  • 直接假设数据库中存在了所有的库,直接去数据库中查,这明显是不对的

第二轮对话

提示词:

后端要新增一个接口来检查是否存在,前端当用户输入了仓库名字并且选择了 group 后就调用检查,另外你检查仓库是否存在要参考 gitlab v4 的接口来调用

结果: 新增加了一个接口,并且在入口注册了,但是逻辑仍然是去数据库里查

第三轮对话

提示词:

不要去数据库里查,数据库里没有,要参照 gitlab v4 的查询仓库信息的接口来判断仓库是否已经存在。另外前端也一起改了

结果: 前端新增了一个路由和页面,用来创建仓库...

第四轮对话

提示词:

我让你在已有的创建仓库的逻辑上改,你他妈为啥给我新增一个

结果: 功能可用,丢失焦点触发

功能展示

CodeBuddy 功能展示 1 CodeBuddy 功能展示 2

用户界面展示 / 检查功能演示

优点

  • 可选模型,这里选的 Claude-4.0-Sonnet
CodeBuddy 模型选择

模型选择界面


7. Qoder

第一轮对话

提示词:

此项目包含创建 git 仓库的功能,用户输入仓库名字并且选择了 group 后,要先检查该仓库是否已经存在,如果已经存在则提示用户更换名字或 group

结果:

  • 直接在创建 git 仓库的接口上做了个逻辑分支
  • 增加了仓库不存在的错误提示
  • 牛逼之处:后端先去数据库查询,再去 gitlab 查询,双重保障
  • 前端也做了相应的修改

第二轮对话

提示词:

新加个接口,在用户输入 name 并且选择了 group 后就查询

结果: 功能可用,也是输入后即触发

功能展示

Qoder 功能展示 1 Qoder 功能展示 2

用户界面展示 / 检查功能演示

优点

  • 它甚至给你把本地 mock 数据都做了一份...

总结对比

工具 对话轮数 功能状态 优点 缺点
Claude-Code 2 可用 功能完整,API调用正确 -
Gemini-Cli 3 可用 有loading提示,速度快 -
Cursor-Cli 2 可用 功能完整 界面抖动,无可用提示
JoyCode 5 不可用 - 多轮对话仍未完成,最终失败
Trae 6 可用 最终完成 需要多轮对话才完成,文件超大错误
CodeBuddy 4 可用 支持模型选择 理解偏差
Qoder 2 可用 双重保障,mock数据 -

最佳表现

  1. Claude-Code & Qoder - 2轮对话完成,功能稳定
  2. Gemini-Cli - 3轮对话完成,用户体验好
  3. Cursor-Cli - 2轮对话完成,但有小问题

需要改进

  • JoyCode - 多轮对话仍未完成,稳定性差
  • Trae - 6轮对话才完成,效率低
讨论(0)
  • 暂无,求挽尊 ~
还可输入2000个字
京公网安备 11011202003202号 鲁ICP备 13027548号-1