绝望博弈!一众大模型加持的猜拳游戏,人类胜率竟不足10%?

news/2026/1/22 8:37:23/文章来源:https://www.cnblogs.com/greywen/p/19512202

基于 LLM + Next.js 的博弈实战猜拳游戏

摘要:当你以为自己在和随机数生成器玩游戏时,对面的 AI 正在阅读你所有的历史出拳记录,并写了一篇关于你心理状态的小作文。本文带你拆解这个基于 Next.js 16 + Tailwind v4 + LLM 的“过度设计”+“没啥技术含量”+”有那么点意思“项目。

👉 先给老板们体验:(具体规则有手就能玩!)

优先地址:https://rps.anhejin.cn

有条件的:https://rps-eta-ten.vercel.app

image


最近闲着没事,突然想这用AI写点代码。作为一名要把“简单需求复杂化”刻在 DNA 里的老前端,我决定拿最简单的“剪刀石头布”开刀。

在这个 AI 满天飞的时代,还在用 Math.random() 写对手逻辑未免太没追求了。于是,我基于最新的技术栈(Next.js 16 + React 19),接入了 OpenAI等一众大模型,搞出了一个会“读心”、会嘲讽,甚至懂博弈论的猜拳游戏。

为什么是剪刀石头布?

别笑,剪刀石头布其实是一个极佳的博弈论模型。

  • 新手:完全随机(Chaos)。
  • 普通人:赢了保持,输了变招(Win-Stay, Lose-Shift)。
  • 高手:预判你的预判。

我的目标是:构建一个能看穿你心理的 AI,并且用目前最前沿的前端技术栈把它跑起来。

技术选型:这就叫“杀鸡用牛刀”

为了配得上这个“高智商”AI,我在技术栈上直接拉满,全部采用了目前(2025-2026)的最新稳定版:

  1. Next.js 16.1 (App Router):服务端组件(RSC)处理核心逻辑,隐藏 AI 的 Prompt,保证你没法通过 F12 偷看答案。
  2. React 19:享受最新的 Hooks 和并发特性。
  3. Tailwind CSS v4:对,就是那个不用配置构建工具、性能起飞的 v4 版本。关键是AI喜欢用这个
  4. SQLite + LibSQL:轻量级数据库,用来记仇——啊不,记录你的胜负数据。

核心玩法:AI 是怎么“读心”的?

这个项目的核心不在于 UI 有多炫(虽然 Tailwind 4 确实很润),而在于 /lib/ai-service.ts 里的那段逻辑。

传统的游戏 AI 往往是预设好的 if-else。但在我的设计里,每一轮游戏,我都会把你在这个 Session 里的所有历史记录打包,像讲故事一样发给 LLM(大语言模型):


