尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證AI가 내 선택을 예측하는 한국어 웹게임 · 무작위 질문과 익명 선택 통계
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗AI가 내 선택을 미리 예측하는 한국어 웹게임. 약 1분 30초 동안 16개의 선택을 하고, 마지막에 예측을 펼쳐 봅니다.
Node.js 22.14 이상이 필요합니다. 외부 패키지 설치나 빌드 없이 실행합니다.
git clone https://github.com/hb188641/deulkyeotda.git
cd deulkyeotda
npm start
브라우저에서 http://127.0.0.1:5087을 엽니다. 키가 없으면 규칙 기반 데모로 동작합니다.
실제 AI를 사용하려면 .env.example을 .env로 복사하고, 본인의 OPENAI_API_KEY를 직접 입력합니다. 키는 서버에서만 사용하며 브라우저에 전달하지 않습니다. GAME_SESSION_SECRET에는 별도의 임의 비밀값을 넣을 수 있습니다. 기본 모델은 gpt-6-luna(추론 강도 low)이며 OPENAI_MODEL과 OPENAI_REASONING_EFFORT로 변경합니다. 추론을 지원하지 않는 모델은 OPENAI_REASONING_EFFORT=off로 설정합니다. 실제 AI 플레이는 본인 API 사용량에 청구됩니다.
cp .env.example .env
# .env를 편집한 뒤
npm start
PORT와 HOST로 실행 주소를 지정합니다. 저장소는 기본 data/game.sqlite이며 DATABASE_PATH로 변경할 수 있습니다. 서버 재시작 후에도 유지되므로 운영 시 이 파일을 백업하세요. 외부 공개 운영에는 HTTPS 프록시와 API 요청 제한을 별도로 구성하세요.
worker/index.mjs가 같은 API를 Cloudflare Workers에서 제공하고, 화면 파일은 정적 자산으로, 익명 기록은 D1에 저장합니다. 설정은 wrangler.jsonc에 있습니다.
wrangler d1 create deulkyeotda # 최초 1회, 출력된 database_id를 wrangler.jsonc에 반영
wrangler d1 migrations apply deulkyeotda --remote
wrangler secret put GAME_SESSION_SECRET # 임의 비밀값
wrangler secret put OPENAI_API_KEY # 선택, 없으면 규칙 기반 데모
wrangler deploy
남용 방지를 위해 Worker는 IP별로 /api/predict를 분당 10회, 나머지 API를 분당 60회로 제한합니다. 이 제한은 Cloudflare 위치별 근사치이며, IP는 카운터 키로만 쓰고 저장하지 않습니다. 모든 플레이어를 합친 하루(UTC) OpenAI 호출 수는 AI_DAILY_LIMIT(기본 1000)으로 제한하고 D1의 ai_usage 테이블에 날짜별 횟수만 기록합니다. 한도에 닿으면 AI 요청은 429로 거절되고 데모로 플레이할 수 있습니다. npm start로 실행하는 Node.js 서버에는 이 제한이 없습니다.
확신도는 모델의 자기 평가이며, 충분한 기록이 있으면 과거 적중률을 참고해 보정합니다. 검증된 개인 예측 확률이 아니며 성격·지능을 판단하지 않습니다.
홈에서 익명 답변으로 예측 개선에 참여를 선택한 AI 판만 저장합니다. 처음 방문 시 기본 체크되며, 직접 해제한 선택은 유지합니다., 데모·미완료·미참여 판은 저장하지 않습니다. 참여하지 않은 판에서는 누적 통계도 사용하지 않습니다. 선택 여부만 브라우저에 보관합니다.
게임 기록에는 판마다 새 식별자, 질문 버전, 완료 시각, 준비 답변, 사전 예측·확신도·실제 답변, 비교군을 저장합니다. 이름·계정·IP·기기 식별자는 저장하지 않습니다. 같은 봉인 토큰의 재제출은 중복 집계하거나 최초 기록을 덮어쓰지 않습니다. 운영 환경 자체의 로그 정책과는 별개입니다.
예측은 최근 90일의 최신 1,000판을 참고합니다. 같은 준비 질문에서 같은 답을 2개 이상 골랐고 일치가 불일치보다 많은 기록을 우선합니다. 질문별 유사 기록 20개부터 참고하고, 부족하면 전체 기록 50개부터 참고합니다. 모델에는 집계된 선택 비율과 표본 수만 추가 전달합니다. 다른 플레이어의 개별 답변은 보내지 않습니다.
통계를 참고할 수 있는 참여 판 중 약 80%는 통계를 사용하고 20%는 기존 방식으로 예측합니다. 두 그룹의 사전 예측과 실제 적중을 비교하며, 각 그룹 20판·100예측 이상일 때 게임 안내에 관측 적중률을 표시합니다. 데이터 누적만으로 정확도 향상을 보장하거나 주장하지 않습니다. AI 모델 가중치를 재학습하는 방식이 아닙니다.
동일한 원래 확신도 구간에 과거 통계 참고 판의 기록이 30예측 이상이면 표시 확신도를 보정합니다. 데이터 조회 실패 시 기존 AI 예측을 사용하고, 저장 실패 시 게임 결과와 함께 저장 실패를 알립니다. /api/learning은 집계만 반환하며 원본 답변 조회 API는 제공하지 않습니다.
| 경로 | 역할 |
|---|---|
index.html, public/ | 화면, 질문 목록, 선택·공유 흐름 |
lib/game/server.mjs | API 요청 검증, AI 호출, 예측 봉인·결과 계산 |
lib/game/learning.mjs | 유사 선택 통계, 확신도 보정, 익명 기록 |
scripts/server.mjs | Node.js HTTP 서버와 SQLite 연결 |
db/, drizzle/ | 저장 스키마와 SQL 마이그레이션 |
tests/ | 봉인·무작위 선정·저장·참여 해제·서버 검사 |
질문 내용이나 선택지 의미를 변경하면 lib/game/learning.mjs의 QUESTION_VERSION도 올려 이전 기록과 섞이지 않도록 합니다. 현재 서버는 최초 실행 시 스키마 v1을 자동 생성합니다. 후속 스키마 변경에는 추가 마이그레이션 구현이 필요합니다.
npm test
자동 검사는 가짜 모델 응답과 메모리 SQLite를 사용합니다. OpenAI를 호출하거나 API 비용을 발생시키지 않습니다.
배포된 Sites 게임의 프론트엔드와 예측·집계 로직을 가져오고, 공개 저장소에서는 Node.js/SQLite로 독립 실행하도록 구성했습니다. Sites 내부 배포 설정·인증 정보·운영 데이터는 포함하지 않습니다.
MIT. 수정·재배포·상업적 이용이 가능하며 저작권 및 라이선스 고지를 유지해야 합니다.