이것이 바로 진정한 음성 코딩의 모습입니다 (Qwen 오디오 에이전트)

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

스크립트

00:00:00음성 코딩은 에이전트가 실제 작업을 수행해야 하는 순간 무너집니다.
00:00:04이 파일을 리팩터링하고 빌드를 실행해 줘, 그리고 침묵이 흐릅니다.
00:00:08에이전트가 사라지고 우리는 마이크 아이콘만 바라보며 돌아오기를 기다리게 되죠.
00:00:14Quen 오디오 에이전트는 다르게 작동합니다.
00:00:16음성 에이전트와 계속 대화하는 동안 Claude Code가 백그라운드에서 리팩터링을 수행할 수 있습니다.
00:00:20그리고 작업이 끝나면 당신의 말을 가로채어 완료되었다고 알려줄 수 있죠.
00:00:24여기서 이상한 점이 있습니다.
00:00:25Quen 오디오 에이전트는 모델이 아니며, 모델 가중치를 전혀 포함하지 않습니다.
00:00:29대부분의 음성 코딩 설정이 완전히 놓치고 있는 한 가지를 중심으로 구축된 런타임입니다.
00:00:34실제 작업이 진행되는 동안 대화를 계속 유지하는 것이죠.
00:00:42자, 왜 그것이 중요한지 설명해 드리겠습니다.
00:00:45대부분의 사람들이 음성과 코딩에 대해 잘못된 생각을 가지고 있다고 생각하기 때문입니다.
00:00:49일반적인 설정은 받아쓰기입니다.
00:00:51Whisper가 듣고, 텍스트로 변환하여 편집기에 붙여넣습니다.
00:00:55그것도 유용하지만, 실제로 무엇을 대체하는지 살펴보세요.
00:00:58타이핑하는 과정 전체를 대체할 뿐입니다.
00:01:01거기에 앉아서 여전히 기다리죠.
00:01:03손가락을 입으로 바꿨을 뿐, 실제로 바뀐 것은 아무것도 없습니다.
00:01:06속도가 빨라지긴 하지만요.
00:01:08전이중(Full duplex)은 다른 것을 의미합니다.
00:01:10양쪽 모두 동시에 말할 수 있다는 뜻입니다.
00:01:13문장 중간에 끼어들 수 있죠.
00:01:14그리고 더 중요한 것은, 반대편에 있는 시스템이 대화를 계속 유지할 수 있다는 점입니다.
00:01:19다른 곳에서 작업이 진행되는 동안 말이죠.
00:01:21후반부가 이것이 존재하는 유일한 이유입니다.
00:01:24작업 흐름을 빠르게 만들어 주는 코딩 도구가 마음에 드신다면 구독해 주세요.
00:01:27계속해서 새로운 영상이 업로드됩니다.
00:01:29좋습니다. 이제 이것이 왜 다른지 보여드리겠습니다.
00:01:32고의로 너무 오랫동안 말하게 만들어 보겠습니다.
00:01:35솔직히 말해서 설정 과정이 정말 꽤나 답답했습니다.
00:01:38전부 중국어로 되어 있어서 알리바바 클라우드 영문 사이트로 가서 프런트엔드와 백엔드 작업을 위한
00:01:43데스크톱 UI를 알리바바 API 키로 설정한 다음, 백엔드를 위해 앤트로픽 API 크레딧을 추가해야 했습니다.
00:01:49일부 내용은 직접 번역해야 했습니다.
00:01:51하지만 일단 모두 동기화되면 꽤 잘 작동합니다.
00:01:52아무것도 누르지 않고도 그냥 말할 수 있죠.
00:01:55마이크를 끄지 않는 한 항상 듣고 있습니다.
00:01:57자, 그럼 시작해 보겠습니다.
00:02:00작업이 시작됩니다.
00:02:02제가 작업해야 할 코드 저장소를 건네주려고 합니다.
00:02:05그 설명을 시작하죠.
00:02:07좋습니다.
00:02:07그리고 중간쯤에 저는 그냥 이렇게 할 겁니다.
00:02:10멈춰.
00:02:11너무 길어.
00:02:11알겠어.
00:02:12이해했습니다.
00:02:13그리고 바로 그 순간 끊어집니다.
00:02:15이 말을 들었죠.
00:02:16이제 전부 사라졌습니다.
00:02:17여기서 새로고침할 수 있습니다.
00:02:19제가 중간에 끊었기 때문에 문장을 끝마치지 않죠.
00:02:21말하기를 시작한 후에 쓸데없는 오디오가 추가로 방해하는 일이 없습니다.
00:02:25여기서는 런타임이 실제로 이전 턴을 종료하고 다음으로 넘어갑니다.
00:02:29여기서 우리가 작업할 저장소의 경로를 붙여넣겠습니다.
00:02:34이제 간단한 작업에서는 어떤 일이 일어나는지 보세요.
00:02:3719 곱하기 24는 얼마지?
00:02:39저장소는 건드리지 마.
00:02:41하지만 Claude Code가 그걸 볼 필요가 전혀 없었기 때문에 즉각적인 답변을 얻었습니다.
00:02:44음성 에이전트가 간단한 일들을 직접 처리할 수 있어서 정말 좋습니다. 모든 사소한 질문이
00:02:49큰 작업으로 바뀌거나 앤트로픽 API 크레딧을 낭비하게 만들고 싶지 않기 때문입니다.
00:02:54하지만 이제 조금 더 시간이 걸리는 작업을 시켜보겠습니다.
00:02:58제가 제공한 코드 저장소는 단순히 타입스크립트 연습 문제들입니다.
00:03:01더 어려운 것을 선택할 수도 있었지만, 지금은 간단하게 유지합시다.
00:03:05여기서 record problem.ts 파일을 리팩터링하라고 말하겠습니다.
00:03:09제대로 작동하는지 확인해 줘.
00:03:11이제 이걸 보세요.
00:03:13작업이 음성 에이전트를 떠나 Claude Code가 그것을 넘겨받고 이 작업 카드가 나타납니다.
00:03:18Claude가 실제로 그 업무를 맡았다는 증거입니다.
00:03:21보통 이런 경우 음성 코딩 설정이 무너질 수 있는 부분이죠.
00:03:25실제 무언가를 해달라고 요청했기 때문에 이제 기다려야 합니다.
00:03:29하지만 여기서는 그럴 필요가 없습니다.
00:03:31이렇게 말할 수 있죠. 그리고 HTTP 요청을 처리할 비동기 함수가 포함된
00:03:36일반 JS 파일도 하나 만들어 줄래?
00:03:40답변을 하면서 두 작업이 나란히 실행되는 동안 둘 다 처리합니다.
00:03:44Claude는 여전히 일하고 있습니다.
00:03:46이제 뜬금없는 질문을 하나 던져보겠습니다.
00:03:48참, 두바이 날씨는 어때?
00:03:52좋아요, 여기서 읽어보면 되겠네요.
00:03:53고마워.
00:03:55또 다른 답변, 똑같은 대화입니다.
00:03:57그리고 완료되기를 기다릴 필요 없이 현재 진행 중인
00:04:02작업에 대해서도 물어볼 수 있습니다.
00:04:04이봐, 리팩터링은 어떻게 되어가고 있어?
00:04:05끝날 때까지 기다릴 필요 없어.
00:04:07상태만 알려줘.
00:04:11이제 Claude가 편집 중인지, 테스트를 실행 중인지, 아니면 여전히 작업 중인지 말해줄 수 있습니다.
00:04:14기본적으로 두 가지 일이 동시에 일어나고 있는 것입니다.
00:04:17나는 한 에이전트와 대화하고 있고,
00:04:18다른 에이전트는 작업을 수행하고 있으며, 어느 한쪽이 바쁘다고 해서
00:04:22다른 쪽이 멈출 필요가 없습니다. 즉, Claude가 끝나는 동안 저는 계속 진행할 수 있다는 뜻이죠.
00:04:27코딩 작업이 끝났습니다.
00:04:28결과가 실시간 대화 속으로 다시 들어왔고, 저는 아무것도 확인할 필요가 없었습니다.
00:04:33오픈소스 데스크톱 런타임이 이토록 깔끔하게 처리하는 것은 처음 봅니다.
00:04:38따라서 이 모든 것의 밑바탕에는 실제로 꽤 간단한 설정이 있습니다.
00:04:41한쪽에는 음성 에이전트가 있습니다.
00:04:43좋습니다.
00:04:44대화, 중단, 상태 취소 등 빠른 처리 위주의 작업들을 처리하죠.
00:04:50다른 한쪽에는 ACP를 통해 연결된 Claude Code가 있습니다.
00:04:54파일을 건드리고, 도구를 실행하며, 느린 작업을 수행하는 부분입니다.
00:04:58구조적으로 볼 때 기본적으로 두 개의 차선이 있는 셈입니다.
00:05:00일단 그걸 이해하고 나면 이 디자인이 훨씬 더 명확해집니다.
00:05:03오직 대화를 유지하는 역할만 하는 가벼운 프런트엔드 음성 에이전트가 있습니다.
00:05:08간단한 질문에는 즉시 대답합니다.
00:05:10상태가 어때?
00:05:11그거 취소해.
00:05:11됐어.
00:05:13그런 다음 백엔드에는 실제 코딩 에이전트가 있고, 이들은 에이전트 클라이언트 프로토콜(ACP)을 통해 서로 통신합니다.
00:05:19실제 작업은 비동기 태스크로 전달되어 독자적으로 실행됩니다.
00:05:23작업이 끝나면 결과는 실시간 대화 속으로 다시 주입됩니다.
00:05:27따라서 음성 레이어는 느린 작업 때문에 결코 차단되지 않습니다.
00:05:31그리고 하드코딩된 통합이 아니라 프로토콜 방식이기 때문에 백엔드 교체가 가능합니다.
00:05:36Claude Code, Codex, Open Code 등 여러 가지가 있죠.
00:05:40자, 짚고 넘어가고 싶은 디테일이 하나 있는데, 누군가 이에 대해 제대로 신경 썼다는 걸 보여주거든요.
00:05:44여기서 인터럽트(끼어들기)는 이벤트로 처리되지 않습니다.
00:05:47상태 기계(state machine)로 처리됩니다.
00:05:49사용자의 음성을 감지하고, 인터럽트를 표시하며, 해석된 신호를 내보냅니다.
00:05:52전송 중이던 모든 오디오와 트랜스크립트를 적극적으로 차단합니다.
00:05:56그런 다음 새로운 턴을 시작하죠.
00:05:57그들의 자체 디자인 노트에 따르면 인터럽트의 엔지니어링 품질이 평판을 결정한다고 합니다.
00:06:03그 말이 맞습니다.
00:06:04음성 어시스턴트가 고장 난 것처럼 느끼게 만드는 것은 느린 응답 속도가 아닙니다.
00:06:08끼어들었는데도 이전 문장이 1.5초 동안 계속 흘러나오는 현상이죠.
00:06:13그런 틈은 실제로 꽤 거슬리며 큰 단점입니다.
00:06:16여기도 가끔 약간의 그런 현상이 있습니다.
00:06:18자, 이 모든 것은 우리가 이미 알고 있는 것들과 비교해서 어디에 위치할까요?
00:06:21음, OpenAI 실시간 API가 이 기술의 기저에 깔린 레이어입니다.
00:06:25음성을 입력받고 음성으로 출력하는 역할을 하는 부분이죠.
00:06:28이 시스템은 그 위에 실행되며 제공자 교체가 가능합니다.
00:06:32PipeCat과 LiveKit 에이전트는 프레임워크입니다.
00:06:34부품들을 제공하면 사용자가 파이프라인을 조립하는 식이죠.
00:06:38이것은 이미 조립되어 특정 작업에 맞춰져 있습니다.
00:06:41그리고 여러분이 직접 작성한 whisper-to-LLM-to-TTS 파이프라인은 우리 중 많은 이들이 가지고 있는 것입니다.
00:06:47많은 사람들이 직접 구축하죠.
00:06:48자, 이제 리드미(README) 파일이 알려주지 않는 두 가지 사실에 대해 솔직하게 이야기해 봅시다.
00:06:52첫째, 런타임은 오픈소스입니다.
00:06:55음성은 그렇지 않죠.
00:06:56코드는 Apache 2.0 라이선스입니다.
00:06:58하지만 기본 경로이자 가장 소리가 좋은 방식은 유료 API 키를 사용하는 알리바바의 DashScope를 통해 라우팅됩니다.
00:07:05무료 크레딧을 조금 주긴 하지만 여전히 유료입니다.
00:07:07최적화된 실시간 음성은 클라우드 API 전용입니다.
00:07:10품질 좋은 오디오 생성 기능에는 자체 호스팅 버전이 없습니다.
00:07:14따라서 '오픈소스 음성 에이전트'라는 말은 여기서는 절반만 진실입니다.
00:07:17실제 탈출구가 존재하며 문서화해 준 점에 대해서는 칭찬하고 싶습니다.
00:07:21MPS에서 실행되는 Apple Silicon의 MLX 백엔드와 함께 허깅페이스 STT 파이프라인을 사용하는 완전한 로컬 모드입니다.
00:07:30완전한 로컬 모드에서는 클라우드 키가 전혀 필요 없습니다.
00:07:33두 번째 파이썬 설치가 필요하며 문서의 튜닝 프로필은 중국어 전용입니다.
00:07:38알겠습니다. 번역해서 쓰면 되죠.
00:07:39하지만 그 경로가 존재하고 특히 MPS를 겨냥하고 있습니다.
00:07:43둘째, 그리고 이게 더 중요한 부분인데, 제가 찾아본 어떤 하드웨어에서도 공개된 지연 시간(latency) 수치가 전혀 없습니다.
00:07:51자, 이제 마지막으로 몇 가지 빠른 요점을 짚어보겠습니다.
00:07:53중국어 우선 방식입니다.
00:07:54웨이크 워드는 이것이며, 이는 다음을 의미합니다.
00:07:58전이중 아키텍처를 설명하는 메인 디자인 글은 중국어 전용입니다.
00:08:02튜닝된 음성 프로필도 중국어입니다.
00:08:05기저에 있는 모델은 음성 인식을 위해 100개 이상의 언어를 지원하고 음성 합성을 위해 수십 개 언어를 지원한다고 주장합니다.
00:08:10그래서 이 모든 것에 가입할 때 대략적인 내용을 이해하기 위해 페이지를 번역해야 했습니다.
00:08:15버전 2.0은 이미 아키텍처가 재작성되는 중이라고 개발 단계에 올라와 있습니다.
00:08:19그리고 깃허브 스타 수가 실제 사용량보다 앞서 나가고 있죠.
00:08:22여기에 스타는 2,300~2,400개이지만 NPM 월간 다운로드는 약 4,000회 정도입니다.
00:08:26최근 릴리스의 경우 맥 버전은 92명이 다운로드한 반면 윈도우 버전은 502명이 다운로드했습니다.
00:08:32자, 여러분 중 대부분이 그러하시겠지만 이미 Claude Code나 Codex 안에서 일하고 있고,
00:08:37긴 작업이 실행되는 동안 키보드에 묶여 있는 상태에서 벗어나고 싶다면,
00:08:41이것은 병렬 작업과 실시간 대화를 함께 해내는 제가 찾은 유일한 도구이거나,
00:08:46적어도 그것을 정말 잘 해내는 도구입니다.
00:08:48DMG 파일을 받으세요.
00:08:50서명된 유니버설 빌드입니다.
00:08:52CUDA도, 파이썬도, 컴파일할 것도 없습니다.
00:08:54모든 것을 통합하는 데 대략 10분, 길어도 15분 정도 걸립니다.
00:08:57완전 개방형의 완전한 로컬 음성 스택을 원하신다면 이것은 아닙니다.
00:09:00하지만 MLX 경로는 현실적인 출발점이며, 대부분의 프로젝트가 제공하는 것보다 많습니다.
00:09:05그리고 이 특정 저장소에 어떤 일이 일어나든 우리가 얻어가야 할 아이디어는 다음과 같습니다.
00:09:09음성을 실제 작업에 사용할 수 있게 만드는 것은 더 나은 전사(transcription) 기능이 아닙니다.
00:09:12전사는 이미 해결된 문제입니다.
00:09:14시스템이 바쁜 와중에도 계속해서 나와 대화할 수 있느냐의 문제입니다.
00:09:17이것은 음성 문제가 아니라 동시성(concurrency) 문제입니다.
00:09:20그리고 거의 아무도 이것을 그렇게 다루지 않고 있죠.
00:09:22저는 BetterStack의 Josh입니다.
00:09:23이와 같은 코딩 도구가 마음에 드신다면 꼭 구독해 주세요.
00:09:26다른 영상에서 뵙겠습니다.

