朋友的Game Boy Color被偷了。挺气人的。他去找替代品,结果发现成色过得去的二手机要么难找,要么贵得离谱,要么标着"全新成色"——那种"全新"约等于"全新级别的谎话"。
于是我给他做了一台偷不走的:一个跑在浏览器里的Game Boy Color。青绿色外壳,方向键按下去有清脆的咔哒声,能玩真正的Game Boy游戏。
![]()
最妙的地方在于,他不用在长长的ROM列表里翻找。他只需要说出自己此刻的心情。
一句话启动一个游戏
比如输入"我想玩一个和宝可梦有关的游戏"。
一个小型AI会读懂这句话,从游戏库里挑出一款,然后直接启动。他可以打字,也可以点麦克风直接说出来。感觉就像一个住在游戏机里的店员,你说个大概,他就把卡带递到你手上。
整个项目的技术栈并不复杂:模拟器用的是编译成WebAssembly的mGBA核心,搭在Vite加TypeScript的项目里,ROM直接从public/gameroms目录读取,连打包在ZIP里的也能识别。
操作方式覆盖了键盘(Z、X、回车、Shift)、屏幕上的触控按键,以及手柄支持。
AI选游戏这件事,其实很小
负责挑游戏的是Gemma 3(4B),通过Ollama在本地运行。当用户发出请求时,应用会把这句话连同可用游戏列表一起发给模型,Gemma选出最匹配的一款,模拟器随即加载。
语音部分用的是浏览器自带的语音识别,不是AI模型,但它让整套体验有了点魔法感——说完话自动提交,不用再点按钮。
当然也留了后路:如果用户心里已经想好玩哪个,"Choose a game instead"会打开一个普通列表。
提示词本身很简单:"这是玩家想要的,这是游戏列表,挑一个。"游戏列表就是一个文件(src/games.ts),所以添加一款游戏,只需要把ROM丢进文件夹,再把名字加进去。
为什么本地小模型才是对的
这个项目需要的AI只干一件小事:把一种感觉匹配到一个文件名。用云端大模型是杀鸡用牛刀,而调用云端API反而会在几个方面让事情变糟。
- 不花钱。没有API密钥,没有按次计费,也不会在有人正要玩宝可梦的时候弹出"你已达到使用上限"。作为送给朋友的礼物,这一点很重要。
- 本地运行。他的请求不会离开这台机器。没人需要知道他凌晨两点在玩什么。
- 可替换。Gemma 3 4B足够小、足够快。如果换个模型挑得更准,改一行就行。
- 不会突然失效。没有弃用邮件,没有价格变动,没有意外宕机。模型就在硬盘上,一直在那儿。
一台普通机器上的4B开源模型,结果证明完全够用。它不需要任何人的许可,也不需要一张信用卡,就把活干了。
这个项目参加了Hacktoberfest周末挑战赛的"为朋友而建"赛道,同时报名了"最佳Gemma应用"奖项——本地通过Ollama运行的Gemma 3(4B)驱动了那个自然语言选游戏的功能。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.