记一次对 Claude、GPT、Gemini、GLM、DeepSeek 真实评测

这是一个正在开发中的 Unity C# 项目。

本次我进行测试的是一份需求案,我已经做了好预制体,而模型需要编写代码。

这是一个皮肤系统的开发,主要需要实现皮肤界面 SkinUI 和皮肤属性界面 SkinAttrUI。

但是我们项目有需求实现的规范,所以模型需要阅读已有的代码并遵循这些规范。

界面大概是这样子的:

这是我提交给模型的所有指令:

可以说很多细节并未完全在需求案里讲清楚,如果不阅读项目代码那么很难完成任务。

而且细节非常多,指令遵循不好的模型可能会遗漏很多细节的实现。

环境

  • 统一使用 VSCode Copilot + Unify Chat Provider。
  • 统一使用 皮肤功能开发.md 文档。
  • Kimi K2.5 来自官方 API。
  • Minimax M2.1 来自 iFlow。
  • GLM 4.7 来自官方 API。
  • DeepSeek V3.2 来自官方 API。
  • GPT 5.2(xhigh)、GPT 5.2-Codex(xhigh)、GPT 5.1-Codex-mini(medium) 来自 CodeX 订阅。
  • Gemini 3 Pro、Gemini 3 Flash 来自 Copilot 订阅。
  • Claude Opus 4.5、Claude Sonnet 4.5 来自中转站(宣称官 Key)。

速度

以下速度仅供参考,因为未排除受网络状况影响的因素。

  • Minimax M2.1: 5 分钟。
  • Kimi K2.5: 11 分钟。
  • GLM 4.7: 12 分钟。
  • DeppSeek V3.2: 22 分钟。
  • GPT 5.2(xhigh): 25 分钟。
  • Gemini 3 Flash: 22 分钟。
  • Gemini 3 Pro: 11 分钟。
  • Claude Opus 4.5: 15 分钟。
  • Claude Sonnet 4.5: 16 分钟。

代码行数

  • Minimax M2.1: (由于表现较差,所以直接没看,实在抱歉)
  • Kimi K2.5: +1808, -148
  • GLM 4.7: +1809, -4
  • DeppSeek V3.2: +1947, -13
  • GPT 5.2(xhigh): +1544, -10
  • Gemini 3 Flash: +732, -4
  • Gemini 3 Pro: +1191, -7
  • Claude Opus 4.5: +1915, -4
  • Claude Sonnet 4.5: +1670, -5

完成度

各模型:

Minimax:

  • Minimax 最后总结留下了待确认事项:皮肤ID与物品ID的映射关系 - TbskinList 表格中没有直接的 itemId 字段,需要确认映射方式。灰色材质 - 需要确认项目中置灰材质的具体路径。资源加载方式 - 需要根据项目实际使用的 YooAsset 或其他资源管理系统调整。JumpSys 跳转 - 需要确认跳转ID的具体类型和使用方式。以上第一条其实在需求案中第 35 行已经写明:item 表格,皮肤 id 对应着物品 id。灰色材质也在第 149 行写明:如何置灰:获取 m_goGray 的材质设置为需置灰组件的材质。可参考其它界面的用法。资源加载方式和 JumpSys 跳转均可通过查看项目其它代码的写法来确认,不应该需确认。且查看实际代码,Minimax 编造了 JumpMgr.Instance.Jump(skin.jumpTo); 跳转代码和置灰材质代码,即使真的需要确认,那也应该留下 TODO。
  • 未修改皮肤按钮的响应事件,无法打开皮肤管理界面。
  • 未注册系统,这会导致 sys 的生命周期函数不生效。
  • 未处理服务器数据,并说因为不知道数据结构,实际上是有的。
  • 项目中的属性值类型比较特殊,有百分比、万分比和纯数值,Minimax 只处理了百分比和纯数值。
  • 总结:由于编造了代码,所以项目无法编译,感觉 Minimax 并未参考足够的项目代码,且出现了很多幻觉,可能还有更多问题,但是没有再继续审查。

