Skip to content
WAWA-GPPublic

About

[2025 WAWA] 레벨 맞춤형 다국어 회화 학습 AI 앱 — LLM 기반 발음 교정 & Fine-tuning 챗봇

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

WAWA AI — 레벨 맞춤형 다국어 회화 학습 AI 서버

World Application With AI — 사용자의 언어 실력(CEFR 레벨)에 맞춰 대화하고, 발음을 교정해주는 AI 언어학습 백엔드

Python FastAPI OpenAI Supabase ElevenLabs AWS


📌 프로젝트 개요

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)

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

2. 의존성 설치

# WAWA AI — 레벨 맞춤형 다국어 회화 학습 AI 서버

> **W**orld **A**pplication **W**ith **A**I — 사용자의 언어 실력(CEFR 레벨)에 맞춰 대화하고, 발음을 교정해주는 AI 언어학습 백엔드

![Python](https://img.shields.io/badge/Python-3.11-3776AB?style=flat-square&logo=python&logoColor=white)
![FastAPI](https://img.shields.io/badge/FastAPI-0.104-009688?style=flat-square&logo=fastapi&logoColor=white)
![OpenAI](https://img.shields.io/badge/OpenAI-GPT--4-412991?style=flat-square&logo=openai&logoColor=white)
![Supabase](https://img.shields.io/badge/Supabase-Postgres-3FCF8E?style=flat-square&logo=supabase&logoColor=white)
![ElevenLabs](https://img.shields.io/badge/ElevenLabs-Voice_Cloning-000000?style=flat-square)
![AWS](https://img.shields.io/badge/AWS-EC2-FF9900?style=flat-square&logo=amazonwebservices&logoColor=white)

---

## 📌 프로젝트 개요

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

2. 의존성 설치

pip install -r requirements.txt

# 음성 인식 모델 훈련(src/models) 등 오프라인 실험이 필요한 경우
# 음성 인식 모델 훈련(src/models) 등 오프라인 실험이 필요한 경우
pip install torch torchaudio transformers

# 마이크로 직접 녹음 테스트가 필요한 경우
# 마이크로 직접 녹음 테스트가 필요한 경우
pip install sounddevice

# 문법 검사가 필요한 경우 (Java 필요)
pip install language-tool-python

3. 서버 실행

uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
  • Swagger UI: http://localhost:8000/docs
  • Health check: http://localhost:8000/health

4. 배포

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 서버 파트

About

[2025 WAWA] 레벨 맞춤형 다국어 회화 학습 AI 앱 — LLM 기반 발음 교정 & Fine-tuning 챗봇

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages