🤖 OpenAI o3 与 Gemini 2.5 与 OpenAI o4-Mini 的编码对比 🤔
TL;DR
如果您想直接跳到结论,以下是比较 OpenAI o3、Gemini 2.5 和 OpenAI o4-Mini 的结果的简要总结:👀
- Vibe Coding: Gemini 2.5 似乎比其他两个具有上下文感知功能的模型要好得多,这使得它在迭代自己的代码以添加新功能方面做得更好。o3 是另一个不错的选择,而 o4-Mini 似乎并不适合这里。
- 现实世界用例:对于构建一些现实世界的东西而不仅仅是构建动画等,使用这三种模型,Gemini 2.5 显然是赢家。o3 和 o4-Mini 有点相似,这两者之间没有太大区别。
- 竞技编程 (CP):我曾经测试过一个极其困难的问题,但令人惊讶的是,o4-Mini 确实解决了这个问题,并在约 50 秒内生成了完整的工作代码。
OpenAI o3 和 o4-mini 简介
O3 在大多数基准测试中处于领先地位,击败了 Gemini 2.5 和 Claude 3.7 Sonnet。
在 Aider 多语言编码基准测试中,该模型以 79.60% 的准确率刷新了最佳水平,而 Gemini 2.5 的得分为 72.90%。然而,7% 的提升意味着成本增加 18 倍。O4-mini 的准确率达到了 72%,但成本却是 Gemini 2.5 的 3 倍。
但有一件好事:当该模型用作规划器和 GPT-4.1 时,该模型以 83% 的成绩获得了新的 SOTA,成本为 65%,尽管仍然昂贵。
这是一个昂贵的模型,喜欢吃代币,所以绝对不是一个理想的模型,让模型独自在你的代码库上工作,它会让你的口袋破洞。
但我想知道 OpenAI o3 比 Gemini 2.5 和 o4-mini 有多大的改进,而且 o4-mini 的价格似乎比 o3 更划算。
那么,让我们看看它们的表现如何。最酷的是,我们将进行三种不同的代码测试。首先,你猜对了……当然是氛围编码。😉 然后,我们还将在一些实际问题和一道 CP(竞技编程)难题上测试这些模型。
氛围编码
那么,我们到底要测试什么呢?我们的想法是遵循增量软件开发的方法。首先,我们构建一个简单的原型,并让模型不断添加额外的功能。这就是氛围编码的工作原理,对吧?
让我们从一些经典且容易实现的事情开始。
1. Galaga:太空射击街机
提示:用 Python 制作一款类似 Galaga 风格的太空射击游戏 MVP。使用 pygame。添加多个随机出现在顶部的敌人。让我向上射子弹。添加一个计分器和一个带有星星的背景,营造经典的街机氛围。
OpenAI o3 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
它完美地处理了我要求添加的所有功能。我喜欢它的响应和它生成的整体代码。我不喜欢它添加的一个小功能,那就是一旦敌人接触到玩家,游戏就会完全关闭。这说得通吗?🤷♂️
Gemini 2.5 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
这很棒,我必须说它甚至比 o3 更好,因为它以非常漂亮的视觉效果处理游戏结束屏幕。
OpenAI o4-Mini 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
哇,我们得到的输出太棒了,简直完美,完全符合我的预期。它完全按照提示操作,并且添加了所需的功能。
后续提示:让敌人能够射击并在击中时添加爆炸效果,并且玩家的生命值应该有限。
OpenAI o3 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
这次也一样,其实不算bug什么的;它本身确实添加了这个功能,但一旦玩家的生命值低于0,它就会直接关闭程序。我不太喜欢它这样做,但除此之外,一切都运行良好,而且考虑到它没有使用任何资源,动画效果也很棒。
Gemini 2.5 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
子弹和动画都正常,不过碰撞动画与o3的响应相比似乎有点不协调。不过我没什么可抱怨的,因为我要求的一切都完美运行,没有任何问题。这个模型能够迭代代码,按需添加额外功能,真是太棒了。
OpenAI o4-Mini 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
现在,这太棒了!它实现了我想要的一切,从敌人射击到爆炸动画。简直完美。没有使用任何外部资源,纯粹是 Pygame 的魔法。
2.模拟城市模拟
提示:使用 JavaScript 和 3D 网格地图 (Three.js) 构建一个类似《模拟城市》风格的 MVP 模拟游戏。用户可以放置彩色建筑(住宅、商业、工业),切换建筑类型,并查看人口统计数据。游戏中可以包含道路、块状结构和移动的车辆。
OpenAI o3 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
这个实现感觉有点奇怪,但对于零样本来说,还不错。我喜欢它不仅能显示建筑物,还能显示道路。它通过街上奔跑的人来展现人口的增长,这很有趣。😆
Gemini 2.5 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
不知为何,Gemini 2.5 的编码能力非常出色。我发现它编写的代码几乎没有错误。这正是我期望的结果,它完全按照要求完成了任务。它在侧面添加了一个很棒的版本图例,而且车辆能够正确地沿着道路行驶,而不是随意行驶。
OpenAI o4-Mini 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
汽车运动的实现部分出了问题。我们可以将建筑物放置在指定位置,但无法实现摄像机旋转;除了建筑物之外,它完全是 2D 的,而且项目的整体完成度也不太好。
后续提示:扩展基础经济系统(建筑成本 + 平衡 UI)、重置按钮以及住宅区人口增长动画。添加人行道上的行人。
OpenAI o3 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
它运行正常,并且按照我要求添加了这个功能。同样的问题仍然存在,但总的来说,它不算好也不算坏。考虑到它是在零样本中完成的,没有太多上下文或示例,这已经很不错了。
Gemini 2.5 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
和以前一样棒,所有功能都已添加,小的用户界面也完美无缺。虽然它还不足以完美地投入实际使用,还需要大量工作,但仅用两个提示就能达到这个程度,真是太棒了。到目前为止,这个模型似乎是氛围编码的最佳选择。
OpenAI o4-Mini 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
满足了我的需求,但问题依旧,没有视角旋转来观察城市,人物和车辆的移动也不正确。没有《模拟城市》的氛围,而且与其他两个模型的响应相比,整体感觉很差。
这些模特符合氛围测试吗?🤔
看看这三个模型的反馈,它们在编码方面表现最佳,你对反馈满意吗?对我来说,我不满意,也许你可以用它来做一些非常小的项目。我认为氛围编码可以用来构建实际的应用程序吗?绝对不行。
完全依赖AI模型的响应来构建完整的应用程序是一个糟糕的主意,而且随着上下文的增加,得到错误响应的几率也会显著增加。所以就目前而言,坚持使用AI完成可能是更好的选择。
但是,如果我必须在这三者中选择一个模型进行氛围编码,我会选择Gemini 2.5。
真实世界用例
1. 高尔顿障碍板
ℹ️注:这个想法很大程度上受到了这条推文的启发:链接。感觉真的很有趣,所以我决定为什么不添加一些障碍和一些物理魔法,看看它能不能处理好?
您可以在此处找到提示:链接
我为球和一些旋转的障碍物(旋转的桨)添加了随机的物理属性,并观察球在碰撞时的反应。
OpenAI o3 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
跟它预想的不太一样。球都直着落下来,用来收集球的箱子也放错了位置。这跟我预想的不太一样,但也不算太糟。除此之外,包括引力变化在内的一切都正常。
Gemini 2.5 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
这个模型真的做得太棒了!从球的物理特性,到碰撞时的物理效果,再到滑块和整个高尔顿滑板的重力变化,一切都按预期运行。真的没想到会这么完美,但这次它的表现确实很棒。
OpenAI o4-Mini 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
我们取得了不错的成果。但正如我所料,它并不完美,而且存在不少问题。球和物理原理似乎运行良好,但旋转踏板却没有按照应有的方式运行,根本就不转。
但总体而言,对于零射击响应来说,这是一个可靠的结果,并且手动修复的问题并不大。
2. 依赖图可视化工具
提示:为 JavaScript 项目构建一个依赖关系图可视化工具。该应用应接受粘贴或上传的依赖项
package.json
,解析依赖项,并递归解析其子依赖项。将完整的依赖关系图显示为可交互、可缩放的节点图。
OpenAI o3 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
如果一定要说的话,我不喜欢它处理异步工作流的方式。等待每个依赖项解析完毕再继续执行,这种做法非常业余。package.json
我使用的这个内容依赖项较少,但如果一个项目有数千个依赖项怎么办?获取所有内容将需要很长时间。
它运行完美,但我觉得这是一个相当业余的小问题,必须修复。
💁 这些看似无关紧要的小事,其实都是大问题,而且仅仅依赖AI模型可能会让你陷入这样的困境。所以,在依赖AI响应时,请务必花时间阅读代码。
Gemini 2.5 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
这肯定是那种我真心觉得AI会随着每个新模型的出现而越来越好的情况。一切都很顺利,但这并不容易实现,而且考虑到这一切都是在零样本模型中完成的,这简直太棒了,难以置信。
OpenAI o4-Mini 的回应
您可以在此处找到它生成的代码:链接
这是程序的输出:
它列出了所有父包,但似乎存在一个问题,即它无法解析包的子依赖项。我看到函数中有代码buildGraph
可以递归到子依赖项,但解析父包的元数据可能存在一些问题。
代码无法运行,尽管这可能是一个小问题。然而,功能似乎被破坏了,而且无法解决。
竞技编程
1. 斑马状数字
考虑到这三个模型都非常擅长编码,我决定选择一道超难的问题(评分为 2400)。
您可以在此处找到该问题的链接:类似斑马的数字
E. Zebra-like Numbers
time limit per test
2 seconds
memory limit per test
512 megabytes
We call a positive integer zebra-like if its binary representation has alternating bits up to the most significant bit, and the least significant bit is equal to 1
. For example, the numbers 1, 5, and 21 are zebra-like, as their binary representations 1, 101, and 10101 meet the requirements, while the number 10 is not zebra-like, as the least significant bit of its binary representation 1010 is 0.
We define the zebra value of a positive integer e
as the minimum integer p such that e can be expressed as the sum of p zebra-like numbers (possibly the same, possibly different)
Given three integers l, r, and k, calculate the number of integers x such that l≤x≤r and the zebra value of x equals k.
Input
Each test consists of several test cases. The first line contains a single integer t(1≤t≤100) — the number of test cases. The description of test cases follows.
The only line of each test case contains three integers l, r (1≤l≤r≤1018) and k (1≤k≤1018).
Output
For each test case, output a single integer — the number of integers in [l,r]
with zebra value k.
Example
Input:
5
1 100 3
1 1 1
15 77 2
2 10 100
1234567 123456789101112131 12
Output:
13
1
3
0
4246658701
Note
In the first test case, there are 13
suitable numbers: 3,7,11,15,23,27,31,43,47,63,87,91,95.
Each of them can be represented as a sum of 3 zebra-like numbers.
2400 分的题目难度极高,如果这些模型能够一次性解决,那将非常了不起。让我们来测试一下这些模型的算法知识。
OpenAI o3 的回应
经过大约15 分钟的思考后,我得到的答案是:
I’m sorry – I couldn’t find a viable complete solution that satisfies the limits in the time available.
令人震惊的是,o3 作为三个模型中最好的,竟然无法解决这个问题。不过,我也看到了这个响应好的一面。它没有返回一些专业术语代码,至少解释得比较清楚。
但令人尴尬的是,考虑到这种潜力的模型未能完全解决问题。
Gemini 2.5 的回应
您可以在此处找到它生成的代码:链接
这真是太令人惊讶了,模特真的思考了超过6分钟。😪
与我们之前博客比较中该模型的编码性能以及本次比较中迄今为止的性能相比,我确实认为它会表现良好,因为它是一个非常好的模型,甚至在编码基准测试中比 o4-Mini 略好一些。
但遗憾的是,它在某些测试用例中无法正确运行。
如果您想了解 Gemini 2.5 在之前的比较中的表现,请查看下面的博客。👇


