이 글의 목적

스도쿠 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줄 — 폴더를 펼친 뒤 파일을 누르면 코드를 불러옵니다.

프로젝트 루트48개 파일
board_read_demo.pypython · 256줄 · 10KB

코드를 불러오는 중입니다…

chat_bridge_server.pypython · 415줄 · 13KB

코드를 불러오는 중입니다…

dataset_digit_illegal.pypython · 128줄 · 4KB

코드를 불러오는 중입니다…

dataset_experience.pypython · 116줄 · 4KB

코드를 불러오는 중입니다…

dataset_human_solver.pypython · 205줄 · 7KB

코드를 불러오는 중입니다…

dataset_sudoku_coords.pypython · 159줄 · 5KB

코드를 불러오는 중입니다…

dataset_sudoku_read.pypython · 147줄 · 5KB

코드를 불러오는 중입니다…

dataset_sudoku.pypython · 104줄 · 3KB

코드를 불러오는 중입니다…

human_judge_one_game.pypython · 369줄 · 14KB

코드를 불러오는 중입니다…

human_judge_solve_cycle.pypython · 598줄 · 22KB

코드를 불러오는 중입니다…

main_window.pypython · 1,348줄 · 47KB

코드를 불러오는 중입니다…

main.pypython · 30줄 · 662B

코드를 불러오는 중입니다…

make_board_snapshot.pypython · 107줄 · 3KB

코드를 불러오는 중입니다…

photo_board_prep.pypython · 761줄 · 25KB

코드를 불러오는 중입니다…

photo_board_read.pypython · 132줄 · 4KB

코드를 불러오는 중입니다…

README.mdmarkdown · 70줄 · 2KB

코드를 불러오는 중입니다…

requirements-train.txttext · 3줄 · 62B

코드를 불러오는 중입니다…

requirements-vlm.txttext · 7줄 · 107B

코드를 불러오는 중입니다…

requirements.txttext · 1줄 · 13B

코드를 불러오는 중입니다…

solve.mdmarkdown · 45줄 · 6KB

코드를 불러오는 중입니다…

sudoku_engine.pypython · 259줄 · 9KB

코드를 불러오는 중입니다…

sudoku_human_solver.pypython · 997줄 · 33KB

코드를 불러오는 중입니다…

sudoku_vlm_server.pypython · 825줄 · 30KB

코드를 불러오는 중입니다…

sudoku_vlm_solver.pypython · 111줄 · 4KB

코드를 불러오는 중입니다…

train_vlm.pypython · 491줄 · 17KB

코드를 불러오는 중입니다…

vlm_agent.pypython · 212줄 · 7KB

코드를 불러오는 중입니다…

vlm_board_read_sim.pypython · 527줄 · 18KB

코드를 불러오는 중입니다…

vlm_board_read_train_loop.pypython · 767줄 · 23KB

코드를 불러오는 중입니다…

vlm_board.pypython · 701줄 · 22KB

코드를 불러오는 중입니다…

vlm_cell_train_loop.pypython · 852줄 · 28KB

코드를 불러오는 중입니다…

vlm_coord_probe_gemma.pypython · 392줄 · 12KB

코드를 불러오는 중입니다…

vlm_coord_sim.pypython · 349줄 · 12KB

코드를 불러오는 중입니다…

vlm_curriculum_loop.pypython · 496줄 · 15KB

코드를 불러오는 중입니다…

vlm_diag.pypython · 426줄 · 14KB

코드를 불러오는 중입니다…

vlm_digit_illegal_sim.pypython · 181줄 · 5KB

코드를 불러오는 중입니다…

vlm_digit_illegal_train_loop.pypython · 717줄 · 22KB

코드를 불러오는 중입니다…

vlm_digit_strategy.pypython · 304줄 · 10KB

코드를 불러오는 중입니다…

vlm_experience.pypython · 279줄 · 9KB

코드를 불러오는 중입니다…