Kimi K2.5:

  • 未注册系统,这会导致 sys 的生命周期函数不生效。
  • 未修改皮肤按钮的响应事件,无法打开皮肤管理界面。
  • 未对 m_textTitleUserLevel 赋值。
  • 没有使用 AddUIEvent 注册事件。
  • 未对服务器 Type 做转换。
  • 总结:有一些没有正确处理的细节,但总体上还行。

GLM 4.7:

  • 需求案没有说要做这个赋值:m_textPreviewTypeSelect.text = _isWorldPreview ? "世界" : "城镇";,本意是好的,但这不应该做。
  • 未按照需求案的要求显示 m_goBuildingPreview
  • 加载资源使用 AssetLoader.Instance.LoadAsset,项目中并不存在这个接口。
  • 未修改皮肤按钮的响应事件,无法打开皮肤管理界面。
  • 总结:本来刚开始 GLM 4.7 大部分代码都做的感觉挺好,但是竟然出现了好几个幻觉错误,使我没有继续审查下去。

DeepSeek V3.2:

  • 需求案没有说要做这个赋值:m_textPreviewTypeSelect.text = _isWorldPreview ? "世界" : "城镇";,本意是好的,但这不应该做。
  • 编写了 LoadSprite 函数,但是调用处是注释的:// m_imgTitleBg.sprite = LoadSprite(bgPath);
  • 对 m_textTitleUserLevel 赋值 Lv.99,但项目中存在用户等级数据,应该使用真实数据。
  • 有一些奇怪的代码,看起来绝对不太对劲。
  • 用错了 CloseWindow 函数,应该使用 Close 关闭界面,这个函数根本不存在。
  • 未描述红点如何实现,自行实现了错误的红点逻辑。
  • 总结:存在很多幻觉错误,唯一一个感觉它在注释里进行自我讨论,出现一些偏差较大的代码,没必要继续审查。

Gemini 3 Pro:

  • 自言自语的注释很多,比 DeepSeek V3.2 更严重。
  • 未实现跳转逻辑,留下了一堆我看不明白的自言自语的注释。
  • 虽然并不是错误,但对网络数据的处理明显未参考项目已有代码,处理得不太规范。
  • 未注册系统,这会导致 sys 的生命周期函数不生效。
  • 未正确实现属性展示,留下了一大堆自言自语的注释。
  • 出现幻觉 GameModule.Resource.LoadImageAsync 调用,项目中并不存在这个接口。
  • 唯一一个未在要求的文件续写文件的模型,自己拷贝了一份内容创建了一个新的文件到自认为正确的位置。
  • 总结:与 DeepSeek V3.2 半斤八两,更加自言自语,比 Gemini 3 Flash 更差,没必要继续审查。

Gemini 3 Flash:

  • 使用了不存在的 UIManager.Instance.OpenWindow 函数打开界面,项目中并不存在这个接口。
  • 未实现跳转逻辑,留下了 TODO 注释,但我在指令中提到不允许 TODO 需直接报告。
  • 未注册系统,这会导致 sys 的生命周期函数不生效。
  • 未修改皮肤按钮的响应事件,无法打开皮肤管理界面。
  • 虽然并不是错误,但对网络数据的处理明显未参考项目已有代码,处理得不太规范。
  • 未对 m_textTitleUserLevel 和 m_textTitleUserName 赋值,但编写了注释。
  • 总结:Gemini 3 Flash 代码注释非常少,且写法非常简洁直接,能看到一些自言自语的注释:// Title preview also shows building? Yes, according to requirements.。由于出现了幻觉错误,所以没必要继续审查。

GPT 5.2(xhigh):

  • 存在重复事件接收,但只会造成性能问题。
  • 总结:严谨、细节周到、虽然还达不到完美,但是已是最好的一个。

GPT 5.2(medium):

  • 出现重复事件接收,但只会造成性能问题。
  • 总结:没有仔细审查,部分代码编写的没有 5.2 好,但总体是一致的。

GPT 5.2 Codex(xhigh):

  • 未注册系统,这会导致 sys 的生命周期函数不生效。
  • 总结:没有仔细审查,只是粗略看了一下与 5.2 的区别,可以发现部分代码编写的没有 5.2 好,有些代码结构也与 5.2 有所不同,但总体是一致的。

