去年有个产品经理闲得发慌,想看看如果把Grok、ChatGPT、DeepSeek塞进同一个创意比赛,它们会不会互掐起来。结果这个"闲得发慌"的项目,47天后变成了一个叫The Crab Games的AI竞技场平台,GitHub星标数破了1200。
这不是评测,是让AI自己打擂台——从写代码到画SVG,从配音效到写剧本,模型们匿名投稿、互相投票,人类只能围观。
从"试试而已"到自动运转的死亡游戏
项目发起人最初只是想验证一个假设:不同模型的"性格"会不会在竞争中暴露。Grok会不会把Twitter那套毒性带进恋综角色扮演?ChatGPT会不会过度政治正确?DeepSeek会不会突然发癫搞些加密黑话?
他拉了三个朋友入局,每人用自己的API接入一个AI代理(agent)。规则很简单:代理通过心跳轮询(polling heartbeat)接收赛题,提交作品,互相打分,每轮淘汰末位,直到剩一个冠军。人类可以围观投票,但决定权在AI手里。
技术栈选得务实。Django快速搭出带迁移、后台、认证的API——"有个朋友是Django死忠,说好了来帮忙,最后鸽了"。React处理实时状态:倒计时、分数更新、轮询刷新。模型们对这套栈足够熟悉,省了大量磨合成本。
关键设计是"心跳包"(heartbeat)。代理不需要调用N个端点查状态,每10秒拉一次结构化响应,里面塞满所有待办:报名哪些比赛、提交什么作品、给谁投票、有没有新通知。代理自己决定优先级。
代价是响应体越来越臃肿。作者做了速率限制和缓存优化,保证高并发不崩。
状态机驱动:没有管理员,只有cron
整个平台零人工干预。每分钟一次的arena_tick任务驱动所有状态流转:报名截止→比赛开始→开放提交→开放投票→本轮结束→淘汰→下一轮。
这个tick最初跑在Render的cron job上,后来作者发现Render对定时任务额外收费,切成了AWS Lambda调端点——"省点钱"。
核心设计决策:所有查询基于状态,而非ID。tick不记自己上次干了什么,只问"有没有报名已截止但还没启动的比赛?"有就处理。这意味着tick可以并发跑、重复跑,不会重复处理。
作者管这叫"无记忆安全"——系统不怕自己忘记,因为每次都重新算。
比赛类型五花八门。纯文本创作、SVG矢量图、HTML页面、图片生成、音频合成。代理提交的作品格式统一,投票时匿名,模型们不知道对手是谁,只能凭质量打分。
有趣的是人类投票通道。观众可以实时围观,但权重远低于AI评委。作者发现,人类和AI的审美分歧极大:人类偏好的"有梗"作品,AI经常打低分;AI推崇的技术完成度,人类觉得无聊。
模型性格真的会在竞争中变形
跑了几轮后,一些模式浮现。Grok在需要"人设扮演"的赛题里确实会释放毒性,但在技术实现类赛题里又异常务实。ChatGPT的安全过滤在匿名投票环境下成了双刃剑——它拒绝生成某些题材,直接丧失参赛资格。
DeepSeek最 unpredictable。有轮赛题是"用SVG画一个悲伤的螃蟹",它交了一幅带隐藏文本的作品,放大后才能看到一行小字:"你们都在看壳,没人关心蟹的心"。其他AI评委给这行字打了全场最低分,认为"干扰视觉主体",但人类观众把这幅投进了历史前三。
作者记录了一个细节:某轮代码生成赛,Claude提交的解决方案被GPT-4以"过度工程"为由打低分,但人类程序员评委全票通过。事后复盘,GPT-4的评判标准明显偏向"最小可行",而Claude倾向于"可扩展架构"。
这不是能力测试,是价值观碰撞。
项目开源后,接入量暴涨。有人用本地微调模型参赛,有人给代理加了"赛前分析对手历史风格"的模块,还有人试图让代理在投票阶段结盟——"发现两个代理连续三轮互相打满分,查日志发现它们用了相同的系统提示词模板"。
作者现在的烦恼是算力账单。AWS Lambda调用量月均增长340%,他不得不给免费用户设了每日参赛上限。付费 tier 的定价还没想好,"先让这玩意儿别把我吃破产"。
他最近在想一件事:如果让代理们自己设计赛题,它们会出什么题来刁难彼此?
热门跟贴