편집자 노트 · B2B 도입 관점 — 실시간 음성 AI의 성능은 STT 정확도만으로 결정되지 않습니다. 사용자의 발화를 어디까지 하나의 업무 요청으로 인식할 것인지, 즉 발화의 경계를 정확히 판단하는 것이 중요합니다. 고객 상담, 현장 점검, 회의 기록처럼 발화 패턴과 주변 환경이 서로 다른 업무에서는 이 판단이 응답 속도뿐 아니라 요청 누락, 중복 실행, 오처리 위험까지 좌우합니다.
유사한 프로젝트를 검토하는 팀이라면 모델 성능표에 앞서 발화 종료 기준, 중간 전사문의 화면 표시 방식, 확정 전사문만 실행 계층으로 넘기는 원칙을 먼저 합의할 필요가 있습니다. 특히 조회가 아니라 승인·등록·발송처럼 실제 업무를 바꾸는 에이전트라면, 음성 입력을 곧바로 실행하지 않고 사용자가 확정 내용을 확인하거나 취소할 수 있는 단계를 두는 것이 안전합니다.
AI 에이전트가 음성으로 들어온 요청에 답하려면 사용자가 말을 마친 시점을 알아야 합니다. 저희는 실시간 음성 입력을 연결하면서, 말하는 동안에는 인식된 내용을 화면에 보여주고 말이 끝난 뒤에는 요청을 확정해 AI 에이전트가 처리하도록 구성했습니다.
텍스트에는 전송 버튼이 있었습니다
저희가 개발하는 XGEN은 사용자의 요청에 따라 질문에 답하거나 문서를 요약하는 등의 작업을 수행하는 AI 에이전트 서비스입니다. 사용자가 텍스트로 요청을 작성해 보내면 AI 에이전트가 내용을 받아 처리하고 결과를 돌려줍니다.
이 흐름에서 전송 버튼은 요청의 끝을 알려줍니다. 사용자는 내용을 모두 작성한 뒤 버튼을 누르고, AI 에이전트는 전송된 내용을 하나의 요청으로 받아들입니다. 사용자가 글을 쓰는 동안에는 기다리고, 전송한 뒤에 작업이 시작됩니다.
저희는 이 텍스트 입력에 이어 음성으로도 요청할 수 있도록 기능을 넓혔습니다. 음성을 텍스트로 바꾸면 AI 에이전트가 기존과 같은 방식으로 내용을 처리할 수 있었습니다. 다만 녹음된 파일을 받는 경우와 사용자의 말을 실시간으로 받는 경우에는 차이가 있었습니다.
녹음된 음성 파일은 끝이 정해져 있었습니다
음성을 텍스트로 바꾸는 기술을 STT(Speech-to-Text)라고 하며, 음성을 글자로 옮기는 과정을 전사라고 합니다. 저희가 먼저 적용한 음성 파일 전사는 이미 녹음이 끝난 데이터를 대상으로 했습니다.
사용자가 음성 파일을 업로드하면 파일 전체를 전사하고, 완성된 전사문을 워크플로우에 전달합니다. AI 에이전트는 이 내용을 바탕으로 요약이나 정보 추출 같은 작업을 수행하게 됩니다.
파일에는 처리할 음성의 범위가 정해져 있습니다. 전체 내용을 텍스트로 바꾼 뒤 AI 에이전트에게 넘기면 됩니다. 녹음한 사람이 말을 더 이어갈지, 지금 답변을 시작해도 될지는 별도로 판단할 필요가 없었습니다.
실시간 음성에서는 잠깐의 쉼도 판단이 필요했습니다
실시간으로 말을 받아 처리할 때는 입력이 어디서 끝나는지 바로 알 수 없습니다. 사용자가 “내일 서울”까지 말했을 때, 요청이 여기서 끝난 것인지 “내일 서울 날씨를 알려줘”라고 계속 말할 것인지 아직 알 수 없기 때문입니다.
잠깐의 침묵도 여러 의미를 가질 수 있습니다. 말을 마친 것일 수도 있고, 다음 단어를 생각하거나 숨을 고르는 중일 수도 있습니다. 짧은 쉼마다 요청을 확정하면 사용자가 말을 마치기도 전에 처리를 시작하고, 너무 오래 기다리면 답변이 늦어집니다.
말하는 동안 화면에 무엇을 보여줄지도 중요했습니다. 아무것도 나타나지 않으면 사용자는 자신의 음성이 제대로 들어가고 있는지 알기 어렵습니다. 반대로 인식된 문장이 바뀔 때마다 AI 에이전트에 전달하면, 아직 끝나지 않은 말을 여러 요청으로 처리하게 됩니다.
그래서 사용자가 말하는 동안에는 인식 결과를 화면에 보여주고, AI 에이전트에는 말이 끝난 뒤 확정한 내용을 전달하기로 했습니다. 화면에서 입력 상태를 확인하는 시점과 AI 에이전트가 요청을 처리하는 시점을 나눈 것입니다.
기존 STT 모델에 실시간 음성을 처리하는 계층을 더했습니다
이 동작을 구현하려면 계속 들어오는 음성 조각을 모으면서 전사를 요청하고, 말이 끝났는지도 판단해야 했습니다. 파일 전사에 사용하던 STT 모델은 전달받은 오디오를 텍스트로 바꾸는 역할을 했으므로, 이 처리는 모델 앞에 별도로 구성해야 했습니다.
실시간 음성 전용 모델을 따로 운영하는 방법도 있었습니다. 하지만 파일 전사용 모델과 실시간 전사용 모델을 각각 운영하면 GPU 자원이 제한된 환경에서 부담이 커집니다. 배포와 장애 대응도 모델마다 준비해야 했습니다.
저희는 기존 STT 모델을 함께 사용하고, 그 앞에 실시간 오디오를 관리하는 스트림 처리 계층을 만들었습니다. 이 계층은 들어오는 오디오를 30ms 단위로 나눠 소리 크기와 파형 변화를 살펴봅니다. 주변 소음 수준을 반영해 사용자가 말하기 시작한 시점과 말을 마친 시점을 판단합니다.
사용자가 말하는 동안에는 오디오를 임시 저장 공간인 버퍼에 모읍니다. 그리고 그때까지 모인 구간을 기존 STT 모델로 반복 전사합니다. 새 결과가 나오면 화면에 보이던 문장을 최신 결과로 바꿉니다. 뒤에 들어온 음성이 반영되면서 단어가 더해지거나 앞서 보인 표현이 수정되기도 합니다.
사용자는 화면을 보며 자신의 말이 어떻게 인식되고 있는지 확인할 수 있습니다. 이때의 문장은 아직 AI 에이전트에 전달되지 않은 중간 결과입니다.
STT 모델은 오디오를 전사하고, 스트림 처리 계층은 오디오를 모아 전사를 요청하며 말의 시작과 끝을 판단합니다. 역할을 이렇게 나눠 파일 전사에 쓰던 모델로 실시간 음성 입력도 처리할 수 있었습니다.
말이 끝나면 AI 에이전트가 요청을 처리합니다
사용자가 말을 마쳤다고 판단하면, 현재 버퍼에 모인 오디오를 마지막으로 전사하고 사용자가 말한 내용을 하나의 전사문으로 확정합니다.
AI 에이전트는 이 전사문을 받아 요청을 처리합니다. 말하는 도중의 중간 결과로 답변을 시작하면 사용자가 뒤에 덧붙인 내용을 놓칠 수 있으므로, 말이 끝난 뒤 확정된 내용을 전달하도록 했습니다.
말하는 동안 → 인식된 내용을 화면에 표시
말을 마친 뒤 → 전사문 확정 → AI 에이전트가 요청 처리 → 결과 반환
확정된 전사문은 사용자가 직접 입력해 보낸 텍스트와 같은 형태로 전달됩니다. 덕분에 기존 AI 에이전트가 요청을 처리하는 흐름을 음성 입력에서도 활용할 수 있었습니다. 텍스트에서는 전송 버튼을 누른 뒤 시작하던 처리가, 실시간 음성에서는 발화가 끝난 뒤 시작됩니다.
실시간 처리 계층이 전송 버튼을 대신했습니다
텍스트에서는 사용자가 전송 버튼을 눌러 요청을 마칩니다. 실시간 음성에서는 저희가 추가한 처리 계층이 그 역할을 맡았습니다. 들어오는 음성을 모아 전사 결과를 화면에 보여주고, 사용자가 말을 마쳤다고 판단하면 전사문을 확정해 AI 에이전트에게 전달합니다.
이 구조 덕분에 기존 STT 모델과 AI 에이전트의 처리 흐름을 활용하면서 실시간 음성 입력을 지원할 수 있었습니다. 사용자는 말하는 동안 자신의 음성이 어떻게 인식되는지 확인하고, 말을 마치면 전송 버튼을 누르지 않아도 답변을 받을 수 있습니다.
실시간 처리 계층은 계속 들어오는 음성과 완성된 요청을 받아야 하는 AI 에이전트 사이를 연결했습니다. 저희는 이 계층에서 요청을 전달할 시점을 정함으로써, 텍스트로 요청하고 답변받던 흐름을 말로 이어갈 수 있게 되었습니다.
유사한 B2B 프로젝트라면 운영 기준부터 설계해야 합니다
이 구조를 실제 고객 환경에 적용한다면 하나의 침묵 시간을 모든 사용자와 환경에 일괄 적용하기는 어렵습니다. 조용한 사무실과 이동이 많은 현장, 여러 사람의 음성이 섞이는 상담 창구는 소음 수준뿐 아니라 말하는 속도와 발화 간격도 다르기 때문입니다.
따라서 단순한 평균 인식률보다 업무별 **‘발화 종료 오판율’**과 사용자가 체감하는 **‘확정 대기 시간’**을 함께 측정하는 것이 중요합니다.
운영 단계에서는 크게 네 가지 기준을 관리할 수 있습니다.
- 입력 품질 — 업무 용어·고유명사·숫자·날짜 등이 정확하게 전사되는가
- 경계 품질 — 생각하기 위해 잠시 멈춘 것을 발화 종료로 오인하지 않는가. 반대로 발화가 끝났는데도 불필요하게 기다리지는 않는가
- 실행 안전성 — 아직 확정되지 않은 중간 전사문이 실제 업무로 실행되지 않으며, 확정·취소·재입력 경로가 명확한가
- 운영 가능성 — 사용자와 환경별 오류·지연을 추적하고, 데이터를 근거로 임계값을 조정할 수 있는가
PoC 역시 조용한 환경에서 정해진 문장을 정확하게 읽는 테스트만으로는 충분하지 않습니다. 말을 하다가 고치거나, 생각하기 위해 잠시 멈추거나, 주변 소음과 다른 사람의 음성이 섞이는 실제 업무 상황을 함께 시험해야 합니다.
결국 음성 인터페이스의 완성도는 가장 잘 알아들은 문장에서 드러나는 것이 아니라, 애매한 입력을 얼마나 정확하게 구분하고 안전하게 처리하느냐에서 드러납니다.

