콤퓨타지식 음성 AI는 어떻게 기기를 제어할까? 음성 인식부터 도구 호출까지
말의 끝을 판단하고 요청을 실행 명령으로 바꾸는 과정, 실제 동작과 결과 확인까지 살펴보는 음성 AI의 작동 원리
페이지 정보
본문
작성일
KNOWLEDGE / TIMELESS KNOWLEDGE BASE

“거실 에어컨을 24도로 맞춰줘.” 사용자는 기기의 이름과 원하는 상태를 말한다. 시스템이 이 요청을 처리하려면 ‘거실 에어컨’에 해당하는 실제 기기를 찾고, 24도라는 값을 그 기기가 받아들일 수 있는 명령으로 바꿔야 한다. 이어서 명령을 전달하고 결과를 확인한 뒤, 어디까지 처리됐는지 알려줘야 한다.
사용자에게는 하나의 대화처럼 보이지만, 시스템 안에서는 소리와 언어, 데이터와 기기 상태가 연결된다. 그중 어느 연결이 잘못되느냐에 따라 오류도 달라진다. 다른 방의 기기가 동작하는 문제와 올바른 기기가 연결되지 않는 문제, 실행되지 않았는데 완료했다고 답하는 문제는 서로 다른 원인을 갖는다.
이 글은 한 문장의 요청이 실제 동작으로 이어지는 과정을 따라가며 음성 AI의 구조를 설명한다. 먼저 음성을 처리하고 발화의 경계를 판단하는 원리를 살펴본 뒤, 요청을 실행 가능한 정보로 구체화하는 방법과 결과를 확인하는 과정을 연결한다. 마지막에는 취소·재시도·처리 위치·품질 평가를 통해 같은 구조가 실제 운영에서 어떻게 달라지는지 살펴본다.
CORE PRINCIPLE / 핵심 원리
음성 AI의 기기 제어는 사용자의 말을 실행 가능한 동작·대상·입력값으로 구체화하고, 연결된 애플리케이션이 이를 실행한 뒤 확인한 결과를 사용자에게 전달하는 과정이다. 말을 정확히 인식하는 것, 요청을 정확히 해석하는 것, 작업을 실제로 완료하는 것은 서로 다른 성공 조건이다.
이 글의 에어컨·조명 사례와 명령 데이터는 원리 설명을 위한 가상 예시다. 특정 제품의 실제 API나 시험 결과를 나타내지 않는다. 실제 구현에서는 일부 과정이 통합되거나 병렬로 진행될 수 있다.
01 / PROCESS
음성 인식과 기기 제어는 어떻게 연결될까
자동 음성 인식(Automatic Speech Recognition, ASR)은 소리를 문자로 바꾸는 기술이다. “거실 에어컨을 24도로 맞춰줘”라는 음성을 같은 내용의 문장으로 변환했다면 받아쓰기는 성공한 셈이다. 그러나 문장 안의 ‘거실 에어컨’이 실제로 어느 기기인지, ‘맞춰줘’가 어떤 기능을 뜻하는지는 추가로 해결해야 한다.
요청을 해석하는 과정에서는 사용자가 원하는 동작과 필요한 정보를 구분한다. 이 예시의 동작은 온도 설정이고, 대상은 거실 에어컨이며, 입력값은 24도다. 이어지는 실행 과정에서는 시스템에 등록된 기기를 찾고, 사용할 수 있는 제어 기능과 허용 범위를 확인한 뒤 명령을 보낸다. 마지막 응답은 이러한 실행의 결과에 근거해야 한다.
Home Assistant의 공식 개발 문서는 음성 파이프라인, 대화 처리, 의도 실행의 역할을 구분한다. 이 구분은 음성 제어를 이해하는 데 유용하지만 모든 제품에 동일한 모듈 구성을 요구하는 것은 아니다. 한 모델이 여러 역할을 함께 처리하더라도, 소리를 이해하는 문제와 외부 상태를 바꾸는 문제는 개념적으로 구분할 수 있다.[3]
| 과정 | 해결할 질문 | 에어컨 사례 |
|---|---|---|
| 입력과 발화 판단 | 어떤 말을 했고, 요청이 끝났는가? | 음성을 받아 정정이나 이어지는 말이 있는지 판단 |
| 요청 해석 | 무엇을 어떤 값으로 바꾸려는가? | 거실 에어컨의 설정 온도를 24도로 변경 |
| 대상 연결과 검증 | 실제 기기와 지원 기능이 있는가? | 등록된 기기·온도 설정 기능·허용 범위 확인 |
| 실행 | 외부 시스템에 명령을 전달했는가? | 애플리케이션이 기기 제어 인터페이스 호출 |
| 결과 확인과 응답 | 어디까지 확인했는가? | 확인된 설정 변경 또는 실패·미확인 상태 안내 |
이 구분은 오류를 찾을 때도 중요하다. 음성은 정확히 인식했는데 다른 방의 기기가 바뀌었다면 대상 연결의 문제일 수 있다. 올바른 명령을 만들었는데 기기가 오프라인이었다면 실행의 문제다. 결과를 확인하지 않고 성공했다고 답했다면 응답을 만드는 기준의 문제다. 이들을 모두 ‘음성 인식이 나빴다’고 설명하면 실제 원인을 놓치게 된다.
02 / ARCHITECTURE
음성 AI가 소리를 처리하는 방식

전체 과정을 이해했다면 첫 번째로 살펴볼 것은 소리가 시스템에 들어오는 방식이다. 음성의 문자 변환(Speech-to-Text, STT), 요청 처리, 문자의 음성 변환(Text-to-Speech, TTS)을 연결하는 연쇄형 구조가 있고, 실시간 모델이 음성을 입력받아 음성으로 출력하는 구조도 있다. OpenAI의 음성 에이전트 가이드는 이러한 구성 경로를 설명한다.[1]
연쇄형에서는 음성 인식 결과가 명시적인 문자로 다음 단계에 전달된다. 개발자는 잘못 들은 문장인지, 올바른 문장을 잘못 해석한 것인지 중간 결과를 보고 살펴볼 수 있다. 각 구성요소를 따로 선택하거나 교체할 수도 있다. 대신 여러 구성요소의 처리 시간과 데이터 전달이 전체 응답 시간에 영향을 줄 수 있다.
직접 음성 입출력형에서는 음성을 받아쓴 문장인 전사문이 외부 처리 흐름의 필수 입력으로 드러나지 않을 수 있다. 그렇다고 문자 정보가 어느 곳에서도 사용되지 않는다는 뜻은 아니다. 전사나 도구 호출 등 함께 제공하는 기능은 모델과 서비스에 따라 다르며, 내부 구현을 사용자 인터페이스만으로 단정할 수 없다.
| 비교 축 | 구분 | 살펴볼 내용 |
|---|---|---|
| 입력과 처리 구성 | 연쇄형 | 음성 인식·요청 처리·음성 합성을 연결하고 중간 문자를 전달 |
| 직접 음성 입출력형 | 실시간 모델의 오디오 입력과 출력을 중심으로 구성 | |
| 듣기와 말하기의 관계 | 전이중 여부 | 음성 입력과 출력을 동시에 처리할 수 있는지, 끼어들기를 어떻게 다루는지 확인 |
전이중(Full-Duplex)은 동시에 듣고 말하는 통신·상호작용 특성이다. 이는 음성을 문자로 바꾸는지와 별개의 문제다. 음성 처리를 구성하는 방식과 대화 차례를 운영하는 방식을 나눠 살펴보면 비교가 명확해진다. 사용자 발화가 시작되면 기존 음성을 멈추는 방식과, 입력·출력을 동시에 처리하는 방식도 구현상 구분할 필요가 있다.
구조의 이름만으로 성능의 우열을 정할 수도 없다. 음성 응답이 빨리 시작되더라도 연결된 기기 제어가 오래 걸릴 수 있고, 모델 처리보다 네트워크 지연이 더 클 수도 있다. 비교할 때는 첫 응답이 나오는 시간과 실제 작업이 끝나는 시간을 분리해야 한다.
03 / TURN DETECTION
AI는 언제 사용자의 말이 끝났다고 판단할까

소리를 처리하는 기능만으로는 언제 요청을 실행해야 하는지 알 수 없다. 시스템은 먼저 어떤 발화를 자신에게 하는 요청으로 받을지, 언제까지 들어야 할지를 결정해야 한다. 깨우는 말(Wake Word)은 시스템을 호출하는 표현이다. 음성 활동 감지(Voice Activity Detection, VAD)는 입력된 소리에 말소리 활동이 있는지 판단한다. 발화 종료 판단(Turn Detection)은 사용자의 차례가 끝나 반응을 시작해도 되는지를 결정한다.[4]
침묵을 기준으로 종료를 판단하는 방식에서는 일정 시간 말소리가 없으면 사용자 차례가 끝났다고 볼 수 있다. 짧게 기다리면 반응이 빨라지는 대신 생각하는 동안의 쉼을 종료로 오인할 가능성이 생긴다. 오래 기다리면 사용자의 말을 더 받아들일 수 있지만 응답이 늦게 느껴질 수 있다. 발화 내용의 완결성을 고려하는 방식도 있으며, 지원 여부와 설정은 서비스에 따라 다르다.[6]
발화 예시
“거실 에어컨… 아니, 침실 에어컨을 꺼줘.”
첫 번째 쉼에서 요청을 완료된 것으로 처리하면 정정 전 대상이 사용될 수 있다. 반대로 문장이 끝난 뒤에도 계속 기다리면 사용자는 요청이 전달되지 않았다고 느낄 수 있다.
이 문제는 마이크의 음질만 높여서는 해결되지 않는다. 모든 단어를 정확히 들어도 사용자가 아직 말을 이어갈지 판단해야 하기 때문이다. 버튼을 누르고 말하는 방식에서는 버튼을 놓는 동작이 종료 신호가 될 수 있고, 대화형 시스템에서는 음향 정보와 발화 내용 등을 활용해 종료를 판단할 수 있다.
화면에 나온 받아쓰기가 확정된 결과는 아닐 수 있다
스트리밍 음성 인식은 문장이 끝나기 전에 부분 결과를 전달할 수 있다. Amazon Transcribe 문서는 뒤의 문맥이 추가되면서 이 결과가 수정될 수 있다고 설명한다. 빠르게 표시되는 문자와 최종적으로 판단에 사용할 문자를 구분해야 하는 이유다.[8]
예를 들어 “에어컨을 켜…”까지 보였는데 뒤에 “지 말아줘”가 이어지면 동작의 의미가 달라진다. 중간 결과로 관련 기기를 찾는 준비 작업과 상태를 실제로 바꾸는 실행은 영향이 다르다. 둘을 분리하는 것은 오류를 줄이기 위한 설계 방법이 될 수 있다. 다만 언제 실행을 허용할지는 작업의 성격과 구현에 따라 정해야 하며, 모든 음성 시스템에 하나의 대기 규칙을 적용할 수는 없다.
04 / INTENT AND TARGET
자연스러운 표현을 실행 가능한 요청으로 바꾸는 과정
요청을 처리할 시점이 정해지면 말의 내용을 실행에 필요한 정보로 바꿔야 한다. 요청의 의도(Intent)는 사용자가 수행하려는 동작이고, 슬롯(Slot)은 그 동작에 필요한 변수다. “거실 에어컨을 24도로 맞춰줘”에서 온도 설정은 의도에, 거실·에어컨·24도는 입력 정보에 해당한다. Alexa의 상호작용 모델도 의도와 슬롯을 구분하고 여러 표현을 같은 요청으로 연결한다.[13]
의도와 입력값을 다루는 기능은 생성형 AI 이전의 음성 시스템에도 존재했다. 생성형 모델을 활용하는 시스템에서는 요청과 이어지는 대화, 제공된 도구 설명 등을 함께 해석하도록 구성할 수 있다. 그러나 표현을 유연하게 이해하는 능력과 실행 정보를 충분히 확보하는 것은 다르다. “좀 시원하게 해줘”라는 말을 이해해도 어떤 기기를 사용할지, 어떤 상태를 목표로 할지는 남아 있다.
시스템이 값을 정하는 근거도 구분해야 한다. 사용자가 이번 문장에서 직접 말한 값인지, 앞선 대화에서 확인된 값인지, 사용자가 지정한 기본 설정인지, 모델이 추정한 값인지에 따라 확실성이 다르다. 불명확한 상태에서 실행하면 같은 문장에 서로 다른 결과가 나올 수 있다.
| 사용자의 표현 | 추가로 해결할 문제 | 가능한 처리 예시 |
|---|---|---|
| “거실 에어컨을 24도로 맞춰줘” | 등록 기기와 온도 단위·지원 범위 연결 | 환경에 설정된 단위와 기기 기능을 검증 |
| “좀 시원하게 해줘” | 기기·장소·목표값이 생략됨 | 확인된 기본 설정을 쓰거나 필요한 정보를 질문 |
| “아까 그거 꺼줘” | 앞선 대화의 어떤 대상을 뜻하는지 모호함 | 대화에서 대상을 찾고 여러 후보면 구체적으로 질문 |
| “거실 것만 꺼줘” | 장소와 기기 종류의 관계를 확인해야 함 | 거실에 속한 기기 중 해당 요청의 대상을 식별 |
문장 안의 이름을 실제 환경의 대상으로 연결하는 것도 별도의 문제다. ‘거실 에어컨’이라는 말이 데이터에서 어떤 기기 식별자를 뜻하는지 알아야 한다. 기기 이름이 중복되거나 사용자가 별명을 쓰면 후보를 좁히는 과정이 필요하다. 문자열을 추출한 것만으로 대상 연결이 끝났다고 볼 수 없다.
확인 질문은 부족한 정보를 정확히 드러내는 방식으로 구성할 수 있다. “무엇을 원하시나요?”보다 “거실 에어컨과 침실 에어컨 중 어느 기기인가요?”가 사용자가 해결해야 할 모호성을 명확하게 보여준다. 이는 모든 명령에 확인 질문을 추가하라는 의미가 아니다. 요청과 환경에서 충분히 결정된 값까지 반복해서 묻는 것은 대화를 불필요하게 길게 만들 수 있다.
05 / FUNCTION CALLING
함수 호출은 실제 실행과 어떻게 이어질까

동작과 대상, 값이 구체화됐다고 기기가 곧바로 움직이는 것은 아니다. 이를 실제 기능에 연결하는 과정이 필요하다. 함수 호출(Function Calling)은 모델이 정의된 함수와 입력값을 선택해 외부 기능과 연결하는 방식이다. 도구 호출(Tool Calling)은 검색·조회·계산·실행 등 외부 기능을 사용하는 더 넓은 표현으로 쓰인다. Gemini의 공식 가이드에서는 애플리케이션이 함수의 이름·설명·입력 구조를 제공하고, 모델이 제안한 호출을 애플리케이션이 실행하며, 그 결과를 다시 모델에 전달한다.[2]
따라서 자연어를 이해하는 모델과 기기 제어 인터페이스(Application Programming Interface, API)를 호출하는 애플리케이션의 책임을 분리해서 봐야 한다. 모델이 ‘온도 설정’ 기능을 선택했다는 사실은 실제 기기의 온도가 바뀌었다는 사실이 아니다. 애플리케이션은 호출을 받아 자신의 실행 규칙에 따라 검사하고 전달해야 한다.
{
"tool": "set_temperature",
"arguments": {
"device_id": "living_room_ac",
"temperature": 24,
"unit": "celsius"
}
}
위 데이터는 역할을 설명하기 위한 가상 형식이다. 특정 업체의 SDK나 기기 API에 그대로 사용할 수 있는 코드가 아니다.
이 명령에는 세 가지 중요한 값이 담겨 있다. 기기 식별자는 실행 대상을, 온도는 목표 설정값을, 단위는 숫자의 해석 방법을 정한다. 설명에 필요한 정보가 분리돼 있으므로 애플리케이션은 누락된 항목이나 잘못된 자료형을 검사할 수 있다. 그러나 형식이 맞는 것만으로 실제 환경에서 유효한 요청이 되지는 않는다.
구조화 출력(Structured Output)은 정해진 데이터 형식에 맞는 결과를 얻는 데 쓰인다. 예를 들어 온도를 숫자로 받고 기기 식별자를 문자열로 받도록 정의할 수 있다.[14] 그와 별개로 해당 식별자의 기기가 존재하는지, 온도 설정을 지원하는지, 값이 허용 범위에 있는지, 사용자가 실행할 권한이 있는지는 애플리케이션의 데이터와 규칙으로 확인해야 한다.
모델에 어떤 기능을 제공하는지도 해석에 영향을 준다. 읽기 전용 조회와 상태를 바꾸는 실행을 명확하게 구분하고, 필요한 입력값과 기능의 의미를 설명해야 한다. 이름만 다른 비슷한 기능이 많으면 선택이 모호해질 수 있다. 여기서 설명하는 검증은 실행 연결의 문제이며, 실행 환경 자체의 격리 원리는 AI 에이전트 샌드박스 글에서 따로 다룬다.
06 / RESULT VERIFICATION
명령을 보낸 뒤 무엇을 확인해야 할까

