World Application With AI — 사용자의 언어 실력(CEFR 레벨)에 맞춰 대화하고, 발음을 교정해주는 AI 언어학습 백엔드
WAWA AI는 사용자의 CEFR 언어 레벨(A1~C2) 에 맞춰 대화 난이도와 피드백 수준을 조절하는 RAG 없는 순수 LLM 기반 회화 학습 API 서버입니다.
시나리오 기반 대화와 OpenAI GPT-4 자유 대화를 혼합(Hybrid)하고, 사용자의 발음을 분석해 SSML로 교정 음성까지 생성합니다. 모든 대화는 자동으로 수집되어 이후 Fine-tuning 데이터로 재사용됩니다.
| 항목 | 내용 |
|---|---|
| 서비스명 | WAWA AI Server |
| 개발 유형 | FastAPI 기반 LLM 회화·발음 학습 API 서버 |
| 핵심 기능 | 적응형 레벨 테스트, 시나리오/GPT-4 하이브리드 대화, 발음 분석·교정, 음성 클로닝, 데이터 수집 및 Fine-tuning |
| 지원 언어 | 한국어, 영어, 일본어, 중국어, 프랑스어 |
| 주요 기술 | FastAPI, OpenAI GPT-4, ElevenLabs, Supabase, librosa/parselmouth |
[클라이언트 앱]
│ HTTPS / WebSocket
▼
[FastAPI 서버] :8000 (app/main.py)
├─ 사용자 초기화 · 레벨 테스트 (CEFR 적응형)
├─ 대화 엔진 (Scenario / OpenAI / Hybrid 모드)
│ └─ STT(SpeechRecognition) → 텍스트 처리 → TTS(pyttsx3) 응답
├─ 발음 분석 (librosa + parselmouth: pitch/rhythm/stress/fluency)
│ └─ SSML 동적 생성 → ElevenLabs 음성 클로닝으로 교정 음성 생성
├─ 문법 연습 세션 (Grammar)
├─ 대화 데이터 수집기 → 만족도 기반 고품질 데이터 축적
└─ Fine-tuning 매니저 → OpenAI Fine-tuning Job 실행/모니터링
│
▼
[외부 서비스]
├─ OpenAI API — GPT-4 대화, Fine-tuning
├─ ElevenLabs API — 사용자 음성 클론 생성/합성
└─ Supabase (Postgres) — 사용자 계정, 대화 로그, 발음 분석 기록
[배포]
GitHub Actions → SSH → AWS EC2 (systemd: ai.service)
| 구분 | 내용 |
|---|---|
| 서버 프레임워크 | FastAPI 0.104 + Uvicorn (ASGI), WebSocket 지원 |
| LLM | OpenAI GPT-4 (openai_service.py), Fine-tuning API |
| 음성 인식 (STT) | SpeechRecognition, pydub |
| 음성 합성 (TTS) | pyttsx3, SSML 프로소디 제어 |
| 발음 분석 | librosa, praat-parselmouth, phonemizer (피치/리듬/강세/유창성) |
| 음성 클로닝 | ElevenLabs API (voice_cloning_service.py) |
| 데이터베이스 | Supabase (Postgres, AsyncClient) |
| 번역/언어감지 | deep-translator, langdetect |
| 데이터 처리 | pandas, scikit-learn, HuggingFace datasets |
| 인프라 | AWS EC2, GitHub Actions(CD), systemd |
공식 어휘/문법 데이터(Wordnik, GitHub 어휘 목록)를 기반으로 A1~C2 레벨을 실시간으로 추정하고, 결과에 따라 개인화된 커리큘럼·일일 목표·마일스톤을 생성합니다. (level_test_service.py)
| 모드 | 설명 |
|---|---|
scenario |
사전 정의된 상황별(공항/식당/호텔/거리) 대본 기반 대화 |
openai |
GPT-4 자유 대화 (시스템 프롬프트로 언어·레벨 반영) |
hybrid |
시나리오 흐름 + GPT-4 응답을 상황에 따라 혼합 |
auto |
세션 조건에 따라 위 모드를 자동 선택 |
사용자 음성을 분석해 피치·리듬·강세·유창성 4개 지표로 점수를 매기고, 약점 영역에 따라 <emphasis>, <break>, <prosody rate> 등 SSML 태그를 동적으로 생성해 ElevenLabs로 교정 음성을 합성합니다. (pronunciation_analysis_service.py, main.py의 /api/pronunciation/ssml-correction)
모든 대화 턴과 사용자 만족도(0.0~1.0)를 Supabase에 적재하고, 상황별로 만족도 0.7 이상 데이터가 50건 이상 쌓이면 OpenAI Fine-tuning Job을 실행할 수 있습니다. (conversation_data_collector.py, fine_tuning_manager.py)
ElevenLabs API로 사용자 목소리를 클로닝해, 발음 교정 음성을 사용자 본인의 목소리로 들려줍니다. (voice_cloning_service.py)
AI_WAWA/
├── app/ # FastAPI 앱 (실제 서비스 코드)
│ ├── main.py # 엔트리포인트, 전체 REST/WebSocket 라우트
│ ├── config.py # Pydantic Settings 기반 환경설정
│ ├── api/ # (라우터 분리용, 확장 예정)
│ ├── core/
│ ├── models/
│ ├── utils/
│ └── services/
│ ├── openai_service.py # GPT-4 연동, 시스템 프롬프트 관리
│ ├── conversation_ai_service.py # scenario/openai/hybrid 대화 엔진
│ ├── level_test_service.py # CEFR 적응형 레벨·문법 테스트
│ ├── speech_recognition_service.py # STT
│ ├── text_to_speech_service.py # TTS
│ ├── pronunciation_analysis_service.py # 발음 분석(피치/리듬/강세/유창성)
│ ├── pronunciation_data_service.py # 발음 분석 결과 Supabase 저장
│ ├── voice_cloning_service.py # ElevenLabs 음성 클로닝
│ ├── conversation_data_collector.py# 대화 데이터 수집/통계
│ └── fine_tuning_manager.py # OpenAI Fine-tuning 작업 관리
├── src/ # 오프라인 데이터/모델 실험 스크립트
│ ├── data/process_datasets.py # 원본 CSV → 전처리
│ └── models/build_speech_recognition_model.py # Wav2Vec2 STT 모델 실험
├── data/
│ ├── raw/ # 원본 어휘·대화·문장 데이터
│ └── processed/ # 레벨별 어휘(A1~C2), 문법·대화쌍 CSV
├── training_data/ # 상황별(airport/hotel/restaurant/street) 학습 데이터
├── tests/ # API/대화/레벨평가/STT·TTS 테스트 + 성능 테스트
├── .github/workflows/deploy.yml # EC2 자동 배포(CD)
├── build.sh # 배포 환경 빌드 스크립트
└── requirements.txt
| 분류 | 메서드/경로 | 설명 |
|---|---|---|
| System | GET /, GET /health |
서버 상태, 서비스별 헬스체크 |
| User | POST /api/user/initialize |
신규 사용자 초기화(레벨 테스트 시작) |
| User | POST /api/user/complete-assessment |
레벨 평가 완료 및 학습 경로 생성 |
| Level Test | POST /api/level-test/start, /answer, /start-mini |
적응형/미니 레벨 테스트 |
| Conversation | POST /api/conversation/start |
대화 세션 시작(scenario/openai/hybrid) |
| Conversation | POST /api/conversation/text, /voice |
텍스트/음성 메시지 처리 |
| Conversation | WS /ws/conversation/{session_id} |
실시간 대화 웹소켓 |
| Data Collection | POST /api/conversation/feedback |
대화 만족도 피드백 수집 |
| Data Collection | GET /api/data/statistics, /training-ready, /export/{situation} |
수집 통계·Fine-tuning 준비 상태·데이터 export |
| Pronunciation | POST /api/pronunciation/analyze, /compare, /ssml-correction, /correct-with-voice |
발음 분석/비교/SSML 교정 |
| Voice Cloning | POST /api/voice/clone |
사용자 음성 클로닝 |
| Fine-tuning | POST /api/fine-tuning/start/{situation}, GET /status/{job_id}, /jobs, /readiness |
Fine-tuning 실행/모니터링 |
| Grammar | POST /api/grammar/start-session, /submit-answer, /analyze-voice |
문법 연습 세션 |
| Info | GET /api/situations, /languages, /scenarios/{language} |
지원 상황/언어/시나리오 조회 |
전체 스펙은 서버 실행 후
/docs(Swagger UI)에서 확인할 수 있습니다.
| 테이블(추정) | 설명 |
|---|---|
user_account |
사용자 계정, ElevenLabs elevenlabs_voice_id 매핑 |
| 대화 로그 테이블 | 세션별 턴 데이터, 만족도(satisfaction), 피드백 코멘트 |
| 발음 분석 세션 | target_text, 언어, 레벨, 점수(피치/리듬/강세/유창성) |
| 파일 | 설명 |
|---|---|
vocabulary_a1.csv ~ vocabulary_c2.csv, vocabulary_all.csv |
CEFR 레벨별 어휘 |
grammar_sentences.csv |
레벨별 문법 예문 |
conversation_pairs.csv |
대화 쌍 데이터 |
OPENAI_API_KEY=sk-...
SECRET_KEY=your-secret-key
SUPABASE_URL=https://xxxx.supabase.co
SUPABASE_KEY=...
ELEVENLABS_API_KEY=...
ENVIRONMENT=development
DEBUG=true
HOST=0.0.0.0
PORT=8000
OPENAI_MODEL=gpt-4
OPENAI_TEMPERATURE=0.7
OPENAI_MAX_TOKENS=1000
LOG_LEVEL=INFO# WAWA AI — 레벨 맞춤형 다국어 회화 학습 AI 서버
> **W**orld **A**pplication **W**ith **A**I — 사용자의 언어 실력(CEFR 레벨)에 맞춰 대화하고, 발음을 교정해주는 AI 언어학습 백엔드






