133 lines
4.6 KiB
Markdown
133 lines
4.6 KiB
Markdown
|
|
# OPIc Flow 구현 계획
|
|||
|
|
|
|||
|
|
## 1. 제품 목표
|
|||
|
|
|
|||
|
|
사용자가 난이도와 설문 주제를 선택하면 실제 OPIc 흐름에 가까운 15문항을 음성으로 듣고 영어로 답한다. 각 답변은 즉시 전사·평가되며, 시험 종료 후 전체 평가를 첫 장으로 하고 문항별 점수·키워드·개선점을 포함하는 보고서를 제공한다.
|
|||
|
|
|
|||
|
|
점수와 추정 등급은 공식 OPIc 성적이 아닌 학습용 지표로 명확히 표시한다.
|
|||
|
|
|
|||
|
|
## 2. 시험 구성
|
|||
|
|
|
|||
|
|
1. 자기소개 1문항
|
|||
|
|
2. 선택 주제 묘사·일상·과거 경험 6문항
|
|||
|
|
3. 롤플레이 3문항
|
|||
|
|
4. 돌발 주제 2문항
|
|||
|
|
5. 비교·의견·미래 예측 3문항
|
|||
|
|
|
|||
|
|
총 15문항이며 난이도에 따라 질문의 추상성, 요구 근거 수, 후속 조건을 조정한다.
|
|||
|
|
|
|||
|
|
## 3. 상태 흐름
|
|||
|
|
|
|||
|
|
`Setup → Device check → Question → Listening → Recording → Transcribing → Evaluating → Next question → Final report`
|
|||
|
|
|
|||
|
|
세션 상태는 Go 백엔드가 권위 있게 관리한다. 프런트엔드는 현재 문항보다 앞선 문항을 임의 제출할 수 없다.
|
|||
|
|
|
|||
|
|
## 4. AI 파이프라인
|
|||
|
|
|
|||
|
|
### 현재 MVP
|
|||
|
|
|
|||
|
|
- 질문 음성: Web Speech Synthesis
|
|||
|
|
- 사용자 음성: MediaRecorder(WebM/Opus)
|
|||
|
|
- 전사: `POST /v1/audio/transcriptions`
|
|||
|
|
- 평가: `POST /v1/responses`, strict JSON Schema
|
|||
|
|
- 다음 질문: 사전 구성된 OPIc 블루프린트
|
|||
|
|
|
|||
|
|
사전 구성 질문을 사용하면 AI가 시험 범위를 벗어나거나 문항 수를 잘못 생성하는 문제를 막을 수 있다. 답변 내용은 다음 문항을 고를 때 분기 조건으로 사용하도록 확장한다.
|
|||
|
|
|
|||
|
|
### Realtime 2단계
|
|||
|
|
|
|||
|
|
- Wails Go 백엔드가 표준 API 키로 `/v1/realtime/calls`에 SDP를 전달한다.
|
|||
|
|
- Vue WebView는 `RTCPeerConnection`으로 마이크 트랙과 `oai-events` 데이터 채널을 구성한다.
|
|||
|
|
- `server_vad` 또는 `semantic_vad`로 발화 종료를 감지한다.
|
|||
|
|
- `input_audio_transcription` 이벤트로 실시간 자막을 표시한다.
|
|||
|
|
- 모델 음성 출력은 원격 audio track으로 재생한다.
|
|||
|
|
- 문항 종료마다 별도의 Responses API 평가를 수행해 점수 JSON을 확정한다.
|
|||
|
|
|
|||
|
|
Realtime 모델이 대화를 자연스럽게 진행하더라도 시험 문항 인덱스와 최대 15문항 제한은 앱 상태 머신이 통제해야 한다.
|
|||
|
|
|
|||
|
|
## 5. 평가 기준
|
|||
|
|
|
|||
|
|
각 문항 100점:
|
|||
|
|
|
|||
|
|
- 과업 수행 25
|
|||
|
|
- 구체성·내용 전개 20
|
|||
|
|
- 구성·연결 15
|
|||
|
|
- 어휘 다양성 15
|
|||
|
|
- 문법 정확성 15
|
|||
|
|
- 유창성·답변 길이 10
|
|||
|
|
|
|||
|
|
오디오 기반 고도화 시 말하기 속도, 긴 침묵, filler, 반복, 자기 수정도 별도 feature로 저장한다. transcript만으로 발음 점수를 단정하지 않는다.
|
|||
|
|
|
|||
|
|
## 6. 보고서
|
|||
|
|
|
|||
|
|
첫 장:
|
|||
|
|
|
|||
|
|
- 전체 평균 점수
|
|||
|
|
- 연습용 추정 등급
|
|||
|
|
- 핵심 강점 3개
|
|||
|
|
- 우선 개선 과제 3개
|
|||
|
|
- 다음 세션 권장 난이도·주제
|
|||
|
|
|
|||
|
|
문항별:
|
|||
|
|
|
|||
|
|
- 질문과 답변 transcript
|
|||
|
|
- 0–100 점수
|
|||
|
|
- 핵심 키워드
|
|||
|
|
- 잘한 점
|
|||
|
|
- 개선점
|
|||
|
|
- 개선된 예시 답변(후속 단계)
|
|||
|
|
|
|||
|
|
내보내기:
|
|||
|
|
|
|||
|
|
- 1차: 브라우저 인쇄/PDF
|
|||
|
|
- 2차: Go PDF 생성 및 세션 JSON/오디오 내보내기
|
|||
|
|
|
|||
|
|
## 7. 인증과 보안
|
|||
|
|
|
|||
|
|
- ChatGPT 웹 로그인/구독은 API 인증으로 재사용하지 않는다.
|
|||
|
|
- 개인용 MVP: 사용자가 Platform API 키를 입력하며 메모리에만 유지한다.
|
|||
|
|
- 배포용: 앱에 공용 API 키를 포함하지 않는다. 자체 백엔드에서 사용자 로그인, 사용량 제한, ephemeral Realtime 인증을 처리한다.
|
|||
|
|
- 장기 로컬 저장이 필요하면 Windows Credential Manager/macOS Keychain/libsecret을 사용한다.
|
|||
|
|
- 오디오는 기본적으로 평가 후 폐기하고, 사용자가 명시적으로 저장을 선택한 경우에만 로컬 암호화 저장한다.
|
|||
|
|
|
|||
|
|
## 8. 단계별 로드맵
|
|||
|
|
|
|||
|
|
### Phase 1 — 현재
|
|||
|
|
|
|||
|
|
- Wails/Vue 앱 골격
|
|||
|
|
- 설정·시험·보고서 UI
|
|||
|
|
- 15문항 상태 머신
|
|||
|
|
- 녹음, 전사, 구조화 평가
|
|||
|
|
- 데모 모드
|
|||
|
|
|
|||
|
|
### Phase 2
|
|||
|
|
|
|||
|
|
- Realtime API WebRTC
|
|||
|
|
- VAD, 실시간 자막, 모델 음성, 끼어들기
|
|||
|
|
- 답변 특징에 따른 제한된 후속 질문 분기
|
|||
|
|
- 마이크/스피커 사전 점검
|
|||
|
|
|
|||
|
|
### Phase 3
|
|||
|
|
|
|||
|
|
- SQLite 세션 기록
|
|||
|
|
- 오디오 파형과 침묵/filler 분석
|
|||
|
|
- 개선 답변 생성과 쉐도잉
|
|||
|
|
- PDF/JSON 내보내기
|
|||
|
|
|
|||
|
|
### Phase 4
|
|||
|
|
|
|||
|
|
- 사용자 계정과 서버 측 API 프록시
|
|||
|
|
- 기기 간 동기화
|
|||
|
|
- 평가 prompt/eval 데이터셋 및 회귀 테스트
|
|||
|
|
- 비용·속도·품질 관측 대시보드
|
|||
|
|
|
|||
|
|
## 9. 검증 계획
|
|||
|
|
|
|||
|
|
- 질문 수와 순서 상태 머신 단위 테스트
|
|||
|
|
- 점수 스키마 0–100 경계 테스트
|
|||
|
|
- 빈 오디오, 마이크 거부, API 401/429/5xx 오류 테스트
|
|||
|
|
- 25MB 오디오 업로드 제한 전 사전 차단
|
|||
|
|
- 세션 완료 전 보고서 접근 차단
|
|||
|
|
- 난이도별 대표 transcript를 사용한 평가 회귀 테스트
|
|||
|
|
|