
この記事の目的
五目並べ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 と Web の 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 のWeb対局画面、エンジン(board.ts)、ローカルAI(ai.ts)、棋譜の保存(db.ts)、VLM 接続
サーバーのデプロイ設定、監視・自動化スクリプト、対局ログと棋譜DB、モデルの重みは公開範囲から除外しました。広告やほかのゲームの一覧のようなWeb運用のコード、設定ファイルも除いたため、一部の import は公開していないファイルを指しています。
全ソース
38ファイル · 8,212行 — フォルダを開いてファイルを押すとコードを読み込みます。
プロジェクトルート
CMakeLists.txt
コードを読み込んでいます…
dataset_omook.py
コードを読み込んでいます…
download_qwen3vl.py
コードを読み込んでいます…
requirements.txt
コードを読み込んでいます…
train_vlm.py
コードを読み込んでいます…
TRAINING.md
コードを読み込んでいます…
vlm_pva_server.py
コードを読み込んでいます…
omook-web/
omook-web/app/api/game/[code]/route.ts
コードを読み込んでいます…
omook-web/app/api/game/route.ts
コードを読み込んでいます…
omook-web/app/api/vlm/move/route.ts
コードを読み込んでいます…
omook-web/app/globals.css
コードを読み込んでいます…
omook-web/app/layout.tsx
コードを読み込んでいます…
omook-web/app/page.tsx
コードを読み込んでいます…
omook-web/app/play/page.tsx
コードを読み込んでいます…
omook-web/app/play/play.module.css
コードを読み込んでいます…
omook-web/components/OmokBoard.module.css
コードを読み込んでいます…
omook-web/components/OmokBoard.tsx
コードを読み込んでいます…
omook-web/lib/ai.ts
コードを読み込んでいます…
omook-web/lib/board.ts
コードを読み込んでいます…
omook-web/lib/db.ts
コードを読み込んでいます…
omook-web/lib/gameTypes.ts
コードを読み込んでいます…
omook-web/lib/guest.ts
コードを読み込んでいます…
omook-web/lib/omk3Client.ts
コードを読み込んでいます…
omook-web/lib/renderBoardPng.ts
コードを読み込んでいます…
omook-web/lib/vlmClient.ts
コードを読み込んでいます…
scripts/
scripts/probe_vlm_coords.py
コードを読み込んでいます…
scripts/vlm_text_client.py
コードを読み込んでいます…
src/
src/aiplayer.cpp
コードを読み込んでいます…
src/aiplayer.h
コードを読み込んでいます…
src/boardmodel.cpp
コードを読み込んでいます…
src/boardmodel.h
コードを読み込んでいます…
src/boardwidget.cpp
コードを読み込んでいます…
src/boardwidget.h
コードを読み込んでいます…
src/main.cpp
コードを読み込んでいます…
src/mainwindow.cpp
コードを読み込んでいます…
src/mainwindow.h
コードを読み込んでいます…
src/tcpvlmclient.cpp
コードを読み込んでいます…
src/tcpvlmclient.h
コードを読み込んでいます…
COMMENTS · CHAPTER 05
全ソースコードと使用したモデル コメント 0
まだコメントはありません。気になった点や補足があれば残してください。
コメントを登録するには、Googleで始めてニックネームとメールアドレスを登録してください。
Googleで始める