Sidekick Part 3: 기기에서 벗어나지 않는 음성
요약
본 글은 클라우드 기반 음성 비서의 근본적인 개인 정보 문제를 지적하며, Sidekick의 `sk talk`이 어떻게 사용자 하드웨어에서 전체 음성 처리 루프를 구현하는지 설명합니다. OS 네이티브 레코더와 로컬 faster-whisper를 사용하여 녹음부터 트랜스크립션까지 모두 기기 내에서 처리하여 강력한 개인 정보 보호 기능을 제공합니다.
핵심 포인트
- 클라우드 전송 없이 하드웨어에서 음성 처리를 구현함.
- OS 네이티브 레코더와 로컬 faster-whisper를 사용.
- 개인 정보 보호는 아키텍처 자체에 기반을 둠.
- Python의 복잡한 환경 문제(audioop, spawn guard) 해결 과정을 다룸.
Sidekick Part 3: 기기에서 벗어나지 않는 음성
클라우드 기반 음성 비서에는 모두가 알지만 아무도 말하지 않는 더러운 비밀이 있습니다. 바로 사용자의 음성이 서버로 전송된다는 것입니다. '헤이 어시스턴트'라는 모든 호출은 업로드 과정입니다. Sidekick의 sk talk은 이 전체 루프를 사용자 하드웨어에서 처리합니다. OS 네이티브 캡처, 로컬 트랜스크립션(transcription), 그리고 편집 가능한 형태로 프롬프트에 삽입되는 방식까지 말이죠. 이번 시리즈의 Part 3에서는 이러한 파이프라인이 어떻게 작동하는지, 그리고 그 안에 있는 번지르르하지 않은 버그들을 다룹니다.
30초 만에 알아보는 파이프라인
Enter를 누르면 녹음이 시작되고, 다시 Enter를 누르면 중단됩니다. 이면에는 OS 네이티브 레코더(Linux의 arecord/ALSA, macOS의 sox/CoreAudio, ffmpeg 대체)가 16kHz wav 파일을 작성하고, 이후 로컬 faster-whisper가 이를 트랜스크립션합니다. 이때 int8 양자화(quantized), CPU 전용 방식으로 작동하며, 모델은 한 번 다운로드되어 캐시됩니다:
if model_size not in _model_cache:
_model_cache[model_size] = WhisperModel(model_size, device="cpu", compute_type="int8")
model = _model_cache[model_size]
...
하드웨어 종속성이 없습니다. arecord는 OS에 포함되어 배포되며, sox/ffmpeg는 brew를 통해 설치되고, faster-whisper는 첫 사용 시 실행 환경에 자체적으로 설치됩니다 (uv pip install faster-whisper, 피할 수 없는 엣지 케이스를 위해
개인 정보 보호 측면은 약속된 것이 아니라 구조적인 문제입니다. 녹음 파일들은 매 테이크마다 삭제되는 임시 파일일 뿐입니다. 파이프라인 내 어느 곳에도 이를 축적할 장소가 없기 때문입니다. 가장 강력한 개인 정보 보호 보장은 업로드 경로가 없는 아키텍처 자체에 있습니다.
무엇이 고쳐졌는가
src/sk/voice.py에서 가져온 두 가지 주요 개선 사항이 있습니다. 첫째, Python 3.13에서 audioop 모듈이 제거되어 마이크 레벨 측정에 struct를 사용한 수동 PCM 통계 함수가 필요했습니다. 이 과정에는 포맷 문자열 내의 엔디안(endianness) 배치에 대한 주석까지 포함되어 있어 마치 누군가 여기에 오후 시간을 잃어버린 것처럼 보입니다.
둘째, 스폰 가드(spawn guard) 문제입니다. faster-whisper의 의존성 트리가 multiprocessing 자식 프로세스를 시작할 수 있었는데, macOS 환경에서 재활용된 파일 디스크립터(file descriptors) 때문에 CPython이 ValueError: bad value(s) in fds_to_keep 오류와 함께 스폰을 거부했습니다. 이 문제를 해결하기 위해 spawnv_passfds를 몽키패치(monkeypatches)하여 fd 목록을 정리합니다—중복 제거, 정렬, 닫힌 디스크립터 제거—이 작업은 STT(Speech-to-Text) 작업 주변에 한 번만 설치됩니다. 그리고 호출자들이 실패를 단일 라인 메시지로 줄여서 실제 충돌 지점을 숨겼기 때문에, 전체 트레이스백(full tracebacks)은 이제 ~/.sidekick/voice-errors.log에 추가됩니다. 오류 보고 기능이 얼마나 잘 작동하는지 알려주는 버그는 항상 두 가지가 있습니다.
Part 4에서는 도구 안전 모델(tool safety model): 19가지 도구, 승인 게이트, 하드 거부, 그리고 감사 원장(audit ledger)에 대해 다룹니다.
Sidekick 커뮤니티에서 제작했습니다. 레포: [https://github.com/Faisal-Fayaz/sidekick]
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기