← Docs hub
LLM Live 음성 인터랙션 기획
Live 적용은 모델 교체가 아니라 턴 중심 명령 경험을 세션 중심 대화 경험으로 바꾸는 일이다.
이 페이지는 구현값이 아니라 사용자가 느끼는 변화와 제품 정책만 다룬다. 현재 상태와 조절값은
기기 Runtime과 튜닝 파라미터에서 확인한다.

기존과 Live 적용 후
| 사용자 경험 |
기존 음성 처리 |
Live 적용 후 |
| 대화 단위 |
한 번의 발화와 응답 |
하나의 세션에서 여러 턴 |
| 마이크 |
입력마다 시작·종료 |
Live 대화 동안 유지 |
| 발화 종료 |
F3 중심 |
Gemini VAD 중심, F3 보조 |
| 후속 질문 |
필요한 멀티턴에서만 수집 |
모든 답변 뒤 5초 대기 |
| 응답 음성 |
로컬 TTS 중심 |
Gemini 24 kHz PCM, 현재 Leda |
| Barge-in |
제한적 |
Echo gate와 Gemini VAD로 지원 |
| 제품 명령 |
기기 Device API |
동일. Live 안에서는 rewrite_query로 기기에 전달 |
| 종료 |
한 턴 또는 멀티턴 상태에 따라 결정 |
명시 종료, 무발화, 오류를 하나의 종료 gate로 처리 |
| 대화 문맥 |
Cloud REST 최대 16턴 |
현재 WebSocket 세션에서 Gemini가 유지 |
| 데이터 처리 |
기존 STT/S3 정책 |
Gemini Live라는 외부 처리 목적지 추가 |
핵심 변화는 답변이 끝나도 대화가 즉시 끝나지 않는다는 점이다. 사용자는 자연스럽게 이어
말할 수 있지만, 기기가 언제 듣고 있고 언제 완전히 종료됐는지 예측하기 어려워질 수 있다.
기획에서 결정해야 하는 항목
대화 정책
| 결정 질문 |
현재값 |
권장 시작안 |
| Live 진입 범위 |
SK_19 |
일반 대화만 Live, 제품 명령은 기존 경로 유지 |
| 답변 후 대기 |
5초 |
기본 5초, 모델이 질문한 경우 연장 검토 |
| 명시 종료 |
종료 문구와 end_conversation |
음성, 마이크, 연결, UI 즉시 동시 종료 |
| 최대 세션 |
14분 값만 정의 |
시간·비용 상한과 안전한 회전 정책 확정 |
| 생각 중 Barge-in |
WAITING_RESPONSE에서 미지원 |
출시 범위를 명시하고 후속 기능으로 분리 |
| F1/F3 |
VAD 보조 |
세션 시작/종료 확정 신호로 확대하지 않음 |
제품 명령과 음성
| 결정 질문 |
위험 |
권장 시작안 |
| 명령 후 세션 종료 |
모든 결과를 같은 방식으로 종료 |
결과 유형별 유지/종료 결정 |
| 추가 정보가 필요한 명령 |
질문이 효과음으로 사라질 수 있음 |
NEEDS_USER_INPUT이면 같은 Live 음성으로 질문 |
| 상태 조회 |
로컬/Live 음성이 섞임 |
Live 안에서는 Gemini 음성, 오프라인은 로컬 TTS |
| 단순 성공·거부 |
긴 TTS가 대화를 방해 |
짧은 효과음 또는 짧은 Live 응답 |
| 목소리 일관성 |
Leda와 로컬 TTS 음색 차이 |
동일화보다 온라인/오프라인 역할을 예측 가능하게 표현 |
| 중복 실행 |
fallback에서 같은 명령 재실행 가능 |
공통 turn/command ID, Device API 정확히 1회 |
화면, 장애와 개인정보
| 결정 질문 |
권장 시작안 |
| 두 번째 이후 자막 |
모든 user/assistant 턴에 partial/final과 화자를 동일 규칙으로 표시 |
| 상태 표시 |
듣는 중, 생각 중, 말하는 중을 구분하고 종료 시 즉시 숨김 |
| 연결 실패 안내 |
첫 응답 전과 응답 중 실패를 구분해 한 번만 안내 |
| fallback |
보존 입력을 REST 또는 로컬 안내로 한 번만 처리 |
| 외부 전송 |
Gemini 전송과 기존 S3 로그의 목적, 보존, 삭제와 처리자 승인 |
| 디버그 로그 |
key, 원본 PCM, 전체 전사와 사전 서명 URL 마스킹 |
권장 Interaction 정책 v1
| 영역 |
v1 정책 |
| 진입 |
SK_19만 Live Primary로 전환 |
| 후속 입력 |
답변 소진 뒤 5초 대기, 명시 종료는 즉시 처리 |
| Barge-in |
Gemini가 확정하면 PCM queue를 비우고 같은 세션에서 새 턴 시작 |
| 제품 결과 |
COMPLETED, REJECTED, NEEDS_USER_INPUT, INFORMATION으로 구분 |
| 추가 질문 |
NEEDS_USER_INPUT은 expectedSlot과 세션 유지 |
| 음성 |
Live는 Gemini 음성, 오프라인은 기존 로컬 TTS 보존 |
| 화면 |
모든 턴의 자막과 듣기/생각/말하기 상태 표시 |
| 종료 |
AudioRecord, AudioTrack, WebSocket과 UI가 함께 IDLE로 수렴 |
| 안전 |
제품 명령의 최종 검증은 기기, Device API는 정확히 한 번 |
후속 개선 후보는 질문형 응답의 대기 시간 연장, WAITING_RESPONSE 취소, resumption, 사용자별
대기 시간과 음성 선호다. v1 승인 전에는 기능 범위를 넓히지 않는다.
KPI
목표값은 Release APK 실기기 기준선을 측정한 뒤 확정한다.
| KPI |
시작과 끝 |
| Live 진입 성공률 |
Wake-up -> Gemini setup 완료/실패 |
| 첫 음성 응답 시간 |
사용자 발화 종료 -> 첫 PCM 재생 |
| Barge-in 정지 시간 |
사용자 발화 확정 -> 기존 답변 정지 |
| 오중단 / 미검출률 |
Echo 표본과 실제 사용자 발화 표본 |
| 후속 대화 성공률 |
답변 소진 -> 다음 입력 전사 |
| 의도치 않은 종료율 |
종료 직후 재호출 또는 같은 질문 반복 |
| 제품 명령 완료율 |
rewrite_query -> Device API 결과 |
| 명령 중복 실행 |
동일 command ID의 물리 호출 수, 목표 0건 |
| 자막 완전성 |
모든 user/assistant partial/final 표시 비율 |
| 종료 수렴 시간 |
종료 의도 -> 오디오·녹음·연결·UI 해제 |
| 세션 비용·자원 |
연결 시간, byte, 메모리와 thread 회수 |
기획 승인 체크리스트
- Live 진입 범위, 5초 대기, 최대 세션과 종료 문구가 승인됐는가?
- Barge-in의 오중단과 미검출 중 어느 쪽을 더 보수적으로 볼지 정했는가?
NEEDS_USER_INPUT을 포함한 제품 결과별 음성과 세션 정책이 있는가?
- Live, 로컬 TTS와 효과음의 역할이 정해졌는가?
- 모든 턴의 자막과 상태 표시 규칙이 있는가?
- Gemini와 S3 음성 처리의 개인정보 정책이 승인됐는가?
- 속도뿐 아니라 무응답, 중복 명령과 자원 회수를 실기기에서 측정하는가?
관련 문서