이름 하나가 만드는 오전환

실시간 음성 모델은 발화 중간에 언어를 자동으로 바꿀 수 있습니다. OpenAI 개발자 커뮤니티에는 시스템 프롬프트를 스페인어나 독일어로 전부 고정해도 GPT Realtime 2.1이 재현 가능한 수준으로 언어를 이탈한다는 보고가 있고, 대화 중 "Anastasia"가 언급되면 러시아어로, "Amir"가 언급되면 아랍어로 응답이 바뀌는 사례도 함께 보고됐습니다.

콜봇 루프에서는 이 특성이 상담 흐름을 끊습니다. 한국어로 진행 중이던 상담이 상담원 이름 한 단어에 영어·러시아어로 튀면, 사용자는 뭘 잘못 말했는지 모른 채 재질문만 반복하게 됩니다. 언어 전환은 예외 처리가 아니라 매 턴 지나가는 입력 경로에 놓아야 하는 게이트입니다.

검출 신호는 확정값이 아니라 확률값이다

OpenAI의 실시간 전사 가이드는 language 파라미터를 ISO-639-1 형식으로 지정하면 정확도와 지연이 함께 개선된다고 명시합니다. 다만 언어를 지정해도 다른 언어의 발화가 함께 인식되는 경우가 남고, 모델이 신뢰할 만한 예측을 만들지 못하면 감지된 언어 필드는 빈 배열로 돌아옵니다. "감지된 언어"는 라우팅을 단독으로 맡길 확정값이 아니라 신뢰도가 흔들리는 확률적 신호입니다.

번역 전용 엔드포인트는 이 불확실성을 구조로 우회합니다. 출력 언어마다 별도 세션을 열게 설계돼, 세션 안에서 언어가 오락가락할 여지를 처음부터 없앱니다. 콜봇 루프도 같은 발상을 빌려 언어 판단을 모델의 암묵적 추론에 맡기지 않고 애플리케이션 계층이 명시적으로 소유해야 합니다.

설계에서 운영까지: 언어 전환 게이트 체크리스트

기획 단계에서는 전환 목표 지표를 숫자로 고정합니다. 오검출 전환 비율 2% 이하, 복귀까지 걸리는 턴 수 1턴 이내, 확인 질문 응답률 90% 이상이 출발 기준입니다. 수치가 없으면 "가끔 언어가 바뀐다"는 사후 민원으로만 문제를 알게 됩니다.

실패 패턴은 네 가지로 갈립니다. 첫째 이름·고유명사 하나로 촉발되는 오전환, 둘째 시스템 프롬프트로 언어를 고정해도 장시간 대화에서 재발하는 드리프트, 셋째 language 파라미터 미지정 상태에서 배경 소음이나 억양 탓에 최초 감지부터 어긋나는 경우, 넷째 감지 필드가 빈 배열로 돌아왔는데 이를 처리하지 않고 이전 언어를 그대로 밀어붙이거나 반대로 기본 언어로 되돌리는 경우입니다.

복구 분기는 사람 확인을 기다리지 않는 자동 경로여야 합니다. 감지 신뢰도가 낮거나 빈 배열이 돌아오면 직전 턴의 언어를 유지한 채 "계속 한국어로 진행할까요?" 같은 확인 질문을 한 번 삽입합니다. 같은 세션에서 전환 시도가 연속 2회를 넘으면 자동 전환을 잠그고 상담원에게 넘기며, 확인 질문 자체도 전환 후보 언어로 내보내 사용자가 질문 의도를 오해하지 않게 합니다.

운영 체크리스트에는 로그 필드부터 못박습니다. 감지 언어 코드, 신뢰도 또는 빈 배열 여부, 전환 촉발 구간, 확인 질문 발생 여부, 최종 확정 언어를 세션마다 남겨야 오전환 구간을 사후 재생할 수 있습니다. 배포 전 테스트에는 고유명사 섞인 발화, 억양 강한 발화, 코드스위칭 발화를 별도 트랙으로 넣고, PII 마스킹 정규식도 전화번호·주민등록 형식이 언어마다 달라 분리 설계합니다.

지속 개선 루프는 주간 단위로 오전환 로그를 모아 촉발 고유명사 목록을 만드는 데서 시작합니다. 이 목록을 컨텍스트 힌트로 시스템 프롬프트에 주입하면 같은 이름으로 인한 재발을 줄일 수 있습니다. 신규 지원 언어를 추가할 때마다 회귀 테스트 세트에 그 언어의 코드스위칭 시나리오를 더해, 지원 언어가 늘어날수록 검증 범위도 함께 넓히는 것이 원칙입니다.

콜봇 팀이 오늘 확인할 것

언어 감지 필드는 확정값이 아니라 확률값이므로, 콜봇 루프는 감지·확인·복구 3단계를 명시적 게이트로 두고 오검출 전환율 2% 이하·복귀 1턴 이내를 목표 수치로 삼아야 합니다. 이름 하나로 언어가 바뀌는 사례가 실제 보고된 만큼, 확인 질문과 로그 재생 없이 방치하면 사용자는 원인도 모른 채 상담을 이탈합니다.

참고 링크

Realtime transcription guide — OpenAI

GPT Realtime 2.1 exhibits language drift — OpenAI Developer Community