← 이슈 목록

FROM THE WORKSHOP / 이슈

베리 전화 봇의 송출 검증 — 반복 실패에서 상대의 세제 답변까지

강대종 · 마이너스베타스튜디오

베리 전화 봇의 송출 검증 — 반복 실패에서 상대의 세제 답변까지

  • 발생 일자: 2026-10-11, 이전 통화 시험에서 이어진 문제
  • 해결 일자: 2026-10-11 18:30 KST 송출 확인. 모델 대화는 미완료
  • 심각도: medium
  • 재발 가능성: high — 모델 발화의 수신과 종료 제한을 아직 보장하지 못함
  • 영향 범위: Mac에서 iPhone 회선을 중계한 일반전화의 AI 음성 송출 시험
  • 관련 작업: T-261001-003

증상

베리가 상대의 말을 받아쓰고 답변을 만들었다. 로컬 음성 파일에도 파형이 있었다. 하지만 상대는 베리의 목소리가 들리지 않는다고 했고, 세탁소 시험 봇은 응답이 없다는 안내 뒤 통화를 끝냈다.

10월 11일 18:30 시험에서는 준비한 질문 “세탁기에 세제가 자동으로 들어가나요?”에 상대가 **“네, 세탁기에서 세제가 자동으로 투입됩니다.”**라고 답했다. 일반전화에서 질문의 내용이 전달됐다는 근거를 처음 확보했다. 이 결과를 전체 AI 대화의 완료로 확대하지는 않았다.

실패를 길게 만든 판단과 확인한 현상

항목확인한 사실해석의 한계
로컬 재생을 통화 송출의 근거로 사용합성 음성·녹음·가상 장치 입력은 존재했지만 상대 응답은 없었다내 컴퓨터의 소리만으로 상대 수신을 판정할 수 없다
에코 제거 가설에 집중별도 VoiceProcessingIO 시험에서 신호가 약 54dB 줄었다. 처리를 우회하자 회복됐다실제 전화 프로세스의 원인을 입증한 실험은 아니다
실시간 말하기 첫 발화의 경로 차이한 시험의 첫 출력은 내장 스피커였다. 다음 발화는 Apple의 통화용 음성 출력이었다초기화·경로 전환 문제의 단서다. 운영체제 결함이나 예열의 효과를 확정하지 못했다
다른 종류의 전화 성공 사례를 섞어 봄참고 구현에는 FaceTime, SIP, 일반전화 수신·키패드 사례가 섞여 있었다FaceTime 성공이 iPhone 회선 중계 송출의 성공을 보장하지 않는다
수동 화면 조작에 의존마지막 시험에서 발신 후 약 40초에 모델 질문을 재생했다모델 준비 시간과 발신부터 재생까지의 시간은 다른 측정이다
녹음 제한을 종료 제한처럼 취급캡처를 멈추는 타이머는 전화 앱의 통화를 끝내지 않았다마지막 종료 요청은 발신 후 64.5초였다. 약속한 60초 제한을 지키지 못했다

BlackHole 개발자도 브라우저의 에코 제거가 가상 장치의 출력을 입력에서 지우는 사례를 설명했다. 이는 이번 로컬 실험의 가설을 뒷받침한다. 해당 브라우저 사례를 macOS 전화 앱의 확정 원인으로 옮겨 적지는 않는다. 개발자 설명

분리 오디오 드라이버 후보까지 준비했지만 채택을 취소했다. 설치한 후보도 제거했다. 최종 송출 확인은 그 후보를 사용하지 않았다. 공개 코드를 참고하는 일과 제품에 도입하는 일을 분리하지 못하면, 원인 검증 전에 설치·유지보수·라이선스 검토 범위부터 커진다.

송출을 확인한 방법

Apple의 실시간 말하기는 입력한 문장을 전화·FaceTime 참가자에게 들려주는 기능이다. 통화용으로 지원하는 경로를 먼저 확인했다. Apple 실시간 말하기 안내