핵심 요약

음성 코딩의 핵심은 전사 성능이 아니라 동시성 처리에 있으며, Qwen 오디오 에이전트는 백엔드 코딩 작업과 실시간 대화를 동시에 유지하는 2개의 차선 아키텍처를 제공한다.

하이라이트

  • Qwen 오디오 에이전트는 모델 가중치를 포함하지 않는 런타임으로서, 실제 작업 수행 중에도 대화를 유지하는 전이중 방식을 제공한다.

  • 설정 과정에서는 알리바바 DashScope API 키와 앤트로픽 API 크레딧이 요구되며, 일부 설정 항목은 중국어로 구성되어 있다.

  • 간단한 연산이나 질문은 백엔드 저장소를 거치지 않고 음성 에이전트가 즉시 처리하여 불필요한 API 비용을 방지한다.

  • Claude Code와 연동된 비동기 태스크 실행 중에도 음성 인터페이스를 통해 날씨 확인이나 진행 상황 조회가 동시에 가능하다.

  • 인터럽트 기능은 단순 이벤트가 아닌 상태 기계(state machine)로 처리되어 이전 오디오 출력을 즉시 차단한다.

  • Apache 2.0 라이선스의 오픈소스 런타임이지만, 최적화된 고품질 실시간 음성 처리는 유료 클라우드 API를 통해서만 제공된다.

  • 깃허브 스타 수 2,400여 개 대비 NPM 월간 다운로드는 약 4,000회이며 윈도우 버전 다운로드 수가 맥 버전보다 많다.

