시연 인프라 준비 — STT 캡 · speaker=auto 실검증 · 관리자 토큰 수명
무엇을
시연 리허설 전에 인프라 쪽에서 막힐 것 셋을 먼저 푼다.
- STT 캡 — 2026-09-21
/call-mediator/health실측: 일 600초 · 월 3,600초. 하루 약 4통화면 끝난다. 리허설 + 본 시연을 같은 날 하면 본 시연에서 스트림 오픈이 거부된다(COST-1 2차 가드가 의도대로 동작하는 것이다). 시연 기간에만 올리고 끝나면 되돌린다 — GCP 쿼터(1차)와STT_MAX_SECONDS_*(2차) 둘 다 speaker=auto— 모노 녹음 화자 분리(decisions/303)가 실제 구글 응답으로 미검증이다. 시연은 물리 2채널(브라우저 2대)로 우회하기로 했지만, 우회가 안 될 때의 대비로 한 번은 실제 응답으로 돌려 본다관리자 토큰 수명→ ✅ 2026-09-28 끝났다(decisions/136— access 30분 · refresh 12시간, 운영 시크릿 + 코드 기본값). QAQ-05가 이 값을 보는 항목이라 게이트 앞으로 당겨 처리했다. 원문 — access 5분 · refresh 10분은 테스트 값이다(decisions/403). 시연 중에 로그인이 풀린다. 운영 값은 조서희 님과 정한다
완료 조건
- 캡을 올린 값 · 올린 날 · 되돌린 날이
_logs/에 남는다 speaker=auto실검증 결과 — 안 되면 「미검증」을 「안 됨」으로 고쳐 적는다- 관리자 토큰 운영 값 반영
2026-10-01 — 절차로 정했다 (정성윤)
- STT 캡은 날짜 없이 절차로 정했다(
decisions/143) — 리허설·시연 날 아침 일 캡 3,600 PR, 다음 날 600 PR, 둘 다 로그에. - 관리자 토큰 운영 값은 09-28 에 끝났다(
decisions/136) — 체크만 늦었다. speaker=auto실검증은 오디오 파일이 있어야 한다. 없으면 발표에 「미검증」으로 적는다(decisions/138동결 목록).
2026-10-01 — done (정성윤)
- STT 캡: 날짜 없이 절차로 정했다(
decisions/143— 리허설·시연 날 3,600 PR, 다음 날 600 PR, 둘 다 로그). 시연 영상은 글자 채널이라 캡을 안 탄다. speaker=auto: 오디오 파일이 없어 미검증 그대로 — 발표에 「미검증」으로 적는다(decisions/138알려진 한계). 「안 됨」이 아니라 「안 재봤다」다.- 관리자 토큰 운영 값: 09-28 완료(
136).
2026-10-01 — speaker=auto 실검증 (정성윤) · 판정 불가
운영 콜 미디에이터에 모노 8kHz 45초 wav(stream_wav.ts --speaker auto --watch --max-seconds 30, 통화 test-auto-01)를 흘렸다. 입력은 윈도우 TTS(Heami) 한 음성으로 상담원·고객 턴을 읽고 고객만 -4반음 낮춘 합성음 — macOS say 기반 합성 스크립트가 윈도우에서 안 돌아 대신 만든 것이다.
결과 — 구글 화자 분리가 30초 전체를 한 화자(agent)의 확정 1건으로 돌려줬다(터미널 +30.85s FINAL #1 [agent] …). 글자는 합성음·8kHz 라 틀린 곳이 많고(「한별 씨 통합민원」·「헬로」) 그 수치는 성능으로 인용하지 않는다.
판정: 「안 됨」이 아니라 「판정 불가」 — 같은 목소리를 음높이만 바꾼 입력은 사람이 들어도 한 사람이다. 화자 분리가 동작하는지는 실제 두 사람 음성이 있어야 안다. 발표에는 「speaker=auto 미검증(실제 2인 음성 없음)」으로 적는다. 배선(모델 요청 플래그·+diarize 엔진 이름·첫 화자 = 상담원 규칙)은 이 호출로 운영에서 끝까지 돌았다 — 그것까지가 확인된 범위다.
2026-10-01 저녁 — 2채널(채널 분리) 실검증 (정성윤) · 배선 ✅ · 끝점 검출 ✗ → 0.2.13
speaker=auto 대신 기획서 1순위 경로인 채널 분리를 돌렸다. SYN-004 대본 7턴을 두 목소리(상담원 +2st · 고객 −5st, Heami TTS)로 읽어 스테레오 wav(L=상담원 · R=고객, 상대가 말할 때는 무음, 59.9초, data/processed/stt-2ch/, gitignore)를 만들고 stream_wav.ts … --call-id real-stt-01 --max-seconds 60 --watch 로 운영에 보냈다(STT 캡 120초 소모).
- 배선은 끝까지 돌았다 — DB
stt_engine google-stt·channel_count 2, 상담원 줄은 상담원 텍스트만·고객 줄은 고객 텍스트만(채널이 섞이지 않았다). 고객 줄에***마스킹과 「⚠ 경고」, 추천이 발동해 4.13 아동수당 신청 — 필요서류 카드와 체크리스트 4/4 안내 완료(상담원이 네 서류를 다 말했다). 영어 섞인 발화는 「헬로」「언더스탠드」 로 전사됐다 — A-5 1차 범위의 모습 그대로다. - 발화가 쪼개지지 않았다 — 두 채널 다
interim만 60초 내내 자라다가 스트림이 끝날 때 final 한 번(화자당 확정 발화 1건, 둘 다00:59.904). 운영 DB 의google-stt통화 5건을 다 세어 보니 전부 화자당 final 1개였다 — 09-14·15 시험도 한 문장짜리라 드러나지 않았던 것이다.google_stt.ts가 「A-4 는 구글 끝점 검출에 맡긴다」고 적어 뒀는데 기본 모델은 그렇게 동작하지 않았다. - 고침(
0.2.13) — 콜 미디에이터에 로컬 에너지 끝점 검출을 넣었다: 말한 뒤 700ms 무음이면 스트림을 닫아 final 을 받고 다음 소리에서 새로 연다(교대 로직 재사용). 무음은 보내지 않아 캡도 아낀다.speaker=auto는 끈다(스트림마다 화자 번호가 새로 매겨짐). 테스트 +6(184/184). 배포 뒤 같은 wav 를 다시 보내 화자당 확정 발화가 3~4건으로 쪼개지는지 본다 — 그것이 이 항목의 완료 조건이다. - 09-30 의
speaker=auto「판정 불가」는 이유가 하나 더 있었다 — 같은 목소리 문제 전에, final 이 한 번뿐이라 화자 구간이 한 결과 안에서만 나뉘었다. 끝점 검출을 끈 채로 두므로speaker=auto는 여전히 미검증이다.
2026-10-01 19:00 — 0.2.13 배포 뒤 재검증 (정성윤) · 완료
같은 스테레오 wav 를 real-stt-02 로 다시 보냈다(콜 미디에이터 0.2.13, STT 캡 120초). 운영 DB: google-stt · 채널 2 · 확정 발화 상담원 8 · 고객 11 = 19건(0.2.12 에서는 1·1). 턴 7개가 19건으로 쪼개진 것은 TTS 가 쉼표·마침표마다 넣는 0.7초 넘는 쉼을 발화 끝으로 본 것이다 — 「무엇을 도와 드릴까요」「천천히 말씀하셔도 괜찮아요」 처럼 한 호흡 단위라 자막으로는 오히려 읽기 좋고, 추천은 두 번 발동해(「차일드」 뒤·네 서류 안내 뒤) 4.13 카드 4/4 가 그대로 떴다. 화면은 상담원·고객 줄이 시각 순으로 번갈아 쌓였다(사용자 캡처, 로컬 보관). 쉼 기준(silenceMs 700)은 상수라 필요하면 올린다.
이것으로 「음성 → Google STT(2채널) → 마스킹 → 자막·카드」 가 운영에서 발화 단위로 도는 것을 확인했다. speaker=auto(화자 분리)만 미검증으로 남는다.