vlm_human_probe.pypython · 331줄 · 10KB

코드를 불러오는 중입니다…

vlm_human_train_loop.pypython · 177줄 · 5KB

코드를 불러오는 중입니다…

vlm_human.pypython · 137줄 · 4KB

코드를 불러오는 중입니다…

vlm_loader.pypython · 95줄 · 3KB

코드를 불러오는 중입니다…

vlm_play_sim.pypython · 454줄 · 14KB

코드를 불러오는 중입니다…

vlm_play_train_loop.pypython · 380줄 · 13KB

코드를 불러오는 중입니다…

vlm_prompt.pypython · 386줄 · 16KB

코드를 불러오는 중입니다…

vlm_protocol.pypython · 310줄 · 8KB

코드를 불러오는 중입니다…

vlm_qwen8b_base_probe.pypython · 274줄 · 9KB

코드를 불러오는 중입니다…

vlm_stage_sim.pypython · 357줄 · 11KB

코드를 불러오는 중입니다…

web/27개 파일
web/next.config.mjsjavascript · 4줄 · 92B

코드를 불러오는 중입니다…

web/package.jsonjson · 26줄 · 569B

코드를 불러오는 중입니다…

web/postcss.config.mjsjavascript · 8줄 · 135B

코드를 불러오는 중입니다…

web/src/app/api/chat/route.tstypescript · 78줄 · 2KB

코드를 불러오는 중입니다…

web/src/app/api/session/move/route.tstypescript · 60줄 · 2KB

코드를 불러오는 중입니다…

web/src/app/api/session/route.tstypescript · 146줄 · 4KB

코드를 불러오는 중입니다…

web/src/app/globals.csscss · 33줄 · 564B

코드를 불러오는 중입니다…

web/src/app/layout.tsxtsx · 43줄 · 1KB

코드를 불러오는 중입니다…

web/src/app/page.tsxtsx · 5줄 · 112B

코드를 불러오는 중입니다…

web/src/components/AiChatPanel.tsxtsx · 117줄 · 4KB

코드를 불러오는 중입니다…

web/src/components/BottomNav.tsxtsx · 65줄 · 2KB

코드를 불러오는 중입니다…

web/src/components/GameScreen.tsxtsx · 382줄 · 13KB

코드를 불러오는 중입니다…

web/src/components/HomeScreen.tsxtsx · 197줄 · 8KB

코드를 불러오는 중입니다…

web/src/components/Logo.tsxtsx · 45줄 · 1KB

코드를 불러오는 중입니다…

web/src/components/NumberPad.tsxtsx · 35줄 · 991B

코드를 불러오는 중입니다…

web/src/components/SettingsScreen.tsxtsx · 63줄 · 3KB

코드를 불러오는 중입니다…

web/src/components/SudokuApp.tsxtsx · 716줄 · 19KB

코드를 불러오는 중입니다…

web/src/components/SudokuBoard.tsxtsx · 96줄 · 3KB

코드를 불러오는 중입니다…

web/src/lib/db.tstypescript · 283줄 · 7KB

코드를 불러오는 중입니다…

web/src/lib/device-id.tstypescript · 21줄 · 659B

코드를 불러오는 중입니다…

web/src/lib/move-kinds.tstypescript · 1줄 · 60B

코드를 불러오는 중입니다…

web/src/lib/notes.tstypescript · 31줄 · 916B

코드를 불러오는 중입니다…

web/src/lib/sudoku.tstypescript · 232줄 · 6KB

코드를 불러오는 중입니다…

web/src/lib/types.tstypescript · 73줄 · 2KB

코드를 불러오는 중입니다…

web/src/types/node-sqlite.d.tstypescript · 13줄 · 326B

코드를 불러오는 중입니다…

web/tailwind.config.tstypescript · 43줄 · 970B

코드를 불러오는 중입니다…

web/tsconfig.jsonjson · 26줄 · 578B

코드를 불러오는 중입니다…