
이 글의 목적
스도쿠 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: 웹 채팅에서 한 수 요청인지 가립니다.
- Gemma 4(31B, E4B, mlx 4bit): 판의 좌표를 읽을 수 있는지만 시험했습니다.
- 웹의 한 수: 지금은 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 웹 스도쿠 화면, 풀이 기록(db.ts), AI 채팅 패널
- solve.md: 사람의 풀이를 적은 문서
서버 배포 설정, 감시·자동화 스크립트, 학습 데이터와 로그, 모델 가중치는 공개 범위에서 제외했습니다. 광고와 다른 게임 목록 같은 웹 운영 코드, 설정 파일도 빼서 일부 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
아직 댓글이 없습니다. 읽다가 궁금한 점이나 보탤 내용을 남겨 주세요.
댓글을 등록하려면 구글로 시작하기를 눌러 닉네임과 메일 주소를 등록해 주세요.
구글로 시작하기