합성 통화 — 페르소나 대본 dasan-v0 + 대시보드 재생기
무엇을
상담원 AI·고객 AI 가 실시간으로 대화하는 것처럼 보이는 합성 통화를 만든다.
대본은 미리 생성해 고정하고, 재생기가 턴마다 콜 미디에이터 WS /dev/text 로 글자를 흘리며 TTS 로 소리를 낸다.
왜
- 실제 통화 음성·외국인 화자 데이터가 없어 파이프라인(마스킹·필요서류·콜 가드·블랙리스트·통화 온도)을 끝까지 한 통화로 돌려 볼 입력이 없다
- 골든셋 C-5 는 P1·P2·P3·P5 표본이 0건이다 — 대본이 가짜 값으로 채운다
- 비용: 대본은 Claude Code(구독) 안에서 만들고, 재생은 STT 를 부르지 않는다 — 추가 청구 없음(2026-09-16 논의)
완료 조건
- 페르소나 목록(상담원 3 · 고객 9 · 톤 5) —
scripts/persona_sim/dasan-v0/personas.json. 09-18 상담원 6 · 고객 19 · 대본 24건(성격 다양화,scenarios_v0_b.py) - 대본 10건, 길이 짧음 3 · 중간 5 · 긺 2 — 블랙리스트 요청/미요청/베테랑 배정, 톤 상승/하강/무변화 대조군 포함
- 라벨이 발화 안에 글자 그대로 있는지 생성기가 검사한다(LLM 채점 아님)
- QA 페르소나 검수 3종(상담 품질 감사관 · 개인정보·라벨 검수 · 외국인 당사자·심사위원) 반영 — README 「QA 페르소나 검수」
- 사람 검토 — 매뉴얼 해석(5.2 종료 · 5.4 위기 응대) · 어눌한 한국어 과장 여부 → 사람이 읽어야 한다(류준·팀) — 미결로 넘김. AI 검수(QA 페르소나 3종)만 거친 상태
- 결정 기록
209(제안, 2026-09-18) — 용도(데모·파이프라인 점검) · 「말할 수 없는 것」 · 저장 위치 · Google TTS · E2E. 팀 합의 전 - 재생기 —
services/call-mediator/scripts/replay_persona_call.ts. 두 채널/dev/text?producer=script로 부분 결과를 어절째 늘려 흘리고,--speak는say(말 빠르기로 톤 흉내). 엔진synthetic-script· 발신 번호 헤더 — 콜 미디에이터0.1.6 - 로컬 검증 — 콜 미디에이터 테스트 107 통과, 실제 콜 미디에이터 코드 + 가짜 허브로 SYN-006 끝까지 재생(전사 72건 · 엔진·발신 번호 확인). 실서버·운영 대시보드 화면으로는 아직 안 봤다
- 운영 시연 → 콜 미디에이터
0.2.1이 09-19 운영에 떠 있다. 운영에 합성 통화를 태울지는 팀 결정(미결 SYN-010) — 정하면 재생기로 바로 하네스에서→ 올리지 않는다(source: synthetic으로 따로 집계decisions/210, E2E 검사e2e_check.py가 그 역할)
한계 (절대 원칙 10)
STT 를 거치지 않아 인식 오류가 0 이다 — 검색·마스킹 수치는 상한이고, 트리거 지연·D-5 톤 판정 성능의 근거가 될 수 없다.
자세한 목록과 시연 절차는 scripts/persona_sim/README.md.
2026-09-21 — 닫음 (내 몫 끝)
대본 24건·재생기·Google TTS(키 확인 완료)·E2E 왕복 검사까지 끝났다. 남은 셋은 이 티켓 안의 코드 작업이 아니다 — 사람 검토(미결) · 운영 태우기(팀 결정) · 하네스 집계(안 한다, 210).
2026-09-21 — 대본 검토(AI)
사람 검토 항목을 사용자 지시로 AI(Claude Code)가 대신 검토했다 — 사람 검토를 대체하지 않는다. 보고서 scripts/persona_sim/REVIEW-2026-09-21.md.
라벨은 안 고쳤고 발화 3문장만 고쳤다(SYN-006 #10 · SYN-013 #13 · SYN-024 #11 — Google TTS 재합성 필요). 71479 정답 전사로 대조했을 때 어눌한 한국어의 희화화는 없었다(필리핀·일본 화자는 자료에 없어 검증 못 함).
SYN-023 E2E ❌ 는 시스템(트리거) 쪽으로 기록했다. 사람이 볼 항목 8개는 보고서 끝에 있다.