GPT 5.1 Codex mini(medium):

  • 做了一半,突然跟我说 抱歉,我没能将 SkinUI 的实现按计划完成。你希望我继续吗?,我问为什么,他只是说了一下当前的工作进度,然后我回复继续,就继续直到完成了。
  • 出现了直接在原有文件内容上直接新增导致出现两个相同的类的情况。
  • 总结:没有仔细审查,总体而言代码质量还可以,由于出现两个相同的类导致无法编译。

Claude Opus 4.5:

  • 未对服务器 Type 做转换。
  • 未在显示称号时更新建筑的预览。
  • 总结:代码风格看着舒服,在细节上有些缺失。

Claude Sonnet 4.5:

  • 未对服务器 Type 做转换。
  • 未在显示称号时更新建筑的预览。
  • 总结:本次与 Opus 4.5 写的没有什么差距。

无关对错的选择:

  • 需求案未提到属性总览弹窗在没有属性加成的情况下该如何处理:Minimax: 做了隐藏所有内容的处理,也就是会弹出一个空弹窗。Kimi K2.5: 由于没准备空提示节点,使用了一个列表项隐藏背景和图标,只显示“暂无激活的皮肤属性”文本。GLM 4.7: 没有做任何处理,也就是会弹出一个空弹窗。DeepSeek V3.2: 有做判断,但是仅仅是 return 并且继续在进行自我讨论:// 没有属性加成,显示空状态?。Gemini 3 Flash: 没有做任何处理,也就是会弹出一个空弹窗。Gemini 3 Pro: 没有做任何处理, 但留下了自言自语的注释。GPT 5.2 系列: 没有做任何处理,也就是会弹出一个空弹窗。Claude 4.5 系列: 由于没准备空提示节点,使用了一个列表项隐藏背景和图标,只显示“暂无皮肤属性加成”文本。
  • 颜色处理:Kimi K2.5: 选择了 new Color32(0x2B, 0x73, 0xB6, 0xFF) 性能最好的写法。GLM 4.7: 参考了项目最常见的写法 ColorUtility.TryParseHtmlString("#" + outlineColor, out color)。DeepSeek V3.2: 参考了项目最常见的写法 ColorUtility.TryParseHtmlString("#" + outlineColor, out color)。Gemini 3 Flash: 参考了项目最常见的写法 ColorUtility.TryParseHtmlString("#" + outlineColor, out color)。Gemini 3 Pro: 参考了项目最常见的写法 ColorUtility.TryParseHtmlString("#" + outlineColor, out color)。GPT 5.2 系列: 参考了项目最常见的写法 ColorUtility.TryParseHtmlString("#" + outlineColor, out color)。Claude 4.5 系列: 参考了项目最常见的写法 ColorUtility.TryParseHtmlString("#" + outlineColor, out color)。
  • 注释:Kimi K2.5: 基本都注释了,注释只有描述,没有参数、返回值等字段。GLM 4.7: 基本注释了,注释的详细程度好像有一定的规则,私有函数只有描述,公共函数则有参数和返回值等字段。DeepSeek V3.2: 在注释里进行自我讨论。Gemini 3 Flash: 注释很少,并且未发现明显规律,并不是靠函数的访问权限来区分注释详细程度。Gemini 3 Pro: 有意义的注释很少,比 Flash 更少,但行间自言自语的注释最多。GPT 5.2(xhigh): 注释比较规范,公共函数有参数和返回值等字段,私有函数只有描述。Claude 4.5 系列: 编写了很多行间注释,文档级别的注释中,私有函数要不没有,要不只有描述,公共函数则有参数和返回值等字段。
  • 判空处理与防御性编程:Kimi K2.5: 正常。GLM 4.7: 大量的判空,在我看来,绑定预制体组件的判空不必要:if (m_goBuildingPreview != null)。DeepSeek V3.2: 正常。GPT 5.2(xhigh): 极其严谨,做了很多很好的处理,虽然少数地方显得有一点冗余。Gemini 3 Flash: 最乐观了,几乎没有任何判空处理,像人写的。Gemini 3 Pro: 和 Flash 差不多。Claude 4.5 系列: 正常。
  • 虽然并未要求,但 GPT 5.2(xhigh):为 SkinAttrUI 增加了数据刷新同步更新界面的处理。应该是读取到了项目中存在功能解锁系统,把解锁逻辑也写上了(Kimi K2.5 也做了)。

