에이전트에 음성 추가하기
핵심 내용
Cloudflare Agents SDK에 실시간 음성 파이프라인을 더해 음성·텍스트를 같은 에이전트로 다룬다.
자세히 보기
Cloudflare가 Agents SDK용 실험적 음성 파이프라인인 @cloudflare/voice를 공개했다. 핵심은 음성을 별도 프레임워크로 분리하지 않고, 기존 Agent, Durable Object, SQLite 대화 기록, WebSocket 구조 위에 그대로 얹는 것이다.
패키지는 다음을 제공한다.
withVoice(Agent): 대화형 음성 에이전트withVoiceInput(Agent): dictation, voice search 같은 음성 입력 전용useVoiceAgent,useVoiceInput: React용 훅VoiceClient: 프레임워크에 독립적인 클라이언트- 기본 Workers AI 제공자: Deepgram Flux STT, Deepgram Nova 3 STT, Deepgram Aura TTS
동작 흐름도 명확하다. 브라우저가 마이크 오디오를 16 kHz mono PCM으로 전송하면, STT 세션이 이를 받아 발화 종료를 감지하고 안정된 transcript를 만든다. 그 transcript는 onTurn()으로 전달되고, 응답은 TTS로 합성돼 다시 클라이언트로 돌아온다. onTurn()이 스트림을 반환하면 문장 단위로 쪼개 즉시 음성 재생을 시작해 Time-to-First Audio를 줄인다.
구조적 장점은 음성이 에이전트의 한 기능으로 들어간다는 점이다. 사용자는 타이핑하다가 음성으로 전환하고 다시 텍스트로 돌아가도 같은 에이전트, 같은 상태, 같은 도구를 사용한다.
또한 백엔드 지연을 줄이기 위해 오디오와 텍스트가 여러 서비스 사이를 오가는 경로를 최소화했다. Cloudflare 네트워크와 Workers AI 바인딩을 활용해 네트워크 홉을 줄이고, 음성 응답은 스트리밍으로 바로 시작할 수 있다.
예시 코드에서는 withVoice(Agent)로 서버를 구성하고 transcriber, tts, onTurn()만 구현하면 된다. 더 복잡한 예시에서는 streamText()와 context.signal을 써서 LLM 응답을 스트리밍하고, 사용자 중단 시 즉시 취소할 수 있다.
음성 전용이 아닌 입력형 시나리오도 지원한다. withVoiceInput은 음성을 텍스트로만 처리하는 경량 패턴을 제공하며, 같은 연결에서 sendText()로 직접 텍스트를 보내면 STT를 건너뛰고 onTurn()으로 바로 전달된다. 결과적으로 음성, 텍스트, 도구, 스케줄링, 영속성을 하나의 에이전트 설계 안에서 함께 다룰 수 있다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.