명령을 전달한 다음에는 결과를 해석해야 한다. 서버가 요청을 받았다는 응답, 실행이 완료됐다는 응답, 기기의 상태를 조회한 결과는 의미가 다를 수 있다. 예를 들어 비동기 작업에서는 요청을 먼저 접수하고 실제 처리를 나중에 수행할 수 있다. 이때 접수 응답을 완료로 해석하면 사용자가 듣는 안내와 기기의 상태 사이에 차이가 생긴다.
성공 조건도 요청에 맞게 정해야 한다. 에어컨 설정을 바꾸는 작업이라면 설정값의 변경이 조건이 될 수 있고, 특정 실내 온도에 도달했는지 묻는 요청이라면 온도 측정값이 필요하다. 무엇을 확인할지 정하기 전에 단순히 ‘성공’이라는 상태만 붙이면 서로 다른 결과를 같은 의미로 취급하게 된다.
Home Assistant의 대화 API는 작업 완료·조회 응답·오류를 구분하며, 요청의 성공 대상과 실패 대상을 표현할 수 있다.[5] 이를 통해 여러 기기를 함께 제어할 때 전체 성공과 일부 성공을 나눠 이해할 수 있다. 아래 표는 원리 설명을 위한 결과 분류이며, 모든 API가 사용하는 공통 상태 코드는 아니다.
| 확인한 범위 | 의미 | 응답 예시 |
|---|---|---|
| 요청 접수 | 요청을 받았지만 완료 여부는 아직 모름 | “온도 변경을 요청했어요.” |
| 처리 진행 | 작업 또는 결과 확인이 진행 중임 | “설정 변경이 완료됐는지 확인하고 있어요.” |
| 확인된 성공 | 정의된 성공 조건을 확인함 | “거실 에어컨 설정 온도를 24도로 바꿨어요.” |
| 일부 성공 | 여러 대상 중 일부만 성공함 | “조명 두 개는 껐지만 한 개는 연결되지 않았어요.” |
| 실패 | 실행할 수 없거나 실행 실패가 확인됨 | “기기가 오프라인이라 변경하지 못했어요.” |
| 확인 불가 | 현재 결과를 결정할 정보가 부족함 | “요청은 보냈지만 현재 설정값을 확인하지 못했어요.” |
에어컨 예시에서는 설정 온도와 현재 실내 온도를 구분해야 한다. 설정값이 24도로 바뀌었다고 해서 방이 이미 24도가 된 것은 아니다. 앞의 결과는 제어 설정의 변경이고, 뒤의 결과는 물리적인 환경의 변화다. “24도로 설정했어요”와 “방 온도가 24도예요”는 서로 다른 확인 근거가 필요한 문장이다.
상태 정보가 어디에서 오는지도 중요하다. Google Home의 Report State는 연동 시스템이 기기의 상태를 보고해 저장된 정보를 갱신하는 구조이며, 보고한 상태와 조회한 상태 사이의 불일치를 다룬다.[12] 저장된 상태를 활용하는 시스템에서는 정보의 최신성과 갱신 실패가 결과 해석에 영향을 줄 수 있다.
이를 종합하면, 상태 조회를 한 번 추가했다고 모든 결과가 완전히 검증되는 것은 아니다. 조회 정보가 명령의 접수 상태인지, 기기가 보고한 설정값인지, 별도 센서가 측정한 물리 상태인지 구분해야 한다. 시스템은 확인하지 못한 사실까지 완료 응답에 포함하지 않도록 구성해야 한다.
실행 과정을 화면에 전달하는 방법과 결과 자체의 의미도 구별된다. AG-UI 같은 상호작용 규격으로 진행 상황을 표시하더라도, 실제 기기가 동작했는지 판단하는 근거는 연결된 실행 시스템에서 마련해야 한다.
07 / INTERRUPTION AND RETRY
말을 정정하거나 취소하면 어떻게 될까

