음성 AI 에이전트
Nova Sonic Speech-to-Speech, BidiAgent, WebRTC
음성 AI 에이전트
Nova Sonic Speech-to-Speech, BidiAgent, WebRTC
에이전트와 대화한다 — 목소리로
Speech-to-Speech 양방향 음성 에이전트 — 텍스트 변환 없는 직접 처리
음성 AI 개요
Speech-to-Speech · 파이프라인 비교 · 아키텍처
Speech-to-Speech
텍스트 변환 없이 음성을 직접 이해하고 음성으로 응답하는 네이티브 처리
Speech-to-Speech
음성 입력을 모델이 직접 이해하고 음성 토큰으로 응답합니다 — End-to-end 단일 모델
- TTFA 평균 ~1.09초
- 감정·억양 등 파라언어 정보 보존
- 단일 API 호출로 전체 처리 완결
- WebRTC 양방향 스트림 + 도구 결합
STT → LLM → TTS 3단계는 레이턴시가 누적되고 톤·감정이 소실됩니다 — 네이티브 음성 모델이 두 문제를 동시에 해결합니다.
Speech-to-Speech vs 기존 파이프라인
3단계 변환의 레이턴시 누적·감정 소실 vs 단일 모델의 직접 처리 — 두 방식의 구조적 차이
STT → LLM → TTS
기존 3단계 파이프라인
- 음성 → 텍스트 변환(STT) → LLM 추론 → 텍스트 → 음성 합성(TTS)
- 각 단계마다 레이턴시가 수 초 누적 (OpenAI 구 Voice Mode 공표 평균 2.8~5.4초)
- 비언어적 정보(톤, 감정, 억양) 소실
- 각 컴포넌트를 개별 관리·비용 분리 필요
STT가 음성을 텍스트로 변환하면서 감정·톤 정보를 버립니다. LLM은 텍스트만 보고 추론하므로 "화난 목소리로 불만 접수"와 "차분한 질문"을 구분할 수 없습니다.
Speech-to-Speech
네이티브 음성 모델
- 음성 입력 → 모델이 직접 이해 → 음성 출력
- End-to-end 단일 모델 — TTFA 평균 ~1.09초
- 감정·억양·속도 등 파라언어 정보 보존
- 단일 API 호출로 전체 처리 완결
모델이 오디오 토큰을 직접 처리하므로 중간 변환 없이 음성의 모든 뉘앙스를 이해합니다. 응답도 음성 토큰으로 직접 생성하여 자연스러운 억양과 속도를 제어합니다.
Speech-to-Speech 성능 지표
TTFA 평균 ~1.09초 — 기존 파이프라인 대비 크게 단축된 응답 속도
음성 에이전트 아키텍처
WebRTC 양방향 스트림 위에 Speech-to-Speech 모델과 도구를 결합
-
1
오디오 입력
마이크에서 16kHz LPCM 오디오를 캡처. WebRTC 또는 WebSocket을 통해 서버로 스트리밍 전송.
-
2
Speech-to-Speech 모델
오디오 토큰을 직접 이해하고 추론. 도구 호출이 필요하면 JSON으로 의도를 반환, 아니면 바로 음성 토큰 생성.
-
3
도구 실행
에이전틱 루프가 모델 결정에 따라 외부 도구를 호출. 실행 결과를 컨텍스트에 추가하고 모델에 반환.
-
4
오디오 출력
모델이 생성한 24kHz LPCM 음성 청크를 스피커로 실시간 재생. 스트리밍 방식으로 첫 음절부터 즉시 출력.
입력·추론·도구·출력이 하나의 실시간 스트림 위에서 이어져 첫 음절부터 즉시 출력됩니다.
Nova Sonic
TTFA 평균 ~1.09초 · 양방향 스트리밍 · 턴 감지
Nova Sonic
Bedrock 네이티브 Speech-to-Speech 모델 — 양방향 실시간 음성 대화
Amazon Nova Sonic
HTTP/2 양방향 스트림 위에서 사용자 발화 중에도 처리를 시작하는 full-duplex 음성 모델
- 양방향 스트리밍 — full-duplex
- 자동 턴 감지 — VAD 내장
- 10개 로케일 — 한국어 미지원
- 도구 호출 — toolUse 이벤트
사용자가 말하는 도중에도 모델이 처리를 시작합니다 — TTFA 평균 ~1.09초로 사람 간 대화에 가까운 응답 속도를 냅니다.
Amazon Nova Sonic 핵심 기능
양방향 스트리밍·자동 턴 감지·다국어·도구 호출 — 실시간 대화를 지탱하는 4가지 기능
양방향 스트리밍
입력과 출력이 동시에 흐르는 full-duplex 통신 — 끊김 없는 대화
자동 턴 감지
Voice Activity Detection으로 발화 시작·종료를 자동 인식
다국어 지원
10개 로케일 지원 — 영어, 스페인어, 프랑스어, 일본어 등
도구 호출 통합
음성 대화 중 에이전트 도구를 호출하고 결과를 음성으로 전달
한국어는 아직 미지원입니다 — 한국어 서비스는 영어 로케일 우회 또는 STT+LLM+TTS 병행이 현재의 선택지입니다.
대화 장면 — barge-in의 순간
에이전트가 말하는 도중 사용자가 끼어들어도 이어지는 대화 — full-duplex 타임라인
실시간 대화 타임라인 — FULL-DUPLEX
0초 ──────────── 8초 · 발화는 영어 예시(한국어 로케일 미지원)
마이크 · 16kHz LPCM
스피커 · 24kHz LPCM
VAD 턴 감지 — 발화 종료 인식
├ TTFA ~1.09s ┤
barge-in — 발화 중 끼어들기
BidiNovaSonicModel 초기화
Strands SDK에서 Nova Sonic 모델을 양방향 스트리밍 모드로 연결
핵심 포인트
- BidiNovaSonicModel
- model_id와 client_config(region)로 초기화 — Nova 2 Sonic 양방향 연결
- BidiAudioIO()
- 마이크+스피커 통합 I/O — 오디오 포맷은 모델 설정이 결정(LPCM)
- BidiAgent(model=, tools=)
- 양방향 세션 전용 에이전트 — 도구는 기존 방식 그대로 장착
- agent.run(inputs=, outputs=)
- audio_io.input()·output()을 연결해 양방향 음성 세션 시작
코드
from strands.experimental.bidi import BidiAgent, BidiAudioIO
from strands.experimental.bidi.models import BidiNovaSonicModel
# Nova Sonic 양방향 모델 초기화
model = BidiNovaSonicModel(
model_id="amazon.nova-2-sonic-v1:0",
client_config={"region": "us-east-1"},
)
audio_io = BidiAudioIO() # 마이크 + 스피커 — 포맷은 모델 설정이 결정 (LPCM)
# BidiAgent 구성
agent = BidiAgent(
model=model,
tools=[get_weather, search_db],
)
# 실행 — await agent.run(inputs=[audio_io.input()], outputs=[audio_io.output()])
Nova Sonic 스펙 비교
경쟁 Speech-to-Speech 모델 대비 Nova Sonic의 포지셔닝
| 항목 | Nova Sonic | Gemini Live | OpenAI Realtime |
|---|---|---|---|
| TTFA | 평균 ~1.09초 | 공식 미공개 | 공식 미공개 |
| 컨텍스트 | 공식 미공개 | 128K (네이티브 오디오) | 32K 토큰 |
| 턴 감지 | VAD 내장 | VAD 내장 | VAD + Server VAD |
| 로케일 | 10개 | 97개 언어 | 공식 미공개 |
| 한국어 | ✗ 미지원 | ✓ | ✓ |
| 과금 | 토큰 기반 | 토큰 기반 | 토큰 기반 (텍스트·오디오 토큰 별도 단가) |
TTFA 공식 수치는 Nova Sonic만 공개(평균 ~1.09초)돼 있습니다 — 실제 선택을 가르는 것은 로케일(한국어) 지원·과금 방식·세션 제한입니다.
Nova Sonic · BidiAgent · WebRTC — 음성으로 대화하는 에이전트