最终总结

在这个复杂度的需求下,是否应该说国产模型几乎全军覆没,或者说除了 Claude / GPT 之外,没有一个能打的?

Tier 3

  • DeepSeek V3.2
  • GLM 4.7
  • Minimax M2.1
  • Gemini 3 Pro
  • Gemini 3 Flash
  • GPT 5.1 Codex mini(medium)

该梯队的模型存在幻觉,需要改的太多,无法编译。

Minimax M2.1 的时间最快,也是我第一个审查的,也是一眼就能看出无法通过编译的,但只有他在总结中留下了待确认事项,其它模型对于不确定的地方只是编造代码或者留下注释。

GLM 4.7、DeepSeek V3.2 存在很多幻觉,也是无法编译的。

GPT 5.1 Codex mini 的代码其实和 Tier 2 或者 Tier 1 的模型差不多,但可惜在有一个文件里直接新增了一个重复类,导致无法编译。

最令人失望的是 Gemini 3 系列,可能是 Copilot 提供的模型思考程度不高?Gemini 3 Pro 刚出来的时候我作为了一段时间的主力模型,当时感觉它可能比 Opus 还要好,但这次的表现实在惊讶。只能说下次有机会再看看吧。

但 GLM 4.7 绝对是这几个里表现最好的。

Tier 2

  • Kimi K2.5

该梯队只有一个模型 Kimi K2.5,漏做了一些细节,有一些错误,但总体上还能接受,至少已经可以编译通过。

Tier 1

  • GPT 5.2(medium)
  • GPT 5.2 Codex(xhigh)
  • Claude Opus 4.5
  • Claude Sonnet 4.5

该梯队的模型存在本次测试模型中常犯的错误,但极少,表现已经很不错。

Claude 4.5 系列的两个模型在本次测试的差距没拉开,犯了一样的错误。

GPT 5.2(medium) 是唯二的两个没有出现逻辑错误的模型,是本梯队表现最好的模型。

Tier 0

  • GPT 5.2(xhigh)

GPT 5.2(xhigh) 我是和 MiniMax M2.1 一起审查的,但两者的差距较大。

相对其它梯队的模型,它几乎将每个细节都处理到位,每一个简短的指令都遵循了,并且在需求案中没有提到具体如何做的地方它也做出了不能称得上是问题的处理。

当然,对于这个需求案的实现上还称不上完美,我需要调整一些细节才能合并到项目中,如果他能遵循我对于不确定的需求要进行询问的指令的话那就更好了,但相较于其它模型确实是当之无愧的 T0。

1.31 补充

Copilot 订阅的争议比较大,所以我又使用 Gemini CLI 和反重力订阅重新对 Gemini 3 Pro 和 Flash 测了一遍,结果是基本上一致,问题依然存在。

补测 Doubao 的两个模型:

Doubao Seed 1.8:

  • 虚构了 IsPercentage 字段,配置表中没有该字段
  • 没有注册 sys
  • 没有在打开皮肤界面按钮上注册事件
  • 第一个写死 Tabs(tab1,tab2,tab3)实现的模型,其它模型是通过 Map 支持扩展更多 Tab
  • 虚构了 GameModule.Resource.LoadSprite 方法
  • 网络事件处理不符合项目规范
  • 像是 Claude 一样有很多行间注释,但文档注释比 Claude 更全。
  • 最终结果:无法编译,排在 Tier3,比 GLM 4.7 弱。

Doubao Seed Code:

  • 虚构了 JumpSys.Instance.Jump 函数。
  • 没有注册 sys
  • 没有在打开皮肤界面按钮上注册事件
  • 没有实现所有图片加载代码
  • 没有实现获取属性名称
  • 像是 Claude 一样有很多行间注释,但文档注释比 Claude 更全。
  • 最终结果:无法编译,Doubao Seed 1.8 和 Code 之间互有对方没有的问题,但总体还是排在 Tier3,都比 GLM 4.7 弱。