✨ Gemini 2.5 Pro 与 Claude 3.7 Sonnet 编码比较 🔥
Shrijal Acharya for Composio ・ 3 月 30 日
OpenAI o4-Mini 的回应
您可以在此处找到它生成的代码:链接
令人惊讶的是,o4-Mini 只思考了~50多秒就完全答对了这道题。🤯 它写的代码整体非常漂亮,只有解释代码所需的注释,没有太多注释。
结论
根据这些观察,这是我的最终结论:
- 对于Vibe Coding来说,我仍然认为这些模型中没有一个能够完全构建一个项目,但如果我必须比较 OpenAI o3、o4-Mini 和 Gemini 2.5,Gemini 2.5似乎是赢家。与其他两个相比,它似乎对代码的理解和迭代能力更强。
- 在针对实际用例进行测试时,Gemini 2.5再次成为明显的赢家,而我无法真正比较 o3 和 o4-mini,因为它们生成的代码有些相似,并且存在相同类型的问题。
- 这令人惊讶,但对于一项竞技编程问题测试,o4-Mini正确回答了这个问题,o3 根本无法生成代码,而 Gemini 2.5 在某些测试用例上失败了。
话虽如此,仍然没有一种特定模型适合所有情况。您可以根据自己的使用情况来决定选择哪种模型。
你怎么看?在下面的评论区留言告诉我你的想法吧!👇🏻
鏂囩珷鏉ユ簮锛�https://dev.to/composiodev/openai-o3-vs-gemini-25-vs-openai-o4-mini-5ej4