上周,谷歌发布了 Gemini 2.5 Pro。它在各项基准测试中表现出色,据说特别擅长编码和逻辑推理。那么,没有什么比用它来开发一个象棋应用,并用这个应用与AI对战更好的方法来验证这些说法了。
在这篇博客里,我将分享使用Gemini 2.5 Pro制作一个国际象棋应用的过程。虽然可以把它作为代码助手集成到IDE里,但我主要使用Google的AI Studio来完成这个项目以展示其简便。核心想法是制作一个可以使用的国际象棋应用,让人类用户可以和这个模型对战。
自它们诞生以来,大型语言模型(LLMs)就被应用于编码任务。这早已不是秘密,这是它们的主要应用场景之一。我经常在合作的公司中看到这种情况。如今,几乎每家公司的代码开发工作流都以某种形式集成了大型语言模型。像这样的实际编码项目中测试Gemini 2.5 Pro提供了超出标准基准的见解。
首先,我想了解一下借助Gemini开发这样一个应用程序实际上会是什么样子。我的背景主要是Python,前端开发的知识不多。所以保持架构简单是非常重要的,这样我能自己理解、阅读,并且自己也能调试代码。
我最初的提议旨在与Gemini一起制定一个合作计划:
我想从零开始构建一个与LLM连接的国际象棋应用。用户可以用鼠标下棋,当轮到电脑走棋时,会调用LLM获取下一步棋。我前端开发经验不多,希望能保持简单。我对AI工程很熟悉,要使用的LLM有一个Python SDK,我也很熟悉怎么用。但如果更简单一些,我们也可以只用REST API。请给些建议,关于构建这个应用的架构和技术栈。我希望能在浏览器上运行。对我来说,最看重的是简洁和代码量最少。
双子建议如下所示:
这听起来像个合理的计划。由于前端涉及的技术我不太熟悉,我想先从这个开始,确保它行得通,然后再开始做后端。
建议的架构如下:
作者供图
我的下一步是让Gemini来构建一个非常简单的独立网页应用。目标是创建一个功能性的棋盘界面,让用户可以为双方下棋,暂时不连接任何后端或LLM。
双子回复了所需的HTML、CSS和JavaScript代码如下,如下解释和设置说明:
它还建议安装 VS Code Live Server 插件,便于在浏览器中轻松预览本地文件。
他/她/他们解释了这个初始界面的操作机制:
运行Gemini生成的代码后,应用加载了,但有些部分不见了。
作者供图
双子座提出建议,可能是暂时的网络问题、CDN问题,或者浏览器扩展阻止了访问外部资源——这些都是合理的解释,确实如此。它建议下载这些图片并在本地提供服务。这样感觉更可靠,尤其是对于可部署的应用程序而言。
作者的图片
不过,提供的GitHub链接不对,出现了404错误。链接指向了…/img/chesspieces/wikipedia,而正确的路径应该是…/website/img/chesspieces/wikipedia。手动修正并下载后,棋子就显示出来了!
作者提供图片
后端
在基本用户界面完成后,是时候开始构建后端了——一个用于管理游戏状态并与Gemini通信的Flask应用程序。
首先,我想确认前端结构能否支持由LLM生成的操作,而不仅仅是用户拖拽产生的操作。
双子座的解释真是清楚又让人放心。
作者供图
这意味着我们可以根据LLM的反馈通过编程更新板状态。
作者供图
在添加LLM集成之前,我测试了更新的UI与基本的Flask后端(现在处理移动验证)之间的连接。立刻就遇到了一个bug:白方走了一步后,尝试移动黑方棋子时会显示“不是你的回合”的错误,但实际上轮到黑方走了。
作者供图
我把错误信息和描述反馈给了Gemini,它的建议一开始并没有解决问题。有一次,它给出的回复完美地反映了我调试烦恼。
这张图片来自作者
确实如此!查错的时候真的会让人觉得莫名其妙 😅
双子座仍然愿意帮忙,这点还是很不错的。
作者的图片
在添加了更多的日志信息后,Gemini 最终锁定了问题,并找到了正确的解决办法。
作者的这张图片
说实话,这个阶段我没有深入探究根本原因。我们已经接近终点,我急于完成最后一步:双子座整合以生成动作。
将 Gemini 的调用集成起来相对简单得多。关键在于设计一个好提示。为了减少 LLM 产生非法操作的可能性,我决定不仅提供当前棋盘状态(用 FEN 表示)和走法记录,还提供了所有合法操作的明确清单。
这基本上就是核心LLM集成的主要内容了。我最初将Gemini 2.0 Flash模型设为默认模型,后来我在界面上增加了一个下拉菜单,让用户能从不同的模型中选择,其中包括Gemini 2.5 Pro。
作者拍摄的视频
和2.0 Flash的比赛相对简单。该模型经常未能识别简单的威胁,比如悬劫和明显的将军威胁。
接下来,我切换模型到Gemini 2.5 Pro。差别立刻显现,游戏感觉难度大增。
这是作者拍的视频
直到中盘 Gemini 才开始失误丢子,我挺高兴它犯了错——我觉得我当时也不占优势 😅
注意:因为下午响应时间变长了(可能是美国那边使用量增加的缘故),我在Gemini再出了几招错着后就停了视频。“帮帮忙,我们的TPU都要融化了” 🤣),所以你只能相信我后来把这盘棋下完了 😆
为了更深入了解大型语言模型的“思考”过程,我增加了一个额外的功能:我修改了提示,要求Gemini不仅给出一步棋,还要在提供棋步之前阐述它对当前棋局的思考过程或想法。这非常有用,偶尔,Gemini还会展示出一些个性:
作者的图片
用Gemini 2.5 Pro构建这个棋盘游戏应用程序是一次令人惊讶的实验,关于AI辅助开发。尽管一开始前端经验有限,我能够依赖Gemini进行架构设计的建议、代码生成,甚至在一些棘手的调试过程中——包括我们共同经历的那些“诡异”时刻!