#AI Coding的使用心得#
全部评论

相关推荐

晚上和一个老哥聊天,加深了自己对一些事情的思考就是一个人在公共场合敢实名表达自己的感受,自己的思考,自己的观点,是一件需要非常非常大勇气的事情,这意味着你触达内心的想法感受,会被大众所注视,审判,而绝大多数人都会异常在意别人对自己的看法,所以当大规模的眼光都看在你身上的时候,这种压力不是谁都能抗下来的。小一点的是在朋友圈写小作文发表自己内心的想法,之前我是能经常看到不少同学吃一个东西 或者 去一个地方玩然后长篇大论写下自己感受的朋友圈,但现在我也很少在朋友圈看到这些内容了,大家是长大了,开始忽略这些感受了,还是越来越不愿意拿出来分享了……大一点是直接做自媒体,更大范围地展示自己,直接向全互联网的人述说自己的经历,表达自己的想法,展示自己性感的大脑,让互联网的所有人凝视你,审判你,赞扬你,诋毁你……说实话,这非常像把自己扒光了游街示众的感觉,只有真正在互联网上实名发表过这种口播视频之后,才懂这种感觉有多奇妙哈哈哈我们不说钱不钱的问题,关说对个人能力的提升,这非常锻炼人,非常非常锻炼人,你的表达能力,你的心理素质都在全方面提升,你的心理抗压能力也会不断提升,因为无论怎么说都有人骂你,你说苹果手机好用,都有人骂你叛国贼[捂脸][捂脸][捂脸]一开始最大的障碍就是怕熟人看到,特别尴尬,怕大家议论你,嘲笑你,但其实真的有那么多人关注你吗?真的有那么多人嘲笑你吗?可能都是自己在臆想,出现幻觉了就算真的有人当面嘲笑你,这又怕什么呢,我始终坚信一个真正从0到1在某个领域做成功一件事的人(标准:得到这个领域人的普遍认可)是不会嘲笑一个开始很笨拙的人,因为谁不是这样走过来的?谁一开始就做的很好,谁刚开始做就很随心所欲,是你吗?一个健身大神会嘲笑一个刚入健身房的新手吗?一个高级程序员会嘲笑一个刚学会打hello world的新手吗?一个减肥成功的人会嘲笑刚开始跑几步路就喘的胖子吗?一个作家会嘲笑刚开始写小作文词不达意语句不通顺的菜鸟吗?一个人但凡能嘲笑你,那就证明他没做成哪怕至少一件事,没在一个领域得到绝大多数人的普遍认可,这种人的嘲笑是多么无力,这是他无能的狂怒,他自己不敢,自己半途而废,他怕你做成了,证明他自己是废物而已(这里说话比较难听)从我刚开始从化学跨行当程序员时,我就开始向外展示这些事情,然后无论在现实里还是在互联网上,我都听过非常非常多嘲笑的声音,否定的声音,所以我一度非常敏感,非常脆弱在大二这一年我几乎不敢见人,我每天吃喝拉撒都在实验室的小工位,我怕出去会被人嘲笑,会被否定,因为随随便便一句话我就能蹲在天台哭一晚上,直到我突然进了美团的日常实习,直到我突然进了字节的暑期实习,直到我秋招又拿了字节的offer,这个时候我已经站在高处,我回头看,我向下看,之前那些否定嘲笑的声音早已听不见,我已经在山上了,而他们又在哪呢?而我发现当时那些鼓励我,认可我,支持我的兄弟们,不是那些已经在某个领域取得一定成果的人,就是那些同样在路上的同伴,好像只有这些人,他们才会对蹒跚学步的新手给予鼓励与帮助……最后居然戏剧性地来了一个callback 呼应了我大一演小品的一句台词且视他人之疑目如盏盏鬼火大胆地去走你的夜路!这是我自己的亲身经验,也是我想表达,传递的内容,想干什么就去干吧,至于别人怎么看,随他吧,反正弱者才会嘲笑你,强者都会向你伸出援手……
牛友故事会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务