本文的目的

公开五子棋AI实验中使用的源代码。只有展开文件时才会加载代码。

使用的模型

  • VLM:用Hugging Face上的Qwen3-VL-8B-Instruct下了25,413手对局着法。现在服务器以默认值Qwen3-VL-2B-Instruct运行。同时提供棋盘图像和文字棋盘,接收"row col"两个数字。
  • LoRA:peft,r=8,alpha=16。只收集获胜一方的着法进行训练。在MPS上以fp16运行,损失变成了NaN。
  • 本地AI:Qt应用中的C++ AiPlayer和网页上的ai.ts。这是一个先看获胜着法和必须挡住的着法,其余情况把四个方向的分数相加来选择的启发式。
  • 引擎:黑白相同的禁手(三三、长连为禁手,四四允许),只有正好5子才算获胜。

文件夹结构

  • src:Qt6/C++五子棋引擎、本地AI、棋盘界面、与VLM服务器通信的TCP客户端
  • 根目录下的.py:VLM推理服务器(vlm_pva_server.py)、把日志转换为训练数据的dataset_omook.py、LoRA训练train_vlm.py、模型下载
  • scripts:VLM坐标确认和文字棋盘客户端
  • omook-web:Next.js网页对局界面、引擎(board.ts)、本地AI(ai.ts)、棋谱保存(db.ts)、VLM连接

服务器部署设置、监控与自动化脚本、对局日志和棋谱数据库、模型权重都不在公开范围内。广告和其他游戏列表等网站运营代码、配置文件也被去掉了,所以部分import指向的是未公开的文件。

完整源代码

38 个文件 · 8,212 行 — 展开文件夹后点击文件即可加载代码。

项目根目录7 个文件
CMakeLists.txttext · 30 行 · 663B

正在加载代码…

dataset_omook.pypython · 347 行 · 12KB

正在加载代码…

download_qwen3vl.pypython · 42 行 · 1KB

正在加载代码…

requirements.txttext · 20 行 · 725B

正在加载代码…

train_vlm.pypython · 360 行 · 13KB

正在加载代码…

TRAINING.mdmarkdown · 136 行 · 6KB

正在加载代码…

vlm_pva_server.pypython · 1,475 行 · 54KB

正在加载代码…

omook-web/18 个文件
omook-web/app/api/game/[code]/route.tstypescript · 59 行 · 2KB

正在加载代码…

omook-web/app/api/game/route.tstypescript · 32 行 · 1KB

正在加载代码…

omook-web/app/api/vlm/move/route.tstypescript · 58 行 · 2KB

正在加载代码…

omook-web/app/globals.csscss · 48 行 · 864B

正在加载代码…

omook-web/app/layout.tsxtsx · 33 行 · 944B

正在加载代码…

omook-web/app/page.tsxtsx · 71 行 · 2KB

正在加载代码…

omook-web/app/play/page.tsxtsx · 773 行 · 23KB

正在加载代码…

omook-web/app/play/play.module.csscss · 189 行 · 3KB

正在加载代码…

omook-web/components/OmokBoard.module.csscss · 116 行 · 2KB

正在加载代码…

omook-web/components/OmokBoard.tsxtsx · 85 行 · 3KB

正在加载代码…

omook-web/lib/ai.tstypescript · 160 行 · 4KB

正在加载代码…

omook-web/lib/board.tstypescript · 337 行 · 9KB

正在加载代码…

omook-web/lib/db.tstypescript · 190 行 · 6KB

正在加载代码…

omook-web/lib/gameTypes.tstypescript · 43 行 · 855B

正在加载代码…

omook-web/lib/guest.tstypescript · 48 行 · 2KB

正在加载代码…

omook-web/lib/omk3Client.tstypescript · 184 行 · 5KB

正在加载代码…

omook-web/lib/renderBoardPng.tstypescript · 118 行 · 3KB

正在加载代码…

omook-web/lib/vlmClient.tstypescript · 104 行 · 3KB

正在加载代码…

scripts/2 个文件
scripts/probe_vlm_coords.pypython · 182 行 · 5KB

正在加载代码…

scripts/vlm_text_client.pypython · 418 行 · 15KB

正在加载代码…

src/11 个文件
src/aiplayer.cppc++ · 136 行 · 4KB

正在加载代码…

src/aiplayer.hc++ · 9 行 · 237B

正在加载代码…

src/boardmodel.cppc++ · 505 行 · 16KB

正在加载代码…

src/boardmodel.hc++ · 127 行 · 6KB

正在加载代码…

src/boardwidget.cppc++ · 198 行 · 6KB

正在加载代码…

src/boardwidget.hc++ · 45 行 · 1KB

正在加载代码…

src/main.cppc++ · 21 行 · 543B

正在加载代码…

src/mainwindow.cppc++ · 962 行 · 35KB

正在加载代码…

src/mainwindow.hc++ · 90 行 · 3KB

正在加载代码…

src/tcpvlmclient.cppc++ · 386 行 · 12KB

正在加载代码…

src/tcpvlmclient.hc++ · 75 行 · 3KB

正在加载代码…