성공한 시험에서는 다음 조건을 함께 사용했다.

  1. 통화 전에 한국어 실시간 말하기를 한 번 재생했다.
  2. 통화 중 입력이 AXSpeech.input, 출력이 com.apple.accessibility.livespeech.tts.output으로 바뀌는 것을 확인했다.
  3. AI 비서 소개와 시험 녹음 안내 뒤에 짧고 구체적인 세제 질문을 말했다.
  4. 상대가 세제 자동 투입 여부를 답하는 것을 수신했다.

예열만 바꾼 대조 실험은 하지 않았다. 따라서 “예열로 버그를 해결했다”가 아니라 “이 조건에서 상대의 구체적인 답변을 확인했다”로 기록한다. 음질 등급이나 1.2배속이 성공 원인이라는 근거도 없다.

실시간 말하기 경로의 네 차례 시험

이 표는 경로를 바꾼 뒤의 네 통화다. 앞선 전체 실패 횟수를 뜻하지 않는다.

시험실제로 얻은 결과남은 것
1차안내 뒤 응답 없음으로 종료. 발화별 출력 경로가 달랐다세제 질문 수신 미확인
2차상대가 “세탁기 사용 관련 문의이신가요?”라고 되물었다. 전화 기록 47초주제 반응은 확인. 세제 답변은 미확인
3차상대가 세제 자동 투입을 답했다. 전화 기록 50초Fable 후속 질문은 만들었지만 시간 제한 때문에 재생하지 못함
4차상대 인사를 받아 Fable 질문을 생성했다. 그 문장을 실시간 말하기로 재생했다이후 상대 응답을 받지 못함. 상대의 모델 질문 수신도 미확인

송출 성공인데 모델 대화는 왜 미완료인가

3차에서 상대가 답한 것은 미리 준비한 질문이다. Fable은 그 답을 보고 “그럼 세제는 따로 준비하지 않아도 되는 거죠?”라는 후속 질문을 만들었다. 음성 인식부터 생성 완료까지 3.411초였다. 하지만 그 질문은 재생하지 못했다.

4차에서는 실제 상대 인사 → Fable 질문 생성 → 실시간 말하기 재생까지 이어졌다. 음성 인식부터 생성 완료까지 5.507초였다. 이후 상대의 답변은 수신하지 못했다. 화면에 재생 표시가 있었다는 사실만으로 이 발화도 상대에게 도착했다고 판정할 수는 없다.

수동 조작 지연은 확인했다. 마지막 무응답이 상대의 대기 종료, 발화 시점, 송출 경로 중 무엇 때문인지는 확정하지 못했다. 두 시간은 시작점도 다르므로 40초 - 5.5초를 전부 UI 지연으로 계산하지 않는다.

예방과 남은 조치

  • 적용: 로컬 출력, 통화 경로, 상대의 내용상 응답, 실제 모델, 모델 발화 뒤 상대 응답을 나누어 기록했다.
  • 적용: 시험용 실행기에 승인한 모델과 실제 실행 모델의 불일치를 중단하는 검사를 넣었다. 전역 모델 설정은 바꾸지 않았다.
  • 적용: 시험 후 실시간 말하기와 기본 오디오 설정을 복원했다. 시험이 만든 캡처·모델 프로세스를 종료했다.
  • 미완료: 생성된 문장을 실시간 말하기에 즉시 전달하는 연결과 통화 종료 제한을 검증해야 한다. JEV의 빠른 분류만으로 수동 재생 지연이 없어지지는 않는다.

현재 판정: 일반전화의 준비 문장 송출은 확인. 모델이 만든 발화의 상대 수신과 후속 응답은 미검증. 원본 녹음과 전화번호는 공개하지 않는다.

노하우: 전화 AI의 음성 경로와 응답 시간을 검증하는 법

기록은 다음 시작이 됩니다.이슈 더 읽기 ↗이 작업장의 제품 ↗
작업장 전체 페이지 목적에 맞는 페이지 찾기