사용자는 AI가 답하는 동안 말을 끊거나 요청을 바꿀 수 있다. 실시간 음성 시스템은 이러한 끼어들기(Barge-In)를 처리하면서 진행 중인 음성 응답을 중단할 수 있다. OpenAI의 실시간 대화 문서는 응답 취소와 사용자가 듣지 않은 음성 부분을 대화 기록에서 처리하는 방식을 설명한다.[7]
하지만 음성 출력과 외부 작업은 서로 다른 흐름이다. 다음 구분은 응답 취소 기능과 외부 실행 구조를 연결한 설계상의 해석이다. AI가 말을 멈춘 것만으로 이미 기기에 전달한 명령이 자동으로 취소되거나 되돌아간다고 볼 수는 없다.
| 시점 | 처리할 문제 | 에어컨 사례 |
|---|---|---|
| 실행 전 | 아직 전달하지 않은 요청을 중단할 수 있는가? | 온도 변경 명령을 보내기 전에 취소 |
| 실행 중 | 연결 기능에 작업 취소 수단이 있는가? | 진행 중인 요청을 취소할 수 있는지 API에서 확인 |
| 실행 후 | 이전 상태로 되돌리는 별도 작업이 가능한가? | 기존 설정값을 알고 있다면 복원 요청 검토 |
| 음성 응답 중 | 대답의 재생을 중단하고 새 요청을 받을 것인가? | 안내 음성을 멈춤. 기기 동작의 취소와는 별도 |
“24도로 맞춰줘” 뒤에 “아니, 26도로”가 이어지면 어떤 요청이 이미 실행됐는지 알아야 한다. 첫 명령을 아직 보내지 않았다면 새 값으로 대체할 수 있지만, 이미 보냈다면 두 번째 명령의 실행 순서와 결과를 관리해야 한다. 정정된 문장을 대화 기록에 반영하는 일과 기기의 최종 상태를 맞추는 일은 함께 해결해야 한다.
두 요청을 동시에 처리하는 구현에서는 나중에 도착한 결과가 사용자의 마지막 의도와 같은지도 확인해야 한다. 새 명령을 보냈다는 사실만으로 오래된 작업의 영향을 제거할 수는 없다. 작업마다 식별자와 상태를 연결해 두면 어떤 요청의 응답인지 구분할 수 있고, 순차 처리나 이전 요청 취소 같은 정책을 해당 기능의 특성에 맞춰 적용할 수 있다.
응답을 받지 못했다고 실행되지 않은 것은 아니다
연결이 끊기거나 시간 초과가 발생하면 시스템은 작업 결과를 모를 수 있다. 명령이 서버에 도달하지 않았을 수도 있지만, 기기가 동작한 뒤 응답만 유실됐을 수도 있다. 이 상태에서 같은 명령을 다시 보내면 중복 실행이 발생할 가능성이 있다.
멱등성(Idempotency)은 같은 작업을 반복해도 정의된 효과가 반복해서 추가되지 않는 성질이다. Stripe는 동일 요청의 재시도를 식별하는 멱등성 키를 제공해 중복 작업을 방지하는 실제 API 사례를 보여준다.[11] 기기 제어에도 중복 방지와 재시도 설계가 중요하지만, Stripe의 기능이 모든 기기 API에 제공되는 것은 아니다.
“24도로 설정”과 “2도 내려”를 비교하면 차이가 보인다. 후자를 두 번 실행하면 설정값이 누적해서 바뀔 수 있다. 같은 값으로 설정하는 명령도 부수효과까지 모두 안전하게 반복된다고 단정할 수는 없다. 재시도 여부는 요청 식별자, 처리 기록, 현재 상태와 해당 API의 동작 계약을 함께 보고 결정해야 한다.
08 / LOCAL AND CLOUD
온디바이스와 클라우드는 어디에서 나뉠까
온디바이스(On-Device)는 해당 처리를 기기 안에서 수행한다는 의미다. 그러나 마이크가 기기에 붙어 있거나 호출어를 기기에서 감지한다는 사실만으로 전체 음성 AI가 로컬에서 작동한다고 볼 수 없다. 음성 입력부터 실제 기기 제어까지 각 단계의 처리 위치를 살펴봐야 한다.
Home Assistant는 음성 인식·대화 처리·음성 합성 등을 로컬로 구성하는 경로를 안내한다.[9] 여기서 로컬 처리는 반드시 작은 기기 하나 안에서 모든 기능을 수행한다는 뜻은 아니다. 집 안의 다른 서버를 활용하는 구성도 로컬 환경에 포함될 수 있다. 기기 내부 처리와 로컬 네트워크 처리를 구분하면 데이터 이동 경로를 더 정확히 이해할 수 있다.
| 단계 | 확인할 내용 | 가능한 혼합 구성 예시 |
|---|---|---|
| 호출과 오디오 수집 | 언제 수집을 시작하고 어디로 전달하는가? | 호출어 감지는 기기에서 수행 |
| 음성 인식 | 오디오를 어느 시스템에서 처리하는가? | 집 안 서버에서 문자 변환 |
| 요청 해석 | 대화와 요청 정보를 어디에서 처리하는가? | 외부 모델 서비스로 요청 전달 |
| 기기 제어 | 명령을 로컬로 전달하는가, 제조사 서버를 거치는가? | 제조사 클라우드를 통해 실행 |
| 음성 응답 | 음성을 어디에서 만들고 재생하는가? | 로컬 합성기로 응답 생성 |
표는 단계별 조합을 설명하기 위한 예시이며, 특정 제품의 실제 구성이나 권장 구성을 뜻하지 않는다.
인터넷 없이 작동하는 범위도 같은 방식으로 판단할 수 있다. 음성을 로컬에서 인식해도 기기 제어가 제조사 클라우드에 의존하면 연결이 끊긴 상태에서 해당 작업을 수행하지 못할 수 있다. 반대로 기기 제어가 로컬이어도 외부 정보를 조회하는 요청은 인터넷이 필요할 수 있다.
처리 위치를 비교할 때는 연결 의존성, 지연, 지원 기능, 필요한 자원, 데이터 이동을 함께 살펴봐야 한다. 로컬이라는 단어만으로 모든 데이터가 저장되지 않는다거나 보안 문제가 없다고 결론 내릴 수는 없다. 보관·전송·접근 정책은 실제 구현과 서비스 정책에 따라 확인해야 한다.
09 / EVALUATION
음성 AI의 품질은 무엇으로 평가할까
음성 AI의 품질은 받아쓰기 정확도와 작업 수행 품질을 나눠 평가해야 한다. 단어 오류율(Word Error Rate, WER)은 기준 문장에 비해 대체·삭제·삽입된 단어 수를 기준 문장의 단어 수로 나눈 값이다. AWS의 음성 인식 설명도 이 정의와 함께 입력 조건에 따른 인식의 차이를 다룬다.[10]
하지만 단어 오류의 개수가 같아도 작업에 미치는 영향은 다를 수 있다. ‘거실’을 ‘침실’로 인식한 오류는 대상 기기를 바꾼다. 숫자나 부정 표현을 틀리면 설정값이나 실행 여부가 달라질 수 있다. 반면 표현이 달라도 요청의 의미가 유지되는 경우도 있다. 받아쓰기 점수만으로 기기 제어의 성공률을 대신할 수 없는 이유다.
아래 표는 음성 제어의 품질을 나눠 살펴보기 위한 평가 항목이다. 특정 서비스의 공식 종합 점수나 모든 시스템에 적용되는 합격 기준은 아니다. 실제 측정에서는 성공의 정의, 비교 조건, 실패의 분류를 먼저 정해야 한다.
| 항목 | 측정하거나 확인할 내용 | 대표 오류 |
|---|---|---|
| 인식 품질 | 기준 문장과 인식 결과의 차이 | 기기명·숫자·부정 표현의 오인식 |
| 대상과 값의 정확성 | 정답 기기·동작·값과 선택 결과의 일치 | 다른 방의 에어컨, 잘못된 단위 |
| 발화 종료 판단 | 성급한 처리와 불필요한 대기 | 정정 전에 명령 실행 |
| 첫 반응 지연 | 정해진 입력 기준점부터 첫 음성 반응까지의 시간 | 응답 시작이 지나치게 늦음 |
| 작업 완료 지연 | 정해진 기준점부터 결과 확인까지의 시간 | 접수 안내는 빠르지만 실행 결과가 늦음 |
| 작업 성공 | 요청에 정의한 완료 조건의 충족 | 일부 대상만 실행, 원하는 설정 미반영 |
| 잘못된 실행 | 의도하지 않은 상태 변경의 발생 | 배경 대화를 명령으로 처리 |
| 응답과 결과의 일치 | 안내한 결과가 실제 확인 내용과 같은지 | 실패·미확인 상태를 성공으로 안내 |
시간을 측정할 때도 기준점을 통일해야 한다. 사용자가 말을 시작한 시점부터 재는지, 말을 마친 시점부터 재는지에 따라 같은 시스템의 수치가 달라진다. 첫 음성 응답이 접수 안내인지 실제 완료 안내인지도 구분해야 한다. 하나의 ‘응답 속도’ 수치로 모든 상호작용을 비교하면 빠른 안내와 빠른 실행을 혼동할 수 있다.
평가용 요청에는 명확한 문장뿐 아니라 자기 정정, 생략된 대상, 여러 기기, 오프라인 상태, 응답 유실 같은 조건도 포함할 수 있다. 같은 시나리오를 반복하면 우연히 성공한 사례와 일관되게 처리되는 동작을 구분하는 데 도움이 된다. 한국어 받아쓰기를 비교할 때는 띄어쓰기와 숫자 표기 등 전처리 기준도 일정하게 맞춰야 한다.
하나의 시험 요청을 나눠 기록하는 예시
요청: “거실 에어컨을 24도로 맞춰줘.”
인식 문장은 맞았는가? 실제 거실 기기를 선택했는가? 설정값과 단위를 정확히 전달했는가? 실행 결과를 확인했는가? 마지막 안내가 그 결과와 일치했는가?
이 질문들을 나누면 실패한 위치가 드러난다. 인식 정확도가 높더라도 결과 확인이 빠진 시스템을 작업 수행까지 우수하다고 평가할 수는 없다.
THE TAKEAWAY / 핵심 정리
“거실 에어컨을 24도로 맞춰줘”라는 요청을 처리하려면 말의 경계를 판단하고, 의미를 구체화하며, 실제 대상과 기능에 연결하고, 실행 결과를 확인해야 한다. 이 과정에서 음성 모델, 애플리케이션, 기기 연동 시스템은 각자 다른 역할을 맡는다.
음성 제어의 성공은 이해한 문장과 실행한 동작, 사용자에게 알린 결과가 서로 일치하는지로 판단해야 한다. 무엇을 들었는지, 무엇을 실행했는지, 어디까지 확인했는지를 나누면 음성 AI의 구조와 오류를 더 정확하게 이해할 수 있다.
FAQ / 자주 묻는 질문
음성 AI 기기 제어에 관한 질문
음성 AI는 어떻게 기기를 제어하나요?
음성 요청을 동작·대상·입력값으로 구체화하고, 연결된 애플리케이션이 기기 기능을 호출한다. 이후 실행 응답이나 상태 정보를 바탕으로 확인된 결과를 사용자에게 전달한다. 구체적인 처리 구조는 서비스에 따라 다르다.
음성 인식이 정확하면 기기 제어도 정확한가요?
정확한 받아쓰기는 전체 과정의 일부다. 대상 연결, 입력값 검증, 실행, 결과 확인 중 어느 단계에서도 오류가 생길 수 있다. 인식 정확도와 실제 작업 성공을 따로 평가해야 한다.
모든 음성 AI가 먼저 음성을 문자로 바꾸나요?
문자 변환을 거쳐 요청을 처리하는 연쇄형과 음성을 직접 입출력하는 구조가 있다. 별도의 전사문이 모든 시스템의 필수 중간 입력인 것은 아니다.
함수 호출은 모델이 기기를 직접 움직인다는 뜻인가요?
대표적인 함수 호출 구조에서는 모델이 함수와 인자를 제안하고 애플리케이션이 실제 실행을 담당한다. 호출 정보 생성과 실행 성공은 별도로 확인해야 한다.
“취소해”라고 말하면 이미 실행한 작업이 되돌아가나요?
음성 응답 중단과 작업의 취소·되돌리기는 다르다. 작업이 어느 단계에 있는지와 연결 기능이 취소나 복원을 지원하는지에 따라 결과가 달라진다.
온디바이스 음성 AI는 인터넷 없이 모든 기능을 사용할 수 있나요?
전체 처리 경로에 따라 다르다. 음성 인식이 로컬이어도 기기 제어나 외부 정보 조회가 클라우드에 의존할 수 있다. 단계별 처리 위치와 연결 의존성을 확인해야 한다.
GLOSSARY / 용어집
본문의 주요 용어
- 자동 음성 인식(Automatic Speech Recognition, ASR)
- 입력된 소리에서 말의 내용을 인식해 문자로 표현하는 기술.
- 음성의 문자 변환(Speech-to-Text, STT)
- 음성을 문자로 바꾸는 기능을 가리키는 표현. 본문에서는 연쇄형 시스템의 입력 변환 단계에 사용한다.
- 문자의 음성 변환(Text-to-Speech, TTS)
- 문자로 작성된 응답을 재생할 수 있는 음성으로 만드는 기능.
- 음성 활동 감지(Voice Activity Detection, VAD)
- 입력된 오디오에 말소리 활동이 있는지 판단하는 기술.
- 발화 종료 판단(Turn Detection)
- 사용자의 말이 끝나 시스템이 다음 반응을 시작할 수 있는지 판단하는 과정.
- 전이중(Full-Duplex)
- 입력과 출력을 동시에 처리하는 특성. 음성 시스템에서는 동시에 듣고 말하는 동작과 관련된다.
- 의도(Intent)와 슬롯(Slot)
- 의도는 사용자가 원하는 동작이고, 슬롯은 동작에 필요한 대상·장소·수치 등의 변수.
- 함수 호출(Function Calling)
- 정의된 함수와 입력값을 모델이 선택·제안해 애플리케이션의 외부 기능에 연결하는 방식.
- 구조화 출력(Structured Output)
- 미리 정한 데이터 형식에 맞춰 출력하는 방식. 실제 기기의 존재나 실행 가능 여부는 별도로 검증해야 한다.
- 끼어들기(Barge-In)
- 시스템이 응답하는 동안 사용자가 새 발화를 시작하는 상황과 그 처리.
- 멱등성(Idempotency)
- 같은 작업을 반복해도 정의된 효과가 반복해서 추가되지 않는 성질. 재시도와 중복 실행을 다룰 때 중요하다.
- 온디바이스(On-Device)
- 해당 처리를 기기 내부에서 수행하는 방식. 시스템 전체의 처리 위치는 단계별로 확인해야 한다.
REFERENCES / 참고 자료
공식 문서와 관련 읽을거리
각 문서는 해당 서비스의 구조를 설명하는 1차 자료다. 사례의 세부 기능을 모든 음성 AI의 공통 기능으로 일반화하지 않는다. 취소·검증·평가에 관한 일부 설명은 문서의 구조를 연결한 기술적 해석이며, 본문의 표와 가상 사례는 이해를 돕기 위한 종합 설명이다.
- OpenAI — Voice agents
음성 에이전트의 구성 경로와 시스템 설계. - Google — Gemini Function calling
함수 정의, 모델의 호출 제안, 애플리케이션 실행과 결과 전달. - Home Assistant — Voice overview
음성 파이프라인·대화 처리·의도 실행의 역할. - Home Assistant — Assist pipelines
호출과 음성 처리 단계 및 이벤트. - Home Assistant — Conversation API
작업·조회·오류 응답과 성공·실패 대상. - OpenAI — Voice activity detection
침묵 및 발화 내용을 고려하는 종료 판단. - OpenAI — Realtime conversations
끼어들기, 응답 취소와 음성 재생 기록 처리. - AWS — Streaming and partial results
부분 인식 결과의 수정과 안정화. - Home Assistant — Local voice assistant
로컬 음성 처리 구성과 구성요소 선택. - AWS — Transcribe responsible AI service card
단어 오류율과 음성 인식의 평가 조건. - Stripe — Idempotent requests
멱등성 키를 통한 재시도와 중복 작업 방지의 API 사례. - Google Home — Report State
기기 상태 보고와 조회, 상태 불일치. - Amazon Alexa — Voice interaction models
의도·슬롯과 다양한 발화의 연결. - Google — Structured outputs
정해진 데이터 형식의 출력.
함께 읽기: AG-UI란? AI Agent와 사용자 화면이 통신하는 원리와 구조 · AI 에이전트 샌드박스란? 실행 권한을 격리하는 보안 기술
- 이전글npm 배포 정책 변경, 소프트웨어 공급망 보안 강화 26.10.06
- 다음글자동차·가전·안경으로 확장되는 생성형 AI, 최근 발표로 본 생활형 디바이스의 변화 26.10.01
