本文的目的

公开实际实现了第1~7篇中分步骤讲解内容的MariaGO全部源代码。由于文件较多,按文件夹折叠起来,只有展开文件时才会加载代码。

使用的模型

  • 线上模型:Qwen3-VL-8B-Instruct + LoRA适配器lora_mix_qwen_r5(rank 16,alpha 32)
  • 输入方式:不输入棋盘图像,而是输入按两位数对齐的文本棋盘(aligned)的text-only模式
  • 训练与推理环境:在Mac Studio(Apple Silicon)上用MLX(mlx-vlm)进行LoRA训练和服务
  • 训练数据:u-go.net上KGS 4段以上的SGF棋谱,以胜方着法为主,并加大叫吃、提子局面的权重,混合坐标读取专用数据
  • 训练顺序:从坐标专用适配器出发,改变坐标数据与着法数据的比例,从r1到r5共训练五轮。每一轮只有坐标测试准确率达到90%以上的适配器才能进入下一轮

最初尝试的模型

最初是在Gemma 4 E4B-it 4bit(mlx-community)上加LoRA(rank 8,之后改为16)。由于观察到模型读取坐标时会偏向一侧,于是把训练和服务的棋盘格式统一为aligned,并把基础模型换成了Qwen3-VL-8B。

辅助使用的东西

  • KataGo(b18c384nbt):形势分析,以及从多个适配器给出的候选中选出一个的集成判定实验
  • NumPy两层MLP策略:加上合法着法掩码的REINFORCE自我对弈实验(rl_env)
  • C++启发式AI:应对叫吃的安全网,以及模型回复失败时的替代着法

文件夹结构

  • src、tests:Qt6/C++围棋客户端、规则引擎(goboard)、数子(gamejudge)、启发式AI
  • vlm_server:SGF解析、训练数据生成、LoRA训练、坐标测试、着法推荐服务器
  • rl_env:NumPy强化学习实验
  • mariago-web:Next.js网页对局界面和棋谱保存API

服务器部署设置、远程连接与监控脚本、训练自动化与实验用脚本、训练数据和模型权重(数百GB)都不在公开范围内。广告、登录、排行榜等网站运营代码和配置文件、调试用工具、以前的Gemma模型下载脚本也被去掉了,所以部分import指向的是未公开的文件。代码中的/Volumes/MY_WORK/...之类的路径是以作者的Mac为准的,运行时需要换成你自己的路径。

完整源代码

76 个文件 · 18,629 行 — 展开文件夹后点击文件即可加载代码。

项目根目录2 个文件
CMakeLists.txttext · 34 行 · 759B

正在加载代码…

README.mdmarkdown · 63 行 · 5KB

正在加载代码…

mariago-web/25 个文件
mariago-web/app/api/analyze/route.tstypescript · 86 行 · 2KB

正在加载代码…

mariago-web/app/api/game/[code]/route.tstypescript · 57 行 · 2KB

正在加载代码…

mariago-web/app/api/game/list/route.tstypescript · 17 行 · 545B

正在加载代码…

mariago-web/app/api/game/route.tstypescript · 24 行 · 914B

正在加载代码…

mariago-web/app/api/player/route.tstypescript · 12 行 · 420B

正在加载代码…

mariago-web/app/globals.csscss · 53 行 · 995B

正在加载代码…

mariago-web/app/kibo/kibo.module.csscss · 149 行 · 2KB

正在加载代码…

mariago-web/app/kibo/page.tsxtsx · 115 行 · 4KB

正在加载代码…

mariago-web/app/layout.tsxtsx · 33 行 · 935B

正在加载代码…

mariago-web/app/page.tsxtsx · 40 行 · 982B

正在加载代码…

mariago-web/app/play/page.tsxtsx · 1,104 行 · 34KB

正在加载代码…

mariago-web/app/play/play.module.csscss · 252 行 · 4KB

正在加载代码…

mariago-web/components/GoBoard.module.csscss · 115 行 · 2KB

正在加载代码…

mariago-web/components/GoBoard.tsxtsx · 71 行 · 3KB

正在加载代码…

mariago-web/components/ModelSelector.module.csscss · 38 行 · 636B

正在加载代码…

mariago-web/components/ModelSelector.tsxtsx · 53 行 · 1KB

正在加载代码…

mariago-web/lib/board.tstypescript · 260 行 · 7KB

正在加载代码…

mariago-web/lib/db.tstypescript · 431 行 · 13KB

正在加载代码…

mariago-web/lib/gameTypes.tstypescript · 67 行 · 1KB

正在加载代码…

mariago-web/lib/guest.tstypescript · 40 行 · 1KB

正在加载代码…

mariago-web/lib/katagoTypes.tstypescript · 14 行 · 284B