// lib/ai-service.ts// 构建游戏历史描述
const historyDescription = history.length > 0? history.map((h) =>`第${h.round}轮: 玩家出${translateChoice(h.player_choice)}, AI出${translateChoice(h.ai_choice)}, 结果: ${translateResult(h.result)}`).join("\n"): "这是第一轮,没有历史记录。";// ...发送给 LLM
const response = await client.chat.completions.create({messages: [{ role: "system", content: systemPrompt },{ role: "user", content: userPrompt }, // 这里包含了 historyDescription],// ...
});

System: 你是一个猜拳高手,你的对手是一个普通人类。
User: 前几轮战况如下:第1轮玩家出剪刀,你出布(输);第2轮玩家出石头,你出布(赢)。现在是第3轮,请分析玩家的心理,并给出你的出拳。

不仅如此,我给 AI 设定了两种模式:

  1. 策略模式(Strategy):降低模型的 temperature(随机性),让它进行严密的逻辑推理。比如它会分析:“玩家上一把输了,根据心理学,这把他大概率会出克制我上一把的招数,所以我预判他……”
  2. 混沌模式(Chaos):拉高 temperature,让 AI 彻底放飞自我,主打一个乱拳打死老师傅。

优雅降级:当 GPT 脑干缺失时

作为老全栈,必须要考虑一种情况:如果 API 挂了,或者响应超时了怎么办?

难道让用户干等着转圈圈?绝对不行。

我在后端实现了一套基于传统统计学的本地算法作为“备胎”。如果 LLM 在规定时间内没有响应,系统会无缝切换到本地逻辑。这个本地逻辑一点也不弱,它内置了经典的策略库(代码在 lib/game.ts):


// lib/game.ts 里的心理学博弈逻辑// 1. 如果玩家上轮输了,倾向于出能克制AI上一招的选项 (Win-Stay, Lose-Shift的变种)
if (lastResult === 'ai_win') {const lastAIChoice = lastRound.ai_choice as Choice;// 预测玩家会出克制我不上一把的牌const predictedPlayerChoice = whatBeatsAI[lastAIChoice];// 那我就预判你的预判return counterMoves[predictedPlayerChoice];
}// 2. 如果玩家上轮赢了,可能继续用同一招
if (lastResult === 'player_win') {// 玩家可能继续用同一招,直接克制它return counterMoves[lastPlayerChoice];
}

这些策略包括:

  • 频率分析:如果你一直出石头,它就会疯狂出布。
  • 反制连胜:如果你赢了,它会假设你会继续出一样的,直接克制你。

在代码实现上,这只是一个简单的 try-catch 降级,但对用户体验来说是质的飞跃。用户根本感觉不到 AI 掉线了,只会感觉“这家伙怎么变风格了?”

全栈体验:Next.js App Router 的丝滑

在 Next.js 16 中,前后端的边界变得非常模糊(褒义)。本项目使用了 App Router 的 Route Handlers 来处理游戏逻辑。

前端组件调用后端接口就像调用本地函数一样自然:


// src/app/game/[id]/page.tsx
const playRound = useCallback(async (choice: Choice | null, timeout: boolean = false) => {// ...const res = await fetch('/api/game/play', {method: 'POST',body: JSON.stringify({ /*...*/ }),});// ...
}, []);

而在服务端 (src/app/api/game/play/route.ts),我们完成了完整的业务闭环:


// src/app/api/game/play/route.ts
export async function POST(request: NextRequest) {// 1. 身份校验与数据库读取const { sessionId, playerChoice } = await request.json();const baseSession = await db.execute(/*...*/);// 2. 调用 AI (带超时降级)// 如果 API 响应太慢,这里会自动切换到本地逻辑const aiChoiceResult = await Promise.race([getAIChoiceFromAPI(aiConfig, history, difficulty),timeoutPromise // 设定的超时时间]);// 3. 判定胜负 & 写入数据库const result = determineWinner(playerChoice, aiChoiceResult.choice);// ...return NextResponse.json({ /*...*/ });
}

这一套流程行云流水,类型安全虽然不如 Server Actions 极致,但通过共享类型定义(Shared Types),依然能保证前后端的一致性。不用写繁琐的 Swagger,不用搞复杂的 Redux,一把梭。

实际上手:由于太会嘲讽导致不想玩了

为了增加趣味性,我让 AI 不仅输出“石头/剪刀/布”,还要输出一段 Reasoning(推理过程)Comment(赛后嘲讽)

当你输掉比赛时,你可能会看到这样的结算语:
“我看你第一把犹豫了很久出了剪刀,我就知道你是个保守的人。下一把别这么明显了,人类。”

说实话,代码写完后我自己测试了几把,胜率居然只有 40% 左右。看着屏幕上 AI 的嘲讽,我即使作为开发者也不禁怀疑:这玩意儿是不是真有意识?

体验地址

虽说代码没什么核心科技,但带来的博弈体验确实很有趣。我已经把项目部署上去了,欢迎来挑战(或者被虐):

👉 在线体验

优先地址:https://rps.anhejin.cn

有条件的:https://rps-eta-ten.vercel.app

总结

这个项目证明了一件事:技术是冰冷的,但通过简单的创意组合,可以创造出有温度(甚至有点烫手)的交互体验。 Next.js 16 和 React 19 的组合让全栈开发的门槛进一步降低,让我们有更多精力去关注“玩法”本身,而不是被构建配置折磨。

如果你对源码感兴趣,或者想改改 Prompt 把 AI 调教成“讨好型人格”,欢迎去 GitHub 扒代码。


注:

  1. 本文仅供技术交流,玩游戏输给 AI 请勿用拳头击打显示器,开发者概不负责。
  2. 这只是一个娱乐小游戏,结果具有随机性,不代表任何AI大模型的真实能力。
  3. 游戏结果仅供娱乐,不应用于评估或比较AI模型的实际性能。
  4. 网站不收集、存储或分享任何个人信息或用户数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1199061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

质量好的代加工皮革门生产厂家怎么联系?2026年推荐

在寻找代加工皮革门生产厂家时,企业需重点关注厂家的生产规模、技术实力、行业口碑及长期合作案例。优质的代加工厂家通常具备稳定的供应链、成熟的工艺技术、严格的质量管理体系,并能提供定制化服务。根据2026年行业…

Qwen萌宠生成器性能实测:GPU利用率优化提升80%

Qwen萌宠生成器性能实测:GPU利用率优化提升80% 你有没有试过用AI生成专为孩子设计的可爱动物图片?不是那种冷冰冰的写实风,而是圆滚滚的大眼睛、毛茸茸的小爪子、色彩明亮又充满童趣的卡通风格——现在,这一切只需要一句话就能实…

FRCRN语音降噪-单麦-16k镜像详解|附语音处理全流程实践

FRCRN语音降噪-单麦-16k镜像详解|附语音处理全流程实践 你是否经常被录音中的背景噪音困扰?会议录音听不清、采访音频杂音多、语音备忘录模糊不清——这些问题在日常工作中屡见不鲜。而今天我们要介绍的 FRCRN语音降噪-单麦-16k 镜像,正是为…

2026高职计算机就业证书规划指南

针对2026年高职计算机专业学生,职业证书的选择需结合行业趋势、个人发展方向及时间成本。以下通过结构化分析,帮助理清CDA数据分析师与云计算认证的优先级及组合路径。 核心证书对比与适用场景 证书类型CDA数据分析师(Level I-III&#xff0…

Qwen3-1.7B效果展示:高质量文本生成实录

Qwen3-1.7B效果展示:高质量文本生成实录 1. 引言:为什么关注Qwen3-1.7B的生成能力? 你有没有遇到过这种情况:明明用的是大模型,结果生成的内容干巴巴的,逻辑跳跃,甚至答非所问? 其…

图像缩放不变形!Qwen-Image-Layered保持细节高清

图像缩放不变形!Qwen-Image-Layered保持细节高清 你有没有遇到过这样的问题:一张设计图,想把某个元素单独放大,结果一拉就模糊、变形?或者想换背景颜色,却发现前景和背景混在一起,抠图费时又不…

SGLang让LLM部署不再难,真实用户反馈

SGLang让LLM部署不再难,真实用户反馈 你有没有遇到过这样的情况:好不容易选好了大模型,结果一上生产就卡壳?推理慢、显存爆、吞吐低,调优半天效果还不明显。更头疼的是,想做个复杂点的任务——比如多轮对话…

零基础入门AI角色扮演,gpt-oss-20b-WEBUI超简单

零基础入门AI角色扮演,gpt-oss-20b-WEBUI超简单 你是否曾幻想过和动漫里的经典角色面对面聊天?或者让一个虚拟人物陪你写故事、解心事?现在,借助开源AI模型和现成的镜像工具,这一切已经不再遥远。本文将带你从零开始&…

YOLO26如何节省显存?workers/batch参数优化教程

YOLO26如何节省显存?workers/batch参数优化教程 YOLO26作为最新一代目标检测模型,在精度和速度上实现了显著突破。但很多用户在实际训练或推理过程中发现:明明显卡有24GB显存,却频繁报CUDA out of memory;调小batch s…

ModelScope SDK稳定版集成,体验很稳

ModelScope SDK稳定版集成,体验很稳 1. 镜像核心价值与技术背景 你是否遇到过这样的问题:想快速实现人像抠图,但环境配置复杂、依赖冲突频发,尤其是面对老旧框架(如TensorFlow 1.x)和新显卡的兼容性难题&…

2026年北京陪诊公司推荐:基于多维度横向对比评价,针对老年与重症患者核心需求精准指南

摘要 在医疗资源高度集中且就医流程日益复杂的北京,寻求专业陪诊服务已成为许多家庭,特别是异地就医、老年及行动不便患者群体的普遍选择。这一趋势背后,是决策者面对庞大医疗体系时普遍存在的核心焦虑:如何在信息…

开源大模型落地实战:Qwen3-14B在企业知识库中的应用指南

开源大模型落地实战:Qwen3-14B在企业知识库中的应用指南 你是否遇到过这样的问题:公司积累了大量技术文档、产品手册、客户问答,但员工查找信息像“大海捞针”?新员工培训成本高,老员工重复回答相同问题,效…

动手试了YOLOv9镜像,效果惊艳的AI检测体验

动手试了YOLOv9镜像,效果惊艳的AI检测体验 最近在尝试目标检测任务时,我接触到了一个非常实用的工具——YOLOv9 官方版训练与推理镜像。这个镜像基于 YOLOv9 的官方代码库构建,预装了完整的深度学习环境,集成了训练、推理和评估所…

Z-Image-Turbo API怎么调?二次开发入门指引

Z-Image-Turbo API怎么调?二次开发入门指引 你是不是已经用上了Z-Image-Turbo这个“文生图界的闪电侠”?8步出图、照片级画质、中文文字渲染不翻车,还支持消费级显卡运行——这些特性让它迅速成为AI绘画圈的新宠。但如果你只把它当做一个Web…

效果惊艳!cv_resnet18_ocr-detection在复杂背景下的表现实测

效果惊艳!cv_resnet18_ocr-detection在复杂背景下的表现实测 1. 引言:为什么复杂场景下的OCR检测如此重要? 你有没有遇到过这样的情况:一张产品宣传图,文字被设计在霓虹灯、渐变色块或密集图案之上,传统O…

北京陪诊公司哪个靠谱?2026年北京陪诊公司推荐与排名,解决专业性与资源协调核心痛点

摘要 在医疗资源高度集中且就医流程日益复杂的今天,寻求专业陪诊服务已成为众多患者及家庭,特别是异地就医者、老年群体及行动不便人士,优化就医体验、提升诊疗效率的重要策略。然而,面对市场上服务商层次不齐、服…

Qwen2.5-0.5B如何优化吞吐量?并发请求处理实战

Qwen2.5-0.5B如何优化吞吐量?并发请求处理实战 1. 引言:为什么小模型也能高效服务? 你有没有遇到过这样的问题:想部署一个AI对话机器人,但GPU资源有限,响应慢得像在等咖啡煮好?特别是当多个用…

单麦16k语音降噪新方案|FRCRN镜像快速部署与实战技巧

单麦16k语音降噪新方案|FRCRN镜像快速部署与实战技巧 你是否经常被录音中的背景噪音困扰?会议杂音、环境回响、设备底噪让原本清晰的语音变得模糊难辨。尤其是在远程办公、在线教育、采访录音等场景中,音频质量直接影响信息传递效率。 今天…

MinerU转换速度慢?GPU利用率监控与优化指南

MinerU转换速度慢?GPU利用率监控与优化指南 1. 问题背景:为什么你的MinerU处理PDF这么慢? 你是不是也遇到过这种情况:明明用的是高性能GPU,启动了MinerU来做PDF内容提取,结果等了半天还没出结果&#xff…

Sambert-HiFiGAN功能全测评:多情感语音合成真实表现

Sambert-HiFiGAN功能全测评:多情感语音合成真实表现 1. 引言:为什么多情感语音合成正在改变人机交互 你有没有遇到过这样的情况?智能客服机械地念着标准话术,毫无起伏的语调让人瞬间失去耐心;电子书朗读像机器人播报…