타임라인

음성 코딩의 한계와 전이중 런타임의 개념

  • 기존의 음성 코딩은 에이전트가 작업하는 동안 사용자가 침묵 속에서 기다려야 하는 한계가 존재한다.
  • 일반적인 음성 설정은 단순 받아쓰기 수준에 머물러 타이핑 과정만 대체할 뿐이다.
  • 전이중 시스템은 양방향 동시 소통을 지원하며 시스템이 백엔드 작업을 수행하는 동안에도 대화를 유지한다.

기존 음성 코딩은 명령을 내린 후 에이전트의 응답을 마냥 기다리게 만든다. 단순 Whisper 기반 전사는 타이핑 속도만 높일 뿐 작업 흐름 자체를 바꾸지 못한다. 반면 전이중 아키텍처는 양쪽 모두 동시에 말할 수 있으며 백엔드 작업과 대화를 분리하여 진행시킨다.

설정 과정 및 실시간 코드 리팩터링 실행

  • 초기 설정은 알리바바 API 키와 앤트로픽 API 크레딧 설정이 필요하며 일부 인터페이스가 중국어로 되어 있다.
  • 간단한 질문은 Claude Code 저장소를 거치지 않고 음성 에이전트가 즉시 처리한다.
  • 타입스크립트 리팩터링 같은 장기 작업이 실행되는 동안에도 방해 없이 다른 질문이나 동시 작업을 수행할 수 있다.

