"이 옵션이 켜 있으면 피파가 tts 친화적으로 응답해야 해. 마구 불릿 만들고 표 만들고 하는 식으로 마크다운이 필요한 수준의 응답을 하면 대화가 어렵고 tts 보이스 모형 친화적이지도 않거든. chatgpt 보이스 모드 수준의 응답이 필요해." — 아빠, 2026-09-25
다들 처음에 만드는 버전
오후 한나절이면 만드는 음성 모드가 있어. 마이크로 녹음해서 전사기에 보내고, 받아쓴 글을 채팅 모델에 보내고, 답에서 마크다운을 걷어낸 다음 남은 걸 TTS 엔진에 넘기는 거지. 부품 하나하나는 다 잘 돌아가. 그런데 결과물은 못 들어줄 수준이야. 모델은 시스템 프롬프트에서 읽는 사람이 화면을 본다고 들었으니까 화면용으로 써. 제목 하나, 굵은 라벨 셋, 선택지 다섯 개짜리 목록, 표, 링크. 마크다운 제거기는 기호만 지우고 글자는 남기니까, 목소리는 "선택지. 선택지 일 쌍점 속도. 선택지 이 쌍점 비용"을 한 호흡에 밋밋하게 읽어. URL은 알파벳 줄줄이로 나오고, 도구 호출 하나가 10초짜리 정적을 만드는데 그게 딱 전화 끊긴 소리 같아. 게다가 모델이 답한 전사문엔 잘못 알아들은 단어가 셋 있었는데, 모델은 그걸 친절하게 지적까지 해.
반환 타입이 다른 거야
Firekeeper 계획서가 이미 7월에 이 함정을 짚었어. 받아쓰기 정리와 말로 하는 대답은 계약 자체가 달라. 받아쓰기는 읽을 글을 돌려주고, 말하는 대답은 들을 말을 돌려줘. 말하는 대답은 요점부터 꺼내고, 한 번에 생각 하나만 들고, 턴을 상대에게 돌려주고, 화면에서만 통하는 건 하나도 담지 않아. 써놓은 답을 후처리해서는 절대 이렇게 안 돼. 틀린 건 구두점이 아니라 구조거든. 다섯 개짜리 목록은 불릿을 뗀다고 말이 되지 않아. 말하는 사람이 둘만 꼽고 나머지는 더 들을 건지 물어볼 때 비로소 말이 돼.
그래서 이 퀘스트 전체를 관통하는 규칙은 이거야. 첫 토큰부터 귀를 위해 지어. 모델은 뭘 쓰기도 전에 이번 턴이 소리로 들릴 거라는 걸 알아. 문서부터 써 놓고 나중에 사포질당하는 일은 절대 없어.
기능은 어디에 사나
그날 아빠의 두 번째 결정이 주인을 정했어. 가족의 받아쓰기 앱 Firekeeper는 원래 음성 대화로 자라는 게 목표였어. 그런데 대화에는 소울이 필요해. 피파의 기억, 볼트, 판단, 그리고 아빠가 나중에 폰에서 다시 읽을 바로 그 대화 기록까지. 그래서 이 기능은 브레인인 cwkPippa에 살아. 모든 소울, 모든 화면을 위해서. Firekeeper는 WebUI, 모든 사이드킥 패널, 폰, 워치와 나란히 그리로 들어가는 문 하나가 됐어. 앱들은 듣고 재생하는 루프만 들고 있고, 두 번째 브레인을 키우는 앱은 하나도 없어.
지도
이 퀘스트는 말로 하는 턴 하나를 처음부터 끝까지 따라가. 트랙 1은 모양이야. 왜 음성이 턴에 붙는지. 트랙 2는 귀. 배치와 실시간 음성 인식. 트랙 3은 귀를 위해 쓰는 브레인. 트랙 4는 입. 가족 전체가 쓰는 음성 엔진 하나. 트랙 5는 목소리 자체와 그 출신. 트랙 6은 핸즈프리 루프. 트랙 7은 끼어들기, 그러니까 피파가 말하는 위로 말을 얹는 거. 트랙 8은 정직하게 잰 지연과, 이 모든 걸 쓰는 여러 문들이야.