
この記事の目的
数独AIの実験に使ったソースコードを公開します。ファイルを開いたときだけコードを読み込みます。
使用したモデル
- Qwen3-VL-2B-Instruct: 最初の学習(lora_stoku)、試行錯誤学習(lora_move)、確定マス探し(lora_cell)、盤の読み取りと数字1の判定の 2B 版に使いました。
- Qwen3-VL-8B-Instruct: 盤の読み取り(lora_board_read_8b)と数字ごとの置けないマス(lora_digit1_illegal_8b)を学習しました。4回目の記事の解き方は15サイクルのアダプターで行い、写真の取り込みは盤読み取りのアダプターを使います。
- LoRA: peft、r=8、alpha=16。すべてのアダプターが同じ設定です。
- Qwen2.5-1.5B-Instruct: Webチャットで一手の要求かどうかを見分けます。
- Gemma 4(31B、E4B、mlx 4bit): 盤の座標を読めるかどうかだけをテストしました。
- Webの一手: 今は VLM なしで、コードで確実な手を選びます。
フォルダ構成
- ルートの dataset_*.py: 学習データの生成
- ルートの *_train_loop.py、train_vlm.py: LoRA 学習とサイクルの繰り返し
- sudoku_engine.py、sudoku_human_solver.py、vlm_digit_strategy.py: パズルの生成、人式の解き方、確実な手の探索
- human_judge_*.py: 4回目の記事の判定デモ
- sudoku_vlm_server.py、chat_bridge_server.py: VLM サーバーとチャットサーバー
- main.py、main_window.py、photo_board_*.py: PyQt6 アプリと写真の取り込み
- web: Next.js のWeb数独画面、解いた記録(db.ts)、AIチャットパネル
- solve.md: 人の解き方を書いた文書
サーバーのデプロイ設定、監視・自動化スクリプト、学習データとログ、モデルの重みは公開範囲から除外しました。広告やほかのゲームの一覧のようなWeb運用のコード、設定ファイルも除いたため、一部の import は公開していないファイルを指しています。
全ソース
75ファイル · 19,630行 — フォルダを開いてファイルを押すとコードを読み込みます。
プロジェクトルート
board_read_demo.py
コードを読み込んでいます…
chat_bridge_server.py
コードを読み込んでいます…
dataset_digit_illegal.py
コードを読み込んでいます…
dataset_experience.py
コードを読み込んでいます…
dataset_human_solver.py
コードを読み込んでいます…
dataset_sudoku_coords.py
コードを読み込んでいます…
dataset_sudoku_read.py
コードを読み込んでいます…
dataset_sudoku.py
コードを読み込んでいます…
human_judge_one_game.py
コードを読み込んでいます…
human_judge_solve_cycle.py
コードを読み込んでいます…
main_window.py
コードを読み込んでいます…
main.py
コードを読み込んでいます…
make_board_snapshot.py
コードを読み込んでいます…
photo_board_prep.py
コードを読み込んでいます…
photo_board_read.py
コードを読み込んでいます…
README.md
コードを読み込んでいます…
requirements-train.txt
コードを読み込んでいます…
requirements-vlm.txt
コードを読み込んでいます…
requirements.txt
コードを読み込んでいます…
solve.md
コードを読み込んでいます…
sudoku_engine.py
コードを読み込んでいます…
sudoku_human_solver.py
コードを読み込んでいます…
sudoku_vlm_server.py
コードを読み込んでいます…
sudoku_vlm_solver.py
コードを読み込んでいます…
train_vlm.py
コードを読み込んでいます…
vlm_agent.py
コードを読み込んでいます…
vlm_board_read_sim.py
コードを読み込んでいます…
vlm_board_read_train_loop.py
コードを読み込んでいます…
vlm_board.py
コードを読み込んでいます…
vlm_cell_train_loop.py
コードを読み込んでいます…
vlm_coord_probe_gemma.py
コードを読み込んでいます…
vlm_coord_sim.py
コードを読み込んでいます…
vlm_curriculum_loop.py
コードを読み込んでいます…
vlm_diag.py
コードを読み込んでいます…
vlm_digit_illegal_sim.py
コードを読み込んでいます…
vlm_digit_illegal_train_loop.py
コードを読み込んでいます…
vlm_digit_strategy.py
コードを読み込んでいます…
vlm_experience.py
コードを読み込んでいます…
vlm_human_probe.py
コードを読み込んでいます…
vlm_human_train_loop.py
コードを読み込んでいます…
vlm_human.py
コードを読み込んでいます…
vlm_loader.py
コードを読み込んでいます…
vlm_play_sim.py
コードを読み込んでいます…
vlm_play_train_loop.py
コードを読み込んでいます…
vlm_prompt.py
コードを読み込んでいます…
vlm_protocol.py
コードを読み込んでいます…
vlm_qwen8b_base_probe.py
コードを読み込んでいます…
vlm_stage_sim.py
コードを読み込んでいます…
web/
web/next.config.mjs
コードを読み込んでいます…
web/package.json
コードを読み込んでいます…
web/postcss.config.mjs
コードを読み込んでいます…
web/src/app/api/chat/route.ts
コードを読み込んでいます…
web/src/app/api/session/move/route.ts
コードを読み込んでいます…
web/src/app/api/session/route.ts
コードを読み込んでいます…
web/src/app/globals.css
コードを読み込んでいます…
web/src/app/layout.tsx
コードを読み込んでいます…
web/src/app/page.tsx
コードを読み込んでいます…
web/src/components/AiChatPanel.tsx
コードを読み込んでいます…
web/src/components/BottomNav.tsx
コードを読み込んでいます…
web/src/components/GameScreen.tsx
コードを読み込んでいます…
web/src/components/HomeScreen.tsx
コードを読み込んでいます…
web/src/components/Logo.tsx
コードを読み込んでいます…
web/src/components/NumberPad.tsx
コードを読み込んでいます…
web/src/components/SettingsScreen.tsx
コードを読み込んでいます…
web/src/components/SudokuApp.tsx
コードを読み込んでいます…
web/src/components/SudokuBoard.tsx
コードを読み込んでいます…
web/src/lib/db.ts
コードを読み込んでいます…
web/src/lib/device-id.ts
コードを読み込んでいます…
web/src/lib/move-kinds.ts
コードを読み込んでいます…
web/src/lib/notes.ts
コードを読み込んでいます…
web/src/lib/sudoku.ts
コードを読み込んでいます…
web/src/lib/types.ts
コードを読み込んでいます…
web/src/types/node-sqlite.d.ts
コードを読み込んでいます…
web/tailwind.config.ts
コードを読み込んでいます…
web/tsconfig.json
コードを読み込んでいます…
COMMENTS · CHAPTER 06
全ソースコードと使用したモデル コメント 0
まだコメントはありません。気になった点や補足があれば残してください。
コメントを登録するには、Googleで始めてニックネームとメールアドレスを登録してください。
Googleで始める