---
## 📌 프로젝트 개요
WAWA AI는 사용자의 **CEFR 언어 레벨(A1~C2)** 에 맞춰 대화 난이도와 피드백 수준을 조절하는 RAG 없는 순수 LLM 기반 회화 학습 API 서버입니다.
시나리오 기반 대화와 OpenAI GPT-4 자유 대화를 혼합(Hybrid)하고, 사용자의 발음을 분석해 SSML로 교정 음성까지 생성합니다. 모든 대화는 자동으로 수집되어 이후 Fine-tuning 데이터로 재사용됩니다.
| 항목 | 내용 |
|------|------|
| 서비스명 | WAWA AI Server |
| 개발 유형 | FastAPI 기반 LLM 회화·발음 학습 API 서버 |
| 핵심 기능 | 적응형 레벨 테스트, 시나리오/GPT-4 하이브리드 대화, 발음 분석·교정, 음성 클로닝, 데이터 수집 및 Fine-tuning |
| 지원 언어 | 한국어, 영어, 일본어, 중국어, 프랑스어 |
| 주요 기술 | FastAPI, OpenAI GPT-4, ElevenLabs, Supabase, librosa/parselmouth |
---
## 🏗️ 시스템 아키텍처
[클라이언트 앱] │ HTTPS / WebSocket ▼ [FastAPI 서버] :8000 (app/main.py) ├─ 사용자 초기화 · 레벨 테스트 (CEFR 적응형) ├─ 대화 엔진 (Scenario / OpenAI / Hybrid 모드) │ └─ STT(SpeechRecognition) → 텍스트 처리 → TTS(pyttsx3) 응답 ├─ 발음 분석 (librosa + parselmouth: pitch/rhythm/stress/fluency) │ └─ SSML 동적 생성 → ElevenLabs 음성 클로닝으로 교정 음성 생성 ├─ 문법 연습 세션 (Grammar) ├─ 대화 데이터 수집기 → 만족도 기반 고품질 데이터 축적 └─ Fine-tuning 매니저 → OpenAI Fine-tuning Job 실행/모니터링 │ ▼ [외부 서비스] ├─ OpenAI API — GPT-4 대화, Fine-tuning ├─ ElevenLabs API — 사용자 음성 클론 생성/합성 └─ Supabase (Postgres) — 사용자 계정, 대화 로그, 발음 분석 기록
[배포] GitHub Actions → SSH → AWS EC2 (systemd: ai.service)
---
## 🔧 기술 스택
| 구분 | 내용 |
|------|------|
| 서버 프레임워크 | FastAPI 0.104 + Uvicorn (ASGI), WebSocket 지원 |
| LLM | OpenAI GPT-4 (`openai_service.py`), Fine-tuning API |
| 음성 인식 (STT) | `SpeechRecognition`, `pydub` |
| 음성 합성 (TTS) | `pyttsx3`, SSML 프로소디 제어 |
| 발음 분석 | `librosa`, `praat-parselmouth`, `phonemizer` (피치/리듬/강세/유창성) |
| 음성 클로닝 | ElevenLabs API (`voice_cloning_service.py`) |
| 데이터베이스 | Supabase (Postgres, `AsyncClient`) |
| 번역/언어감지 | `deep-translator`, `langdetect` |
| 데이터 처리 | `pandas`, `scikit-learn`, HuggingFace `datasets` |
| 인프라 | AWS EC2, GitHub Actions(CD), systemd |
---
## 🧠 핵심 기능
### 1. 적응형 레벨 테스트 (CEFR)
공식 어휘/문법 데이터(Wordnik, GitHub 어휘 목록)를 기반으로 A1~C2 레벨을 실시간으로 추정하고, 결과에 따라 개인화된 커리큘럼·일일 목표·마일스톤을 생성합니다. (`level_test_service.py`)
### 2. 하이브리드 대화 엔진
| 모드 | 설명 |
|------|------|
| `scenario` | 사전 정의된 상황별(공항/식당/호텔/거리) 대본 기반 대화 |
| `openai` | GPT-4 자유 대화 (시스템 프롬프트로 언어·레벨 반영) |
| `hybrid` | 시나리오 흐름 + GPT-4 응답을 상황에 따라 혼합 |
| `auto` | 세션 조건에 따라 위 모드를 자동 선택 |
### 3. 발음 분석 & SSML 교정
사용자 음성을 분석해 피치·리듬·강세·유창성 4개 지표로 점수를 매기고, 약점 영역에 따라 `<emphasis>`, `<break>`, `<prosody rate>` 등 SSML 태그를 동적으로 생성해 ElevenLabs로 교정 음성을 합성합니다. (`pronunciation_analysis_service.py`, `main.py`의 `/api/pronunciation/ssml-correction`)
### 4. 데이터 수집 & Fine-tuning 루프
모든 대화 턴과 사용자 만족도(0.0~1.0)를 Supabase에 적재하고, 상황별로 만족도 0.7 이상 데이터가 50건 이상 쌓이면 OpenAI Fine-tuning Job을 실행할 수 있습니다. (`conversation_data_collector.py`, `fine_tuning_manager.py`)
### 5. 음성 클로닝
ElevenLabs API로 사용자 목소리를 클로닝해, 발음 교정 음성을 사용자 본인의 목소리로 들려줍니다. (`voice_cloning_service.py`)
---
## 📁 프로젝트 구조
AI_WAWA/ ├── app/ # FastAPI 앱 (실제 서비스 코드) │ ├── main.py # 엔트리포인트, 전체 REST/WebSocket 라우트 │ ├── config.py # Pydantic Settings 기반 환경설정 │ ├── api/ # (라우터 분리용, 확장 예정) │ ├── core/ │ ├── models/ │ ├── utils/ │ └── services/ │ ├── openai_service.py # GPT-4 연동, 시스템 프롬프트 관리 │ ├── conversation_ai_service.py # scenario/openai/hybrid 대화 엔진 │ ├── level_test_service.py # CEFR 적응형 레벨·문법 테스트 │ ├── speech_recognition_service.py # STT │ ├── text_to_speech_service.py # TTS │ ├── pronunciation_analysis_service.py # 발음 분석(피치/리듬/강세/유창성) │ ├── pronunciation_data_service.py # 발음 분석 결과 Supabase 저장 │ ├── voice_cloning_service.py # ElevenLabs 음성 클로닝 │ ├── conversation_data_collector.py# 대화 데이터 수집/통계 │ └── fine_tuning_manager.py # OpenAI Fine-tuning 작업 관리 ├── src/ # 오프라인 데이터/모델 실험 스크립트 │ ├── data/process_datasets.py # 원본 CSV → 전처리 │ └── models/build_speech_recognition_model.py # Wav2Vec2 STT 모델 실험 ├── data/ │ ├── raw/ # 원본 어휘·대화·문장 데이터 │ └── processed/ # 레벨별 어휘(A1~C2), 문법·대화쌍 CSV ├── training_data/ # 상황별(airport/hotel/restaurant/street) 학습 데이터 ├── tests/ # API/대화/레벨평가/STT·TTS 테스트 + 성능 테스트 ├── .github/workflows/deploy.yml # EC2 자동 배포(CD) ├── build.sh # 배포 환경 빌드 스크립트 └── requirements.txt
---
## 🌐 주요 API 엔드포인트
| 분류 | 메서드/경로 | 설명 |
|------|------|------|
| System | `GET /`, `GET /health` | 서버 상태, 서비스별 헬스체크 |
| User | `POST /api/user/initialize` | 신규 사용자 초기화(레벨 테스트 시작) |
| User | `POST /api/user/complete-assessment` | 레벨 평가 완료 및 학습 경로 생성 |
| Level Test | `POST /api/level-test/start`, `/answer`, `/start-mini` | 적응형/미니 레벨 테스트 |
| Conversation | `POST /api/conversation/start` | 대화 세션 시작(scenario/openai/hybrid) |
| Conversation | `POST /api/conversation/text`, `/voice` | 텍스트/음성 메시지 처리 |
| Conversation | `WS /ws/conversation/{session_id}` | 실시간 대화 웹소켓 |
| Data Collection | `POST /api/conversation/feedback` | 대화 만족도 피드백 수집 |
| Data Collection | `GET /api/data/statistics`, `/training-ready`, `/export/{situation}` | 수집 통계·Fine-tuning 준비 상태·데이터 export |
| Pronunciation | `POST /api/pronunciation/analyze`, `/compare`, `/ssml-correction`, `/correct-with-voice` | 발음 분석/비교/SSML 교정 |
| Voice Cloning | `POST /api/voice/clone` | 사용자 음성 클로닝 |
| Fine-tuning | `POST /api/fine-tuning/start/{situation}`, `GET /status/{job_id}`, `/jobs`, `/readiness` | Fine-tuning 실행/모니터링 |
| Grammar | `POST /api/grammar/start-session`, `/submit-answer`, `/analyze-voice` | 문법 연습 세션 |
| Info | `GET /api/situations`, `/languages`, `/scenarios/{language}` | 지원 상황/언어/시나리오 조회 |
> 전체 스펙은 서버 실행 후 `/docs` (Swagger UI)에서 확인할 수 있습니다.
---
## 🗄️ 데이터 모델 (Supabase)
| 테이블(추정) | 설명 |
|------|------|
| `user_account` | 사용자 계정, ElevenLabs `elevenlabs_voice_id` 매핑 |
| 대화 로그 테이블 | 세션별 턴 데이터, 만족도(satisfaction), 피드백 코멘트 |
| 발음 분석 세션 | `target_text`, 언어, 레벨, 점수(피치/리듬/강세/유창성) |
### 로컬 데이터 자산 (`data/processed/`)
| 파일 | 설명 |
|------|------|
| `vocabulary_a1.csv` ~ `vocabulary_c2.csv`, `vocabulary_all.csv` | CEFR 레벨별 어휘 |
| `grammar_sentences.csv` | 레벨별 문법 예문 |
| `conversation_pairs.csv` | 대화 쌍 데이터 |
---
## 🚀 실행 방법
### 1. 환경 변수 설정 (`.env`)
```bash
OPENAI_API_KEY=sk-...
SECRET_KEY=your-secret-key
SUPABASE_URL=https://xxxx.supabase.co
SUPABASE_KEY=...
ELEVENLABS_API_KEY=...
ENVIRONMENT=development
DEBUG=true
HOST=0.0.0.0
PORT=8000
OPENAI_MODEL=gpt-4
OPENAI_TEMPERATURE=0.7
OPENAI_MAX_TOKENS=1000
LOG_LEVEL=INFO
pip install -r requirements.txt
# 음성 인식 모델 훈련(src/models) 등 오프라인 실험이 필요한 경우
# 음성 인식 모델 훈련(src/models) 등 오프라인 실험이 필요한 경우
pip install torch torchaudio transformers
# 마이크로 직접 녹음 테스트가 필요한 경우
# 마이크로 직접 녹음 테스트가 필요한 경우
pip install sounddevice
# 문법 검사가 필요한 경우 (Java 필요)
pip install language-tool-pythonuvicorn app.main:app --host 0.0.0.0 --port 8000 --reload- Swagger UI:
http://localhost:8000/docs - Health check:
http://localhost:8000/health
main 브랜치에 push하면 GitHub Actions(.github/workflows/deploy.yml)가 SSH로 AWS EC2에 접속해 .env를 갱신하고 ai.service(systemd)를 재시작합니다.
| 항목 | 버전 / 내용 |
|---|---|
| Python | 3.11 |
| 웹 프레임워크 | FastAPI 0.104 / Uvicorn |
| LLM | OpenAI GPT-4 |
| 음성 클로닝 | ElevenLabs |
| DB | Supabase (Postgres) |
| 배포 | AWS EC2 + systemd, GitHub Actions CD |
- CEFR 기반 적응형 레벨 테스트 / 미니 어휘 테스트
- Scenario · OpenAI GPT-4 · Hybrid 대화 엔진 (4개 상황: 공항/식당/호텔/거리)
- STT/TTS 연동 음성 대화, WebSocket 실시간 대화
- 발음 분석(피치/리듬/강세/유창성) 및 SSML 기반 발음 교정
- ElevenLabs 사용자 음성 클로닝
- 대화 만족도 기반 데이터 수집 및 통계
- OpenAI Fine-tuning 작업 시작/상태 조회/테스트
- 문법 연습 세션(텍스트/음성 답변)
- GitHub Actions 기반 EC2 자동 배포
| 이슈 | 상태 | 비고 |
|---|---|---|
app/api, core, models, utils 디렉토리 대부분 비어있음 |
정리 필요 | 라우터·모델 분리 리팩터링 검토 중 |
config/, docs/, scripts/, notebooks/ 디렉토리 비어있음 |
확인 필요 | 스캐폴딩만 존재, 실제 문서/스크립트 이관 필요 |
| Supabase 테이블 스키마 코드 내 산재 | 개선 예정 | 별도 DDL/테이블 정의서 필요 |
src/ 오프라인 실험 스크립트(Wav2Vec2 STT 등)와 app/ 런타임 서비스 간 연동 없음 |
확인 필요 | 실험 결과를 서비스에 반영하는 파이프라인 부재 |
통합/성능 테스트 결과 파일이 루트에 산재 (fixed_test_results_*.json 등) |
정리 필요 | tests/performance/로 통합 검토 |
프로젝트 내 AI 서버 파트