# 코델리아 AI 버튜버 — 작업 노트

이리듐192 · 프로토타입 · 개발 기록

한 문장의 답변이 목소리와 표정이 되기까지. 입력, 추론, 음성, 아바타를 따로 만들고 연결한 과정입니다.

## 자료 기준

개발 기록 · 로컬 Python 코드

## 구조와 결과

### 듣고 구분하기

VAD와 Whisper로 소리를 텍스트로 바꾸고, 호출어와 명령어로 응답할 발화를 고릅니다. 모든 잡담에 반응하던 문제에서 선택적 청취로 방향을 바꿨습니다.

근거: 진행 기록: Smart Addressing / Strict Mode

### 문맥을 이어 답하기

서버 코드의 과거 대화 슬라이스와 채팅 템플릿을 통해 최근 문맥을 넣습니다. 모델 교체와 SFT 복원 기록을 함께 남겨, 어떤 버전의 구현인지 구분합니다.

근거: server_api.py · history[-6:] / apply_chat_template

### 말과 감정을 분리하기

[Joy] 같은 태그는 음성으로 읽을 대사가 아니라 제어 정보입니다. TTS에는 태그를 제거한 문장을, 아바타에는 감정 정보를 보냅니다.

근거: 2026.02.13 개발 기록 · Tag Filtering

### 캐릭터로 출력하기

GPT-SoVITS 음성과 VTube Studio의 표정·립싱크를 연결합니다. 플랫폼 클라이언트와 아바타 연결을 한 모듈에 몰아넣지 않고 비동기 흐름으로 연결합니다.

근거: tts.py / modules/vtubeStudio.py / discordClient.py

## 개발 기록

- 2025.12 · 뇌와 몸의 경계 정리: 블로킹 I/O와 의존성 문제를 기록하고, 프롬프트·데이터·학습 순서를 다시 정리했습니다.
- 학습 실험 · DPO에서 SFT로 복원: 선호도 학습 이후 품질 문제가 생겨 SFT 어댑터로 돌아간 서버 스냅샷을 확인했습니다.
- 2026.02.07 · 감정 유지와 감각 통합: 문장이 나뉠 때 표정이 초기화되던 문제를 직전 감정 유지 방식으로 다뤘습니다.
- 2026.02.13 · EXAONE 전환과 태그 분리: 진행 기록에 EXAONE 3.5 전환, GPU 자원 재배치, TTS 감정 태그 분리 작업이 남아 있습니다.

## 실제 코드 발췌

server_api.py · 70–79

```
            outputs = self.model.generate(
                input_ids=inputs,
                max_new_tokens=100,
                eos_token_id=terminators,
                repetition_penalty=1.2,
                temperature=0.6, # SFT는 창의성보다 안정성을 위해 온도를 낮춤
                top_p=0.9,
                do_sample=True,
                pad_token_id=self.tokenizer.eos_token_id
            )
```

로컬에 남아 있는 SFT 복원 시점의 추론 코드 발췌입니다. 응답 길이·반복 패널티·온도를 제한합니다. 이후 EXAONE 전환은 별도의 개발 기록으로 구분합니다.

## 현재 단계

2026년 2월까지의 진행 기록과 현재 저장소 구조를 바탕으로 정리했습니다. 기록상의 지연 시간·인식률을 재현 검증된 성능으로 사용하지 않으며, 완전 무인 방송이나 인간 같은 의식의 구현을 주장하지 않습니다.

## 사용한 자료

- 프로젝트 진행사항.txt · 2025.12–2026.02
- 성장형 AI 제작 명세서 v11
- AI VTuber DPO 데이터셋 연구 / 자율 개입 프로토콜
- AI-Vtuber 저장소의 서버·클라이언트·비전 모듈

이 노트는 공개 소개용으로 정리한 요약본입니다. 비공개 원본·개인정보·인증 정보는 포함하지 않습니다.
