마지막 업데이트 2026-09-28
사용자가 말하면 세 명의 받아쓰기 선수(H4 · Soniox · Daglo)가 동시에 받아 적고, 심판(Selector)이 가장 그럴듯한 답안 하나를 고릅니다. 그 한 줄이 대화 LLM으로 가서 대답이 됩니다.
위 줄은 가는 길, 가운데는 받아쓰기 시험장, 왼쪽 세로줄은 돌아오는 길입니다.
초록 굵은 선 = 실제 대화가 흐르는 길. 주황 = 외부 회사 API. 파랑 = 고르는 모델.
H4만 우리 GPU에서 돕니다. 빈 GPU를 찾아 주는 안내 데스크가 따로 있습니다.
점선 = 자리 배정(작은 메시지). 굵은 선 = 음성.
시간은 왼쪽 → 오른쪽. 세 선수는 출발 시각이 다릅니다.
한 연결 안에서 발화는 한 번에 하나씩 처리됩니다. 사용자마다 연결(stream)은 따로입니다.
위에서부터 차례로 물어봅니다. 먼저 걸리는 줄이 답입니다.
soniox_returned_blank). 정책이 unreadable인 환경에서는 Selector 답이 있어도 (판독 불가) 복구로 갑니다.실패한 선수는 잠시 쉬게 합니다: 1 → 2 → 5 → 10초. 한 번 성공하면 초기화.
시계는 답안 모으기 시작한 순간부터 잽니다. 말이 끝난 순간이 아닙니다.
Selector는 아무것도 기억하지 않습니다(stateless). 그래서 Composite가 매번 앞 대화를 같이 넣어 줍니다.
max_tokens=1, temperature=0).위 대화 예시는 설명용으로 만든 것입니다.
“엄마랑… (쉼) …그네 탔어”를 두 문장으로 쪼개지 않기 위한 장치입니다.
:57에 설정 반영, 실제 수업 E2E 검증은 별개.| 환경 | 감독(Composite) | 선수·심판 GPU | 한 줄 |
|---|---|---|---|
| Dev | ppi-voice-dev-i-composite | H4 1대 · Selector 1대 고정 | 실험용. GPU 하나 죽으면 교체 전까지 0대 |
| Staging | ppi-voice-staging-i-composite | 전용 H4 1대 · Selector 1대 | Prod GPU 안 씀 |
| Prod | ppi-voice-prod-composite | shared H4(최소 2) · Prod Selector(최소 2) | 2개 AZ, 자동 확장 |
연결은 전부 VPC 안쪽 로드밸런서 + TLS. 바깥으로 나가는 건 Soniox(WSS)·Daglo(HTTPS)뿐이고 NAT를 거칩니다.
ppi-voice-shared-* 이름은 옛 공유 설계의 흔적이라 이름만 보고 지우지 않습니다.| 내용 | 출처 |
|---|---|
| 전체 구성도·발화 계약·fallback·5/15초·selector 문맥 | ppi-voice-pipeline-infra/ASR_HANDOVER/09_서비스_아키텍처와_요청흐름.md |
환경별 Composite·GPU 대수, Prod Agent :57 설정 | ASR_HANDOVER/10_운영서버_스펙과_리소스.md |
| 격리 Dev/Staging, VAD 이어말하기 | ASR_HANDOVER/15_최근_진행과_VAD_이어말하기.md |
| 후보 수집·selector·H4 재전송 구현 | Dubu-asr-api composite/service.py · candidates.py · selector.py · h4_retry.py |
| 네트워크·LB·Redis·GPU ASG | network.tf · load_balancing.tf · redis.tf · model_nodes.tf · selector_nodes.tf · composite.tf |
handover 문서 기준 정리이며, 이번에 AWS 실상태를 새로 조회하지는 않았습니다.