AI 멀티모달 스토리 시뮬레이터 플랫폼
IF 스토리는 소설을 실시간으로 플레이 가능한 인터랙티브 시뮬레이션으로 변환하는 AI 기반 플랫폼입니다. LLM + RAG + State Machine 구조를 사용하여 사용자가 스토리를 '읽는' 것이 아니라 '플레이'하도록 설계되었습니다.
- 중앙집중식 상태 관리 시스템
- 캐릭터 관계도, 신뢰도, 주제 게이지 추적
- 플레이어 선택 히스토리 관리
- LLM 기반 동적 장면 생성
- 플레이어 선택에 따른 실시간 스토리 분기
- JSON 기반 구조화된 스토리 데이터
- 캐릭터별 지식 베이스
- 게임 상태를 반영한 동적 대화
- 플레이어와의 인터랙티브 조언 시스템
- AI 기반 장면 배경 이미지 생성
- 시각적으로 몰입감 있는 스토리텔링
- 소설별 맞춤 주제 추적 (예: 문명 vs 야만)
- 선택의 영향을 실시간으로 시각화
``` ┌─────────────────────────────────────────────┐ │ Configuration Layer │ │ - Environment variables │ │ - API mode (Mock vs Production) │ └─────────────────┬───────────────────────────┘ │ ┌───────────┴───────────┐ │ │ ┌─────▼─────────┐ ┌────────▼────────┐ │ Service │ │ API Clients │ │ Factory │ │ - LLM Client │ │ │ │ - Image Client │ └─────┬─────────┘ └─────────────────┘ │ ├─────────────┬─────────────┬──────────────┐ │ │ │ │ ┌─────▼─────┐ ┌────▼──────┐ ┌───▼──────┐ ┌─────▼────┐ │ Story │ │Character │ │ Image │ │ Game │ │ Generator │ │ Chat │ │Generator │ │ State │ │ │ │ (RAG) │ │ │ │ Manager │ └─────┬─────┘ └────┬──────┘ └───┬──────┘ └─────┬────┘ │ │ │ │ └────────────┴─────────────┴──────────────┘ │ ┌────────▼─────────┐ │ UI Layer │ │ (Svelte 5) │ └──────────────────┘ ```
- 의존성 주입: Service Factory를 통한 느슨한 결합
- 인터페이스 기반: Mock과 실제 API 구현 분리
- 환경 기반 전환: 설정만으로 Mock ↔ API 모드 전환
- 확장 가능성: 새로운 LLM 제공자 추가 용이
- 프레임워크: SvelteKit (Svelte 5)
- 언어: TypeScript
- 스타일링: Tailwind CSS v4
- UI 컴포넌트: shadcn-svelte
- 상태 관리: Svelte Stores + Runes
- 스토리지: localStorage (향후 확장 가능)
- 저자: 윌리엄 골딩
- 주제 게이지:
- 문명 vs 야만
- 이성 vs 본능
- 주요 캐릭터: 랄프, 잭, 피기, 사이먼
GameStateManager: 중앙 상태 관리StoryGenerator: LLM 기반 스토리 생성CharacterChat: RAG 기반 캐릭터 대화ImageGenerator: AI 이미지 생성StoryScene: 스토리 장면 렌더링GaugeDisplay: 주제 게이지 시각화CharacterPanel: 캐릭터 정보 및 상호작용
``` src/ ├── lib/ │ ├── api/ # API 클라이언트 레이어 │ │ ├── types.ts # API 인터페이스 정의 │ │ ├── llm-client.ts # LLM API 클라이언트 (OpenAI, Anthropic) │ │ └── image-client.ts # 이미지 생성 API 클라이언트 │ │ │ ├── config/ # 설정 관리 │ │ └── app-config.ts # 환경 변수 및 앱 설정 │ │ │ ├── services/ # 비즈니스 로직 서비스 │ │ ├── service-factory.ts # 서비스 팩토리 (의존성 주입) │ │ ├── story-generator.ts # 스토리 생성 (엔트리 포인트) │ │ ├── story-generator.mock.ts # Mock 구현 │ │ ├── story-generator.api.ts # API 구현 │ │ ├── character-chat.ts # 캐릭터 챗 (엔트리 포인트) │ │ ├── character-chat.mock.ts # Mock 구현 │ │ ├── character-chat.api.ts # API 구현 │ │ ├── image-generator.ts # 이미지 생성 (엔트리 포인트) │ │ ├── image-generator.mock.ts # Mock 구현 │ │ └── image-generator.api.ts # API 구현 │ │ │ ├── data/ # 데이터 레이어 │ │ ├── novel-configs.ts # 소설 설정 │ │ ├── mock-scenes.ts # Mock 씬 데이터 │ │ └── mock-knowledge.ts # Mock 캐릭터 지식베이스 │ │ │ ├── stores/ # 상태 관리 │ │ └── game-state-manager.svelte.ts │ │ │ ├── types/ # TypeScript 타입 정의 │ │ └── game-state.ts │ │ │ └── components/ # UI 컴포넌트 │ └── ... │ └── routes/ # SvelteKit 라우트 └── +page.svelte ```
- 하드코딩된 데이터 사용
- API 키 불필요
- 빠른 개발 및 테스트
- 오프라인 작동
- 실제 LLM API 호출
- API 키 필요
- 동적 스토리 생성
- 비용 발생
모드 전환은 `.env` 파일의 `PUBLIC_API_MODE` 변수로 제어합니다.
-
추가 LLM 제공자 지원
- Google Gemini
- Cohere
- 로컬 LLM (Ollama 등)
- 스트리밍 응답 지원
-
더 많은 소설
- 셜록 홈즈 시리즈
- 안나 카레니나
- 기타 고전 문학
-
고급 RAG 시스템
- Vector DB 통합 (Pinecone, Weaviate)
- 실시간 임베딩 생성
- 컨텍스트 기반 검색
-
멀티플레이어
- 공동 스토리 진행
- 선택의 투표 시스템
- WebSocket 실시간 동기화
-
고급 기능
- 음성 내레이션 (TTS)
- 배경 음악 및 효과음
- 모바일 앱
- 스토리 분기 시각화
```bash npm install ```
프로젝트 루트에 `.env` 파일을 생성하고 다음 변수를 설정하세요:
```env
PUBLIC_API_MODE=mock
PUBLIC_OPENAI_API_KEY=your_openai_api_key_here PUBLIC_OPENAI_MODEL=gpt-4-turbo-preview
PUBLIC_ANTHROPIC_API_KEY=your_anthropic_api_key_here PUBLIC_ANTHROPIC_MODEL=claude-3-opus-20240229
PUBLIC_IMAGE_API_PROVIDER=openai PUBLIC_IMAGE_API_KEY=your_image_api_key_here PUBLIC_IMAGE_MODEL=dall-e-3 ```
참고: 환경 변수 없이도 개발 가능합니다. 기본값은 Mock 모드로 설정되어 있습니다.
```bash npm run dev ```
```bash npm run build ```
이 프로젝트는 기획서의 모든 핵심 요구사항을 구현했습니다:
- ✅ 4-Engine Architecture (GSM, Story Generator, Character RAG, UI)
- ✅ 동적 스토리 생성 시스템
- ✅ 캐릭터 기반 RAG
- ✅ 주제 게이지 및 관계도 시스템
- ✅ 멀티모달 렌더링 (이미지)
- ✅ 선택의 즉각적 영향 반영
- ✅ 저장/로드 시스템
MIT License