你有没有玩过那种经典记忆翻牌游戏?动物、旗帜、表情符号,翻到第三局就彻底腻味了。原因很简单,卡片套永远固定,每次开局只是换个排列。但如果每一次游戏都是实时生成的,会怎样?输入一个主题,比如“外太空的卡哇伊甜点”,大模型在几秒钟内就能设计出8对卡片、撰写配对提示、挑选背景渐变,甚至给牌桌起个有趣的名字。这就是AI记忆匹配游戏——一个完全由大模型驱动的Next.js 15应用,OpenRouter在其中担任的不是聊天框,而是游戏引擎。

项目最打眼的设计是“零硬编码内容”。开发者没有预先准备任何一组卡片,所有视觉元素和玩法规则都依赖即时生成。整个应用的架构就像三层蛋糕:最上层是客户端,负责界面渲染、动画效果和本地状态保存;中间是Next.js服务器,所有的AI调用都在这里完成,浏览器根本触碰不到API密钥;最底层是OpenRouter,统一调度免费的大语言模型,并提供自动回退能力。这样一来,用户点一下“开始游戏”,实际发生的事情是服务器并发向多个模型发指令,然后把返回的JSON拼成一副完整的牌。

打开网易新闻 查看精彩图片

有趣的是,团队一开始的做法很天真:单次请求生成全部16张卡片。结果用openrouter上的免费模型,足足等了77秒,还直接被服务器动作的超时限制打断,浏览器只抛出一句模模糊糊的“Fetch failed”。这种体验别说是游戏,就是个表单也会让人抓狂。于是他们做了一个关键改变——把生成任务拆成三路并行。第一路生成元数据:主题名称、提示池和牌背设计;另外两路各生成4对卡片,每对的两张图用“相似但有细微差别”的图像提示来制造记忆难度。三路同时跑,总耗时直接从77秒砍到12秒左右,对一款休闲游戏来说,这已经足够丝滑了。

并行搞定的同时,提示词的工程细节也蛮有意思。因为免费模型中有些会跑题,输出大段思维链或者干脆返回空内容。为了防止这种翻车,他们在系统提示里下了狠手:要求模型只输出JSON,不要任何markdown、代码围栏、推理痕迹,并且用{开头。同时启用OpenRouter的json_object结构化输出功能,进一步锁死了格式。卡片批次的提示也剪得很短,只包含主题、对数和配对ID,并要求每个图像提示简短、配套emoji,这样就能大幅降低生成截断的概率。

最后还有一条保险:模型回退链。免费层几乎免不了限流或临时宕机,所以程序会把OpenRouter上的免费模型排好序,一个不行就试下一个,包括腾讯的混元、英伟达的Nemotron等。整套机制让这个游戏在没有一分钱模型开销的前提下,做到了每次开局都是独一无二的内容。

这件事的启发其实超出了游戏本身。它证明了一个产品思路:当大模型的响应速度足够快、输出足够可控时,它就可以从“辅助工具”变成产品核心的生成引擎。12秒的响应不是一句口号,而是一系列并行架构、提示手法和容错机制共同打磨出来的结果。下次你再玩记忆翻牌时,或许也能生出“不如让模型临时编一套卡牌”的念头——毕竟,77秒到12秒的差距,已经被这群开发者用工程手段填平了。