스크립트
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다른 영상에서 뵙겠습니다.
커뮤니티 글
아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!
이 영상에 대해 글쓰기