설정 과정은 영문 및 중국어 인터페이스를 거쳐 API 키를 연동하는 단계를 거친다. 사소한 계산 문제나 질문은 백엔드를 호출하지 않고 즉각 응답한다. 저장소 리팩터링처럼 시간이 소요되는 작업은 Claude Code가 백그라운드에서 처리하고 사용자는 대화를 이어간다.

동시성 아키텍처와 인터럽트 엔지니어링

  • 음성 에이전트와 Claude Code가 에이전트 클라이언트 프로토콜(ACP)을 통해 비동기로 통신한다.
  • 작업이 완료되면 결과가 실시간 대화 흐름으로 자동 주입된다.
  • 끼어들기(인터럽트)는 상태 기계로 처리되어 기존 오디오 출력을 즉시 차단하고 새 턴을 시작한다.

프런트엔드의 가벼운 음성 에이전트와 백엔드의 코딩 에이전트가 분리되어 독립적으로 구동된다. 느린 작업 때문에 음성 레이어가 차단되지 않으며 결과는 대화창으로 돌아온다. 인터럽트 발생 시 지연 없이 기존 음성을 끊어내는 구조가 어시스턴트의 사용성을 좌우한다.

오픈소스 현실과 플랫폼 비교 및 활용 가이드

  • 런타임 코드는 Apache 2.0 오픈소스이지만 최적화된 음성 기능은 유료 알리바바 DashScope API를 통해 라우팅된다.
  • 오프라인 환경을 위해 허깅페이스 STT와 Apple Silicon MLX 백엔드를 활용하는 완전한 로컬 모드가 존재한다.
  • 키보드 의존성에서 벗어나 병렬 작업과 실시간 대화를 동시에 수행하려는 개발자에게 유용한 도구이다.

오픈소스 명목과 달리 고품질 실시간 음성은 클라우드 API와 유료 크레딧을 전제로 한다. 다만 로컬 모드 경로가 문서화되어 있어 대안을 제공한다. 긴 실행 시간을 갖는 코딩 환경에서 대화 단절 없이 병렬 처리를 원하는 사용자에게 현실적인 대안이 된다.

커뮤니티 글

아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!

이 영상에 대해 글쓰기