현재 작업 상태 저장

This commit is contained in:
Yun Chan 2026-06-27 11:20:24 +09:00
parent 07cc67761e
commit 6bd91b0d5e
674 changed files with 8726 additions and 298 deletions

View file

@ -0,0 +1,56 @@
# BIMEC 페르소나 음성 PoC - 2026-06-27
## 목적
BIMEC/Vignette 상담 시뮬레이션에서 내담자 페르소나가 텍스트만이 아니라 목소리의 정서 변화까지 표현하도록 한다. 1차 목표는 P1 서연 음성을 우울·무기력 상태에서 경계/불안, 라포 형성, 조심스러운 회복감까지 한 목소리 계열로 샘플링하는 것이다.
## 로컬 모델 조사 결과
- 채택 후보: 로컬 ComfyUI `Higgs Audio v3 TTS` 서버.
- 위치: `C:\Users\encep\Tools\ComfyUI_windows_portable\ComfyUI\custom_nodes\Higgs_v3-TTS-ComfyUI`.
- 사용: 서버 래퍼(`higgs_server.py`)는 기존 reference voice를 내장하므로 BIMEC 페르소나 제작에는 쓰지 않는다. 스크립트가 Higgs 런타임을 직접 로드해 무참조 synthetic seed voice를 먼저 만든다.
- 장점: 한국어 zero-shot voice cloning, inline emotion/style/prosody/SFX 태그, 속도·피치·pause 제어.
- 제약: 약 9~11GB VRAM 단독 여유. SUPIR/Qwen 등 GPU 작업과 동시 실행 금지.
- 라이선스/권리: Higgs Audio v3는 연구·비상업 라이선스 계열로 확인됨. 상업 서비스 탑재 전 라이선스 확정이 필요하다.
## 금지 원칙
- 실존 인물·성우·강의 음성 reference로 BIMEC 서비스 페르소나를 만들지 않는다.
- 기존 로컬 `clean_ref_seg1.wav`, `kangsujin_*`, GPT-SoVITS ref 등은 이 작업에서 금지한다.
- "그 급의 표현력"은 목표로 삼되, 음색은 무참조 synthetic seed 또는 명시 동의·라이선스가 확보된 음성만 사용한다.
## P1 서연 음성 방향
- 기본 음색: 청소년 여성으로 들리되 과도하게 아동화하지 않는다.
- 초기 상태: 떨림, 낮은 에너지, 말끝 흐림, 긴 pause.
- 경계 상태: 비밀 보장 걱정 때문에 말이 빨라지고 톤높이가 올라간다.
- 라포 이후: 속도가 조금 안정되고 숨이 덜 막힌다.
- 회복감: 밝아져도 과장 금지. "씩씩함"이 아니라 "조금 괜찮아짐" 수준.
## 산출물
- 생성 스크립트: `docs/voice-art/scripts/generate_p1_seoyeon_higgs_samples.py`
- 샘플 폴더: `docs/voice-art/p1-seoyeon-higgs-v3-20260627/`
- 생성 방식: Higgs 무참조 생성으로 `_synthetic_seed_no_external_reference`를 만들고, 그 synthetic seed만 재참조한다.
## 서비스 연결 현황
- 연결 방식: `VoiceService.synthesize_stream`에 개발용 P1 sample TTS provider를 추가했다.
- 활성화: `ENVIRONMENT=dev`에서만 `VIGNETTE_VOICE_POC_SAMPLE_TTS=true`로 켠다.
- 대상: P1 `soft-young-fem` preset만 샘플 provider를 사용한다. P2/P3와 일반 preset은 기존 OpenAI TTS 경로를 유지한다.
- 동작: AI가 생성한 내담자 응답 텍스트를 보고 우울·피로·불안·라포·회복 샘플 중 가장 가까운 MP3를 `/voice/ws` binary TTS chunk로 재생한다.
- 범위: 이 provider는 TTS 출력만 바꾼다. 실제 마이크 입력/STT 캐스케이드는 여전히 `OPENAI_API_KEY`가 있어야 가용하다.
- 한계: 현재 PoC는 답변 문장을 그대로 새 합성하지 않고 정서 샘플을 재생한다. 상업 라이선스·권리정책이 닫히기 전에는 프로덕션 배포 금지.
## 검증
- 단위/계약: `python -m unittest app.test_voice_service app.test_voice_ws app.test_session_turn_persistence app.test_runtime_policy` 42 tests OK.
- 실제 자산 스트림: P1 회복감 문장 기준 provider `p1-sample-poc`, 20 chunks, 78,573 bytes.
- 서비스 smoke: dev-login → P1 session → `/voice/ws` `text_turn` → reply/state/tts_end + binary 20 chunks 수신 확인.
## 서비스 연결 전 게이트
- 소유자 결정: Higgs 상업 라이선스 확보 또는 배포 가능한 대체 모델 선정.
- 음원 권리: 실제 reference voice를 쓰는 경우 P1/P2/P3 각 페르소나용 동의 받은 reference voice만 허용.
- 임상 검수: 감정 표현이 상담 훈련을 방해할 정도로 과장하지 않는지 확인.
- 기술 검수: 샘플 음성 duration, loudness, silence, style token drift, browser playback 확인.