谁在运营这个网站?
大家好,我是站长“思考之树”(Saenggaknamu)。我是一名有 32 年经验的开发者, 为了打造有人情味、能像人一样思考的 AI 模型,一直在制作各种各样的 AI 模型。随着 AI 的普及,一个人也能完成开发之后,我开始挑战各种课题。
后来,我看到了一个解数独的 AI。它的思路和人完全不同,就像一个早已知道答案的孩子, 从第一格开始一行一行地依次填入答案。我告诉它这是作弊,它这才按照数独的规则, 比较横行、竖列和 3×3 宫格来得出答案。看到这一幕,我从 Hugging Face 下载模型, 开始亲自训练。从那以后我发现,许多模型都像这样,仿佛早已知道答案似的在解益智游戏。
MariaGO 的模型训练、游戏引擎、网页界面和服务器运营,全部由我亲自负责。这里的文章 并不是对一般游戏百科的重新总结,而是根据实现过程中确认过的代码和实验记录撰写的。
项目名称中的“GO”指的是最初的起点——围棋。从围棋开始的问题,逐渐扩展到了五子棋、 黑白棋、韩国象棋、国际象棋,以及数字和文字谜题。每种游戏的规则各不相同,但都有一个 共同的主题:“AI 如何读取当前状态,并选择下一步行动?”
为什么还要再做一个游戏网站?
在线对弈服务已经有很多了。MariaGO 想要解决的问题,并不是快速找到对手一较高下。 我想打造一个属于个人的对弈环境:不必和别人约时间,想下的时候就下一步;时间不够就先停下, 之后再回到同一盘棋。
目标不是炫耀最强的 AI,而是让任何人都能在浏览器中直接接触训练后模型的判断, 并理解其背后的过程。
我很喜欢电影《银翼杀手》。片中有这样一个场景:J.F. 塞巴斯蒂安和泰勒博士 身处不同的地方,用语言一步一步地交换着继续下国际象棋。为了让 MariaGO 的围棋也具有这样的特点, 我没有设置每步的时间限制。
每当你确认落子,棋盘和着法顺序都会保存到服务器上,下次访问时会重新载入进行中的对局。 你可以前后翻看棋谱,然后从任意一步重新开始下。
注意:对局以每个浏览器生成的 ID 保存。如果在无痕模式或其他浏览器中下棋, 将无法载入已有的对局,而是会创建新的存档。
是如何开发的?
围棋模型使用从高段业余棋手和职业棋手的 SGF 棋谱中提取的局面与下一手进行训练。 这并不是把原始棋谱直接放进去就结束了。我们会把 19×19 的坐标转换成模型能读取的对齐网格, 去除重复的局面,并确认训练数据与实际对局服务器使用的是相同的棋盘表示方式。
并非所有 AI 模型都使用相同的围棋坐标——这一点我在开始开发很久之后才知道。我长时间训练 Google 的 Gemma,但模型落子的位置总是在第四象限。于是我加上了各种限制,而这些限制又带来了新的错误。
后来我才发现,每个模型使用的坐标都不一样,甚至 SGF 棋谱和我们自己的模型使用的坐标也不同。 也是在那时我才知道,把人下的着法告诉模型后,它会用另一套坐标回复。因此在初期,我花了很长时间 训练模型对齐坐标,在那之后,模型的棋力才开始急剧上升。
训练之后,我们不只看胜率。我们会记录模型能否以相近的准确度找到四个角的坐标、是否会选择已经有棋子的点、 是否过早停一手。在网页对局中,AI 的着法也不会被直接采用,而是由游戏引擎检查自杀、打劫违规、 在已有棋子处落子等非法着法。
| 训练数据 | 从高段业余和职业棋手的 SGF 中提取的局面与实际下一手 |
|---|---|
| 局面表示 | 行号和列号统一对齐为两位数的 19×19 文本网格 |
| 实战验证 | 分别检查坐标准确度、合法着法比例、过早停一手和方向偏差 |
| 对局保存 | 以每一手为单位保存棋盘状态和完整着法顺序,用于复盘和续下 |
内容与运营原则
只写亲自确认过的内容
功能说明完全按照当前实际运行的情况撰写。每当有了新想法就会添加新功能, 文章也会随之及时更新。
同时公开局限
模型的失误、自动数目在死活判断上的局限等读者应当了解的条件,都会与结果一并说明。
把制作过程写下来
不只是收集游戏链接,而是让你能读到规则、实现方式,乃至失败与修复的记录。
追求不慌不忙的体验
有事的话随时停下就好。之后有空了、想到了下一手,再接着下就行。如果下错了, 随时都可以回到那一步重新下。
我们也会坦白当前的局限
MariaGO 的各个游戏并非都达到了同样的完成度。围棋支持棋谱保存和续下,但其他游戏的功能范围各不相同。 围棋自动数目会计算被围住的空白区域和提子,但无法完全判定死子。数目结果并不是裁判的最终判定, 而是供对局者检讨棋盘时参考的数值。
这些差异和失败案例,恰恰是项目记录的核心。功能发生变化时,本页面和研究笔记也会一并更新。