Document AI prediction generation (3 models) + .env.example AI keys
- docs/AI-PREDICTIONS.md: 최신 모델 ID(gpt-5.5/claude-opus-4-8/gemini-3.5-flash), 호출법, Gemini generationConfig 함정, 체코전 실제 출력 - .env.example: 3 AI 모델 키 슬롯 + 모델 ID + Gemini 주의 노트 (시크릿 없음) - (목업 데이터 mockData.ts는 35414a8에서 실제 예측 반영 완료) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>main
parent
35414a8d47
commit
0a15906afb
|
|
@ -0,0 +1,56 @@
|
||||||
|
# AI 예측 생성 — 3모델 (GPT · Claude · Gemini)
|
||||||
|
|
||||||
|
최종 갱신: 2026-06-10 KST
|
||||||
|
관련: `lib/mockData.ts`(FEATURED_PREDICTIONS), `docs/BACKEND.md`(자동화), `.env.example`
|
||||||
|
|
||||||
|
> 매일 KST 0시, 남은 경기를 GPT·Claude·Gemini 3개 모델로 예측 생성(immutable). 현재는 수동 주입, 추후 Cloud Functions 자동화.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 모델 ID (실측 확정 · 2026-06-10)
|
||||||
|
|
||||||
|
각 API의 `GET /models` 엔드포인트로 실제 사용 가능한 최신 ID를 확인해 고정. (추측 금지)
|
||||||
|
|
||||||
|
| 모델 | 최신 ID | 호출 엔드포인트 |
|
||||||
|
|---|---|---|
|
||||||
|
| **GPT** | `gpt-5.5` | `POST https://api.openai.com/v1/chat/completions` |
|
||||||
|
| **Claude** | `claude-opus-4-8` | `POST https://api.anthropic.com/v1/messages` (`anthropic-version: 2023-06-01`) |
|
||||||
|
| **Gemini** | `gemini-3.5-flash` | `POST https://generativelanguage.googleapis.com/v1beta/models/{id}:generateContent?key=` |
|
||||||
|
|
||||||
|
> 키는 `004. Dev/.env`(저장소 밖, 시크릿). 저장소엔 `.env.example`의 빈 슬롯만.
|
||||||
|
|
||||||
|
## 2. ⚠️ 함정 / 운영 노트
|
||||||
|
|
||||||
|
- **Gemini는 `generationConfig`(responseMimeType·thinkingConfig) 주면 빈 응답** 반환. → **평문 본문(contents만)으로 호출하고 응답 text에서 JSON 정규식 파싱**할 것. thinking 모델이라 추론 토큰을 먼저 쓴다.
|
||||||
|
- **Anthropic 자동 호출엔 크레딧 필요**: 현재 키는 `credit balance too low`. console.anthropic.com 결제 전까지 Claude는 수동 주입.
|
||||||
|
- **Python urllib는 macOS에서 SSL 인증서 실패** 가능 → `curl`(시스템 인증서) 사용 권장.
|
||||||
|
- 출력은 JSON 스키마로 강제: `{winner, score_korea, score_czechia, confidence, reason}`.
|
||||||
|
|
||||||
|
## 3. 체코전(한국 vs 체코) — 실제 출력 (2026-06-10)
|
||||||
|
|
||||||
|
`lib/mockData.ts`의 `FEATURED_PREDICTIONS`에 주입됨.
|
||||||
|
|
||||||
|
| 모델 | 결과 | 스코어(한:체) | 확신 | 근거(KO) |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| GPT (gpt-5.5) | 무승부 | 1 : 1 | 54% | 한국 역습과 체코 제공권이 팽팽 |
|
||||||
|
| Claude (claude-opus-4-8) | 한국 승 | 2 : 1 | 57% | 손흥민·이강인 측면 창의성이 체코 블록을 연다 |
|
||||||
|
| Gemini (gemini-3.5-flash) | 한국 승 | 2 : 1 | 55% | 이강인·손흥민 공격력, 체코 수비에 근소 우세 |
|
||||||
|
|
||||||
|
→ "AI가 갈렸다": GPT 무승부 vs Gemini·Claude 한국 2-1.
|
||||||
|
|
||||||
|
## 4. 호출 프롬프트 (참고)
|
||||||
|
|
||||||
|
```
|
||||||
|
2026년 6월 한국(Korea Republic) vs 체코(Czechia) 축구 경기를 최근 전력 기반으로 예측해줘.
|
||||||
|
다른 설명 없이 이 JSON 한 줄만:
|
||||||
|
{"winner":"한국|무승부|체코","score_korea":정수,"score_czechia":정수,"confidence":0-100,"reason":"한국어 한 줄"}
|
||||||
|
```
|
||||||
|
|
||||||
|
- winner는 teamA(한국)=score_korea, teamB(체코)=score_czechia 기준으로 매핑.
|
||||||
|
- 랜딩 타입 변환: 한국 승=`TEAM_A_WIN` / 무승부=`DRAW` / 체코 승=`TEAM_B_WIN`.
|
||||||
|
|
||||||
|
## 5. 다음 단계
|
||||||
|
|
||||||
|
- [ ] 나머지 Group A 5경기도 동일 호출로 주입
|
||||||
|
- [ ] Cloud Functions로 매일 KST 0시 자동 생성 → Firestore 저장(immutable), 탈락팀 제외 (`docs/BACKEND.md`)
|
||||||
|
- [ ] Anthropic 크레딧 충전 후 Claude 자동 호출 포함
|
||||||
Loading…
Reference in New Issue