Perplexity, Realtime API로 음성 검색을 구현한 비결

by DD
2개월 전
조회수 10

Perplexity는 음성 인터페이스를 통해 사용자 경험을 향상시키기 위해 Realtime-1.5 API를 도입

긴 형식의 콘텐츠(Long-form Content) 처리를 위해 컨텍스트 관리 전략(Context Management Strategy)을 수립하고, 2,000 토큰 단위로 분할하여 처리

다양한 플랫폼에서 일관된 오디오 품질을 위해 Rust 기반 SDK를 구축하여 오디오 표준화

음성 잠금(Voice Lock) 기능을 통해 사용자가 질문을 완료할 시간을 확보하고, 보다 자연스러운 대화 흐름을 제공

컨텍스트 관리(Context Management) 전략

본문에서는 긴 형식의 콘텐츠를 처리하기 위한 컨텍스트 관리 전략을 설명하며, 2,000 토큰(Token) 단위의 청크(Chunk)로 분할하여 전송하는 방식을 채택했다.

대용량 업데이트(Large Updates)는 실패 시 전체 컨텍스트를 손실시키므로, 점진적인 업데이트(Incremental Updates)를 통해 안정성을 확보

`conversation.item.create`를 사용하여 컨텍스트를 업데이트할 때, `item.type`을 적절히 설정하여 모델의 동작을 제어

시스템(System), 사용자(User), 어시스턴트(Assistant) 역할을 명확히 구분하여 모델이 페이지 내용과 사용자 질문을 정확하게 구분하도록 유도

결과적으로, 컨텍스트 볼륨(Context Volume)보다는 대화의 의미론(Conversation Semantics)을 정확하게 관리하는 것이 중요함을 강조한다.

오디오 표준화(Audio Standardization)를 위한 Rust SDK

Perplexity는 다양한 플랫폼에서 음성 검색 기능을 제공하기 위해 Rust 기반 SDK를 구축하여 오디오를 표준화했다.

플랫폼별 오디오 형식의 차이(Platform-Specific Differences)를 추상화하고, 모든 클라이언트가 동일한 오디오 계약(Audio Contract)을 준수하도록 함

48kHz 모노(Mono) 샘플링, Opus 코덱(Opus Codec) 선호도 설정, WebRTC APM(WebRTC APM)을 통한 에코 제거(Echo Cancellation), 자동 게인 제어(Automatic Gain Control), 노이즈 감소(Noise Reduction), 하이패스 필터링(High-Pass Filtering) 적용

오디오 상수(Audio Constants) 설정, 리샘플링(Resampling), 전체 처리 파이프라인(Processing Pipeline)을 한 곳에서 관리

이러한 과정을 통해 일관된 오디오 품질(Consistent Audio Quality)을 유지하고, 플랫폼 간의 차이로 인한 문제를 해결했다.

실제 환경(Real World)에 최적화된 음성 UX

Perplexity는 실제 사용 환경을 고려하여 음성 UX를 개선하기 위해 노력했다.

시끄러운 환경(Noisy Environment)에서의 테스트를 통해 실제 사용 환경에서의 성능을 검증

사용자의 자연스러운 멈춤(Pauses)을 인식하고, 모델이 질문을 완료하기 전에 응답하는 문제를 해결하기 위해 음성 잠금(Voice Lock) 기능 도입

음성 잠금(Voice Lock)은 사용자가 질문을 완료할 시간을 확보하고, 보다 자연스러운 대화 흐름을 제공

결과적으로, 실제 사용 환경에서의 테스트(Real-World Testing)를 통해 음성 검색의 정확성과 사용성을 향상시켰다.

핵심 도구(Core Tools) 사용 및 배포

Perplexity는 음성 검색 기능 구현에 필요한 도구의 수를 최소화하고, 각 도구의 사용 방법을 명확히 정의했다.

10개 미만의 핵심 도구(Core Tools)를 선택하여, 가장 가치 있는 액션(High-Value Actions)에 집중

시스템 프롬프트(System Prompt)에 각 도구의 사용 방법과 호출 시점을 명시하여, 모델의 안정성을 확보

도구의 출력(Tool Outputs)을 일반적인 구조화된 데이터(Structured Data) 형식으로 구성하여, 모델이 일관된 방식으로 응답하도록 유도

`response_text`와 `require_repeat_verbatim`과 같은 필드를 사용하여, 모델의 응답을 제어하고 사용자 경험을 개선

이러한 접근 방식을 통해 모델의 안정성(Model Stability)을 높이고, 사용자 인터랙션(User Interaction) 패턴을 일관되게 유지했다.

How Perplexity Brought Voice Search to Millions Using the Realtime API