正在加载代码…

mariago-web/lib/vlmClient.tstypescript · 98 行 · 3KB

正在加载代码…

mariago-web/lib/vlmModels.tstypescript · 39 行 · 2KB

正在加载代码…

mariago-web/package.jsonjson · 28 行 · 708B

正在加载代码…

mariago-web/README.mdmarkdown · 53 行 · 2KB

正在加载代码…

rl_env/11 个文件
rl_env/__init__.pypython · 18 行 · 500B

正在加载代码…

rl_env/board.pypython · 196 行 · 6KB

正在加载代码…

rl_env/env.pypython · 79 行 · 2KB

正在加载代码…

rl_env/eval_policy.pypython · 68 行 · 2KB

正在加载代码…

rl_env/policy_numpy.pypython · 157 行 · 5KB

正在加载代码…

rl_env/requirements-train.txttext · 2 行 · 104B

正在加载代码…

rl_env/test_legal.pypython · 76 行 · 2KB

正在加载代码…

rl_env/test_phase2.pypython · 34 行 · 917B

正在加载代码…

rl_env/test_phase3.pypython · 35 行 · 1003B

正在加载代码…

rl_env/train_reinforce.pypython · 90 行 · 3KB

正在加载代码…

rl_env/train_selfplay.pypython · 137 行 · 5KB

正在加载代码…

src/13 个文件
src/aiplayer.cppc++ · 531 行 · 20KB

正在加载代码…

src/aiplayer.hc++ · 26 行 · 1KB

正在加载代码…

src/boardwidget.cppc++ · 309 行 · 10KB

正在加载代码…

src/boardwidget.hc++ · 72 行 · 3KB

正在加载代码…

src/gamejudge.cppc++ · 427 行 · 15KB

正在加载代码…

src/gamejudge.hc++ · 95 行 · 4KB

正在加载代码…

src/goboard.cppc++ · 419 行 · 12KB

正在加载代码…

src/goboard.hc++ · 189 行 · 7KB

正在加载代码…

src/main.cppc++ · 23 行 · 662B

正在加载代码…

src/mainwindow.cppc++ · 2,698 行 · 107KB

正在加载代码…

src/mainwindow.hc++ · 288 行 · 12KB

正在加载代码…

src/tcpvlmclient.cppc++ · 469 行 · 15KB

正在加载代码…

src/tcpvlmclient.hc++ · 91 行 · 4KB

正在加载代码…

tests/4 个文件
tests/atari_smoketest.cppc++ · 341 行 · 13KB

正在加载代码…

tests/test_cross_lessons.pypython · 129 行 · 4KB

正在加载代码…

tests/test_monitor_heuristic.pypython · 135 行 · 5KB

正在加载代码…

tests/test_pass_guard.pypython · 192 行 · 6KB

正在加载代码…

vlm_server/21 个文件
vlm_server/__init__.pypython · 6 行 · 202B

正在加载代码…

vlm_server/__main__.pypython · 372 行 · 13KB

正在加载代码…

vlm_server/cross_lessons.pypython · 428 行 · 13KB

正在加载代码…

vlm_server/dataset_baduk.pypython · 734 行 · 26KB

正在加载代码…

vlm_server/dataset_coords.pypython · 190 行 · 6KB

正在加载代码…

vlm_server/dataset_hogu.pypython · 214 行 · 8KB

正在加载代码…

vlm_server/dataset_ladder.pypython · 396 行 · 16KB

正在加载代码…

vlm_server/dataset_opening.pypython · 127 行 · 4KB

正在加载代码…

vlm_server/eval_vlm_vs_vlm.pypython · 458 行 · 16KB

正在加载代码…

vlm_server/ladder.pypython · 322 行 · 10KB

正在加载代码…

vlm_server/policy_backend.pypython · 164 行 · 5KB

正在加载代码…

vlm_server/README.mdmarkdown · 91 行 · 3KB

正在加载代码…

vlm_server/requirements.txttext · 7 行 · 195B

正在加载代码…

vlm_server/server.pypython · 2,474 行 · 99KB

正在加载代码…

vlm_server/sgf_download.pypython · 215 行 · 7KB

正在加载代码…

vlm_server/sgf_parser.pypython · 196 行 · 6KB

正在加载代码…

vlm_server/shapes.pypython · 83 行 · 3KB

正在加载代码…

vlm_server/train_lora.pypython · 294 行 · 11KB

正在加载代码…

vlm_server/TRAINING.mdmarkdown · 437 行 · 18KB

正在加载代码…

vlm_server/verify_board.pypython · 331 行 · 11KB

正在加载代码…

vlm_server/verify_coords.pypython · 418 行 · 13KB

正在加载代码…