저는 Mac이 기본적으로 할 수 있는 일을 위해 두 가지에 돈을 지불하고 있었습니다.
Willow는 월 US$15를 내고 말로 타이핑하는 것을 가능하게 했고,
Fireflies는 좌석당 비용을 청구하며 클라이언트 통화에 참여하여 나중에 회의록을 작성해 주었습니다.
둘 다 작동했습니다. 하지만 제가 원하는 것치고는 둘 다 약간 터무니없게 느껴졌습니다.
저는 클라이언트 미팅에 또 다른 봇이 합류하는 것을 원하지 않았습니다. 몇몇 클라이언트들도 이에 대해 언급했는데, 이는 당연한 반응입니다. 아무도 'Fred's Notetaker'라는 이름의 세 번째 참가자가 등장해서 아무 말도 하지 않고 영원히 떠나지 않는 것을 좋아하지 않습니다. 그리고 받아쓰기의 경우, 제 얼굴에서 불과 40센티미터 거리에 엄청난 성능을 가진 칩이 있는데도 불구하고, 저는 목소리를 다른 나라에 있는 서버로 보내고 있었습니다.
그래서 어느 날 오후에 짜증이 나서 Speakhold를 만들었습니다.
둘 다 하는 작은 네이티브 Swift 앱입니다.
키를 누른 채 말하고 손을 떼면 타이핑됩니다.
녹음을 누르고 회의를 하면, 회의록을 작성합니다.
회의용 봇도 없고, 구독료도 없고, Mac 외부로 오디오가 나가지 않습니다.
그 오후가 끝날 무렵에는 앱이 완성되고 출시되었으며 오픈 소스화되었습니다.
그리고 저는 실제 클라이언트 통화에서 이 앱을 사용하기 시작했고, 제가 잘못 알고 있던 모든 어리석은 점들을 즉시 발견했습니다.
기능 설명
받아쓰기의 경우, 왼쪽 Control + 왼쪽 Option 키를 누른 채 말합니다.
손을 떼면 문장이 커서가 있는 곳 어디든 놓입니다. Slack, Mail, Xcode, 브라우저, 밤 11시에 정부 웹사이트의 양식 등 무엇이든 가능합니다.
음성 모델(speech model)은 Mac에서 실행됩니다. 필러 워드(filler words)를 정리하고 제가 자주 사용하는 이름이나 단어에 대한 로컬 사전(local dictionary)을 사용하기 때문에, 'Smriti'가 'smitten'으로 나오는 것을 막아줍니다.
회의 모드는 이와 마찬가지로 간단합니다.
녹음을 누르면 Speakhold는 제 마이크와 Mac에서 오는 오디오를 분리하여 캡처합니다.
이는 제가 말한 부분과 다른 모든 사람의 부분이 이미 구분된다는 의미입니다. 만약 반대편을 Speaker 1, 2, 3으로도 나누고 싶다면, Mac에서 스피커 모델(speaker model)을 실행하는 토글이 있습니다.
통화가 끝나면, 녹음 파일을 요약(summary), 결정 사항(decisions), 실행 항목(action items), 미해결 질문(open questions) 및 전체 전사본(full transcript)이 포함된 마크다운 파일로 변환합니다.
그런 다음 오디오를 삭제합니다.
Every state the pill can be in, from listening to meeting notes running in the background.
가져가기 아까운 기능 (Worth stealing)
왼쪽 및 오른쪽 수정자 키(modifier keys)는 다른 키입니다.
대부분의 받아쓰기 앱은 단축키가 필요하며, 결국 그 단축키는 짜증 나거나 다른 것과 충돌하게 됩니다. Speakhold는 충분히 낮은 레벨에서 작동하여 왼쪽 Control과 오른쪽 Control이 실제로 다른 입력값임을 감지합니다. Option 키도 마찬가지입니다. 따라서 기본 설정으로 사용되는 단축키를 훔치지 않으면서 왼쪽 Control + 왼쪽 Option을 사용할 수 있습니다. 사소한 제품 결정이지만, 앱을 사용하지 않을 때 사라지게 만드는 그런 종류의 기능 중 하나입니다.
Claude Code는 다른 API 키 없이 모델 호출이 가능합니다.
문제는 CLI를 약간 잘못 호출하면 키체인 로그인(keychain login)을 완전히 무시할 수 있다는 것이었습니다. 또한, 앱 자체가 Claude Code 세션에서 실행되는 경우, 또 다른 프로세스를 시작하기 전에 일부 환경 변수(environment variables)를 제거해야 합니다. 그렇지 않으면 'Claude 안의 Claude'가 생겨나 아무도 만족하지 못합니다. 실제로 이 모든 것을 연결해 봐야만 발견할 수 있는 이상한 작은 문제들이었습니다.
본인 것보다 다른 사람들의 출시 스레드를 먼저 읽으세요.
어디에 올리든 전에, 저는 Hacker News에서 가장 유사했던 8개 출시 게시물의 모든 댓글을 가져와서 총 337개의 댓글을 모았고 사람들이 무엇을 물었는지 계산했습니다. 압도적으로 가장 많은 질문은 “이것이 다른 열두 가지 제품과 어떻게 다른가요?”였습니다. 두 번째는 “왜 아직도 Whisper를 사용하나요? 그것은 2022년 버전입니다.”였습니다. 둘 다 타당한 지적이었습니다. 그래서 제가 누군가 물어보기 전에 두 번째 질문에 대한 개선을 완료했습니다. 자세한 내용은 아래에서 설명하겠습니다.
문제가 발생한 부분 (What broke)
첫 실제 고객사 통화는 대부분 잘 진행되었습니다.
그 후, Speakhold는 아무 움직임 없이 “전사 중(Transcribing)” 상태에 머물렀습니다.
멈춘 것이 아니었습니다. 제가 지시한 대로 정확히 작동하고 있었습니다.
그냥 멈춘 것처럼 보였고, 이는 사용자에게는 본질적으로 같은 일입니다.
그래서 전사(transcription) 작업은 진행 상황이 보이는 적절한 백그라운드 작업으로 이동했습니다.
두 번째 호출에서 제대로 문제가 발생했습니다.
제가 중지(stop) 버튼을 눌렀습니다. Speakhold는 작업을 백그라운드 프로세스에 넘겼고, 이 프로세스는 즉시 macOS에 알림 권한을 요청하고 제가 응답하기를 기다렸습니다.
문제는 아직 녹음 하드웨어(recording hardware)를 해제하지 않았다는 것이었습니다.
그래서 회의는 끝났고, 저는 중지 버튼을 눌렀지만, 앱은 제가 권한 팝업을 클릭하기를 정중하게 기다리는 동안 마이크가 계속 작동했습니다. 방금 통화했던 사람에 대해 무언가를 말하며 전화를 끊어본 적이 있다면 이 문제를 이해할 수 있을 것입니다. 정말 겸허해지는 경험이었습니다.
이후 수정 방법은 명확했습니다. 하드웨어를 먼저 해제해야 합니다. 사용자가 중지 버튼을 누른 후에는 다른 행동에 의존하는 것이 없어야 합니다.
Whisper도 또 다른 놀라운 점이 있었습니다.
충분히 오랫동안 침묵을 듣게 두면, 그것은 지어내기 시작합니다(making things up). 제 경우 매우 공손해졌습니다.
"감사합니다. 감사합니다."
반복적으로요. 텅 빈 방의 8분이 감사로 가득 찬 페이지로 돌아왔습니다.
저는 신뢰도가 낮은 반복 출력에 대한 필터링을 추가했고, 이는 도움이 되었습니다. 그런 다음 Hacker News 스레드에서 모두에게 하라고 계속 말하던 것을 따라 같은 클립에 NVIDIA의 오픈 음성 모델인 Parakeet을 시도했습니다. 동일한 단어들이 7배 더 빠르게 처리되었고, 빈 방에 대해서는 아무것도 반환하지 않았습니다. 이것이 올바른 답변입니다. 현재 기본 설정은 Whisper를 유지하여 Parakeet이 구사하지 못하는 아흔 개가 넘는 언어를 지원합니다.
이 모든 것에서 얻은 주요 교훈은 매우 간단했습니다.
실제 사람들이 소프트웨어를 개발자보다 훨씬 잘 망가뜨립니다. 다른 사람들의 댓글 섹션이 그 다음으로 가장 좋은 것입니다.
이것이 아닌 것들 (What it is not)
Apple Silicon 전용이며 현재 macOS 14 이상에서만 작동합니다.
당분간은 영어에 초점을 맞춥니다.
이는 대시보드, 검색 기능, 그리고 4분기(Q4) 가격 검토가 포함된 또 다른 팀 작업 공간이 아니라 개인용 도구입니다.
회의 녹화 사실을 알리지 않습니다. 어디에 있든 동의 규칙은 여전히 적용됩니다.
회의록은 그것을 생성하는 모델만큼만 가치가 있다.
위치
이를 12 MB 디스크 이미지로 speakhold.wildinteractive.app에서 다운로드하거나, Homebrew를 통해 brew install --cask sturzael/tap/speakhold 명령어로 설치할 수 있다. 아직 Apple에 US$99를 지불하지 않았기 때문에 노타라이즈(notarised)되지 않았으며, 따라서 설치 페이지가 첫 실행 대화 상자를 다루고 있다. 소스 코드는 GitHub에 있다.
MIT 라이선스 적용. 용량은 작다. 무료이다.
나는 이것이 현재 가장 관심 있는 종류의 AI 작업이라고 생각한다.
단순히 'AI 기능'이 필요하다고 해서 무언가에 챗봇을 추가하는 것이 아니다.
단지 성가신 작업을 하나 찾아내고, 모델을 데이터가 이미 존재하는 곳에 배치하며, 지루한 통합 작업(integration work)을 제대로 수행하는 것이다.
이 경우에는 내가 짜증이 나서 오후에 약간 터무니없는 것을 만들고 출시했고, 실제 고객 통화에서 거의 즉시 고장 났으며, 어리석은 부분들을 수정하고 그것을 공개했다.
돌이켜보면 상당히 생산적인 오후였다. 두 개의 구독 서비스는 취소되었다. 내 얼굴에서 40센티미터 떨어진 칩이 마침내 제 역할을 하고 있다.
이것은 뉴질랜드 웰링턴에 위치한 디자인 주도 엔지니어링 스튜디오인 Wild Interactive의 필드 노트(Field Note)이다. 원래는 wildinteractive.co.nz/field-notes/the-end-of-the-small-saas에 게시되었다.