말한 그대로 적어라: AI 재작성 없는 받아쓰기
AI로 다듬는 받아쓰기는 당신이 한 말을 고쳐 씁니다. 단서가 빠지고 의미가 뒤집힙니다. LLM 정리 파이프라인이 당신을 의역하는 이유, 그리고 Keebye가 곧이곧대로 남는 이유.
AI로 다듬는 받아쓰기에 대해, 직접 겪기 전까지는 역설처럼 들리는 불만이 하나 있습니다. 전사는 멀쩡했는데, 전사 이후에 벌어진 일이 그걸 망쳤다는 겁니다. 당신은 한 가지를 말했는데, 도구는 매끈하고 자신 있고 살짝 다른 것을 내놓았습니다. 단서가 조용히 빠집니다. 유보가 사라집니다. 당신이라면 절대 안 쓸 문장으로 구조가 바뀝니다. 그리고 이 패턴의 최악 판본에서는 — 사람들이 그 자리에서 도구를 버리게 만드는 그 판본에서는 — 의미가 뒤집힙니다. "테스트가 통과할 때까지 배포하지 마"가 반대편에서는 배포하라는 지시로, _하지 마_가 빠진 채 나옵니다.
가벼운 받아쓰기라면 성가심에 그칩니다. 하지만 제가 실제로 받아쓰기를 쓰는 방식 — Claude Code를 목소리로 조종하기의 워크플로대로 Claude Code에 프롬프트를 먹이는 것 — 에서는 독입니다. 코딩 에이전트는 당신의 말을 명세로 받아들입니다. 당신의 받아쓰기 도구가 의역했다는 걸 모릅니다. 지시를 안전하게 만들어 주던 단서가 입과 터미널 사이에서 매끄럽게 다듬겨 없어졌다면, 에이전트는 그 다듬어진 판본을 기꺼이 실행합니다. 정밀함이 프롬프트의 전부인데, AI 재작성 계층은 정밀함을 없애면서 결과를 더 신중해 보이게 만드는 기계입니다.
AI 받아쓰기 도구는 왜 당신이 한 말을 고쳐 쓰나?
분야 차원의 답은 누가 발화를 왜곡하려 들었다는 게 아닙니다. "이 전사를 정리해 줘"가 정말로 매력적인 기능이고, 그걸 만드는 뻔한 방법이 원본 전사본을 언어 모델에 통과시키는 것이기 때문입니다.
날것의 발화는 지저분합니다. 군더더기 단어, 말을 시작했다 무르는 것, 반복되는 단어, 없는 문장부호. LLM에게 그걸 정돈하라고 하면 아름다운 결과가 나옵니다. 문제는 언어 모델이 사람 교정자가 "um"을 지우는 방식으로 편집하지 않는다는 것입니다. 다시 생성합니다. 출력은 모델이 당신의 입력의 좋은 판본이라고 여기는 새 텍스트이고, 당신의 의도가 새어 나가는 곳이 바로 그 "좋은"입니다. 도움이 되고 유창하도록 훈련된 모델에는 의견이 있습니다. 유보는 잡음처럼 보이고, 단서는 군더더기처럼 보이며, 어색하지만 정확한 표현은 개선할 대상처럼 보입니다. 대부분의 경우 재작성은 무해합니다. 하지만 확률적이고, 어느 문장이 전사된 것이고 어느 문장이 지어진 것인지 출력만 봐서는 알 수 없습니다. 매끄러움은 고르지만, 충실함은 그렇지 않습니다.
이것이 LLM 정리 파이프라인의 깊은 문제입니다. 조용하고 자신 있게 실패합니다. 잘못 들은 음성 인식기는 대개 눈에 띄게 틀린 걸 내놓습니다. 당신을 배신한 재작성 계층은 눈에 띄게 맞아 보이는 걸 내놓습니다. 문법에 맞고, 그럴듯하고, 당신의 목소리를 입고 있죠. 뒤집힌 "배포하지 마"가 걸리지 않고 보내지는 이유가 정확히 그것입니다.
기본은 곧이곧대로
Keebye의 입장은 단순합니다. 음성 인식 모델이 들은 것이 당신의 커서에 도착하는 것입니다. 기본적으로 전사본과 당신의 터미널 사이에 앉아 더 나은 당신을 지어내는 언어 모델은 없습니다. 기본 정리 단계는 짧은 결정론적 규칙 목록이고, 그게 전부입니다.
이건 의도적인 베팅이고, 바이브 코딩이라는 용례에서 나옵니다. 받아쓰기가 코딩 에이전트의 제어 채널일 때, 도구의 일은 저작이 아니라 운반입니다. 당신이 저자이고, 에이전트가 독자이며, 받아쓰기 계층에는 의견이 없어야 합니다. 프롬프트 전체를 타이핑하는 대신 말하는 그 워크플로는 AI 프롬프트를 위한 음성 받아쓰기에 정리되어 있습니다.
Keebye에도 LLM 정리가 있습니다. 곧 이야기하겠습니다. 다만 켜야 쓰는 옵션이고, 전적으로 당신의 기기에서 돌며, 흔한 형태의 표류와 폭주 확장과 반복을 걸러 내도록 설계된 가드 아래에서 동작합니다. 출력이 그 검사를 통과하지 못하면 Keebye는 규칙으로 물러섭니다. 기본값은 규칙 그대로입니다.
그럼 정리는 실제로 무엇을 하나?
곧이곧대로가 날것이어야 한다는 뜻은 아닙니다. Keebye에는 선택형 정리 단계가 들어 있습니다. 향상 기능이고, 기본으로 켜져 있으며, 앱별로 덮어쓸 수 있습니다. 하지만 모델이 아니라 규칙 기반이고, 하는 일의 전체 목록은 한 문단에 들어갑니다.
혼자 서 있는 군더더기 단어(um, uh, erm, you know)를 없앱니다. 바로 붙은 단어 반복을 합칩니다. "the the"는 "the"가 됩니다. 공백을 정리합니다. 첫 글자를 대문자로 바꾸고, 문장 끝에 마침표가 없으면 붙입니다. 목록은 그게 전부입니다. 규칙은 결정론적이고 범위가 좁습니다. 절의 순서를 의도적으로 바꾸거나, 부정을 없애거나, 동의어로 치환하지 않습니다.
정리가 돌기 전에 사전 치환이 먼저 적용됩니다. 음성 모델이 망가뜨리는 전문 용어와 고유명사를 위한 사용자 정의 대체이고, 덕분에 "pnpm"과 당신의 모듈 이름이 당신의 코드베이스가 적는 철자 그대로 도착합니다.
규칙 기반 단계조차 원하는 것보다 과한 개입이라면, 향상 기능을 끄면 Keebye는 음성 모델의 날것 전사본을 그대로 넣습니다. 군더더기와 반복까지 전부요. 어떤 맥락에서는 — 누군가를 인용할 때, 끝에 붙는 마침표가 문제를 일으키는 필드에 받아쓸 때 — 날것 전사본이 더 나은 선택이고, 앱별 덮어쓰기가 그 선택을 가능하게 합니다.
켜서 쓰는 정리, 그리고 그 둘레의 충실도 가드
이제 약속했던 LLM 이야기입니다. 더 똑똑한 정리를 원하는 사람들을 위해 Keebye는 선택형 정리 모드(polish_mode를 local_llm으로 설정)를 제공합니다. llama.cpp를 통해 온디바이스로 도는 작은 Qwen3 모델이고, Metal 가속을 쓰며, 아무것도 밖으로 보내지 않습니다. 그 지시는 정리의 좁은 판본입니다. 문장부호와 대소문자를 고치고, 군더더기를 지우고, 사용자의 정확한 단어와 언어와 의미를 유지하고, 코드와 파일명은 그대로 보존하라. 생성은 결정론적이고(그리디 샘플링, 같은 입력이면 같은 출력) 상한이 있습니다. 모델이 2초 마감을 넘겨 멈춰 서면 그 출력은 버려집니다.
하지만 지시는 바람이고, 이 글이 존재하는 이유는 바람이 보장이 아니기 때문입니다. 그래서 LLM으로 다듬어진 결과는 모두 당신의 커서에 닿기 전에 충실도 가드를 통과합니다. 출력은 원래 전사본 토큰의 최소 50%를 유지해야 합니다. 부풀어서도 안 됩니다. 원래 길이의 대략 두 배(더하기 네 토큰)를 넘으면 실패입니다. 폭주하는 반복도 감지합니다. 다듬어진 결과가 이 검사 중 하나라도 통과하지 못하면 Keebye는 그것을 버리고 규칙 기반 정리로 물러섭니다.
그 가드는 심각한 토큰 손실, 폭주 확장, 반복을 모델 출력이 규칙으로 정리된 전사본을 대체하기 전에 잡아냅니다. 이건 의미론적 증명이 아니라 휴리스틱입니다. 짧은 재작성이나 바뀐 부정은 여전히 그 문턱을 통과할 수 있습니다. 어떤 단서가 흔들려서는 안 된다면, AI 정리를 끄고 넣어진 텍스트를 보내기 전에 검토하세요.
솔직한 한계
곧이곧대로는 곧이곧대로입니다. 두서없이 말하면 그 두서없음이 그대로 도착합니다. 켜서 쓰는 정리조차 작문이 아니라 정리를 향해 지시되고 가드되므로, Keebye는 빙 도는 생각을 또렷한 지시로 바꿔 주지 않습니다. 뜻하는 바를 말하는 규율은 여전히 당신 몫입니다.
규칙 기반 정리는 의도적으로 멍청합니다. "um"은 지우지만, 문법을 고치거나 늘어진 문장을 다시 짜거나 당신이 자기모순을 저질렀다는 걸 알아채지는 않습니다. 그보다 똑똑한 무엇이든 이 설계가 피하려고 존재하는 판단의 여지를 다시 불러들일 것입니다.
그리고 충실도는 _재작성_에서 지켜 줄 뿐 _오인식_에서 지켜 주지 않습니다. 음성 모델이 "cache"를 "cash"로 잘못 들으면 그 오류는 충실하게 보존됩니다. 가드는 당신이 무엇을 말하려 했는지 모르고, 무엇이 전사되었는지만 압니다. 곧이곧대로의 받아쓰기는 신뢰 경계를 STT 모델로 옮길 뿐 없애지는 않습니다. (관련해서, 문제가 모델이 아예 다른 언어로 전사하는 것이라면 그건 다른 해법이 있는 다른 실패입니다. 받아쓰기 언어를 고정하세요.)
마지막으로 분야 차원의 틀. AI 정리는 사기가 아니고, 말하는 것보다 매끄럽게 읽히는 출력을 진심으로 선호하는 사용자도 많습니다. 당신이 그렇다면 다른 도구들이 그 방향으로 잘 기울어 있고, 저희 비교도 그렇게 솔직히 적었습니다. Keebye vs Wispr Flow와 Keebye vs Superwhisper 모두 "다른 도구가 더 맞을 때"라는 진짜 절을 담고 있습니다.
저작이 아니라 운반
Keebye가 내미는 거래는 일부러 좁습니다. 당신이 말하면, 가볍게 정리된 전사본이 커서가 있는 곳에 도착합니다. 그 말들이 문자 그대로 실행할 에이전트에게 주는 프롬프트라면, 좁은 것이 기능입니다. 받아쓰기 도구가 개발자에게 저지를 수 있는 가장 비싼 일은 오타가 아닙니다. 당신이 한 적 없는 유창한 문장입니다.
Keebye는 macOS용 얼리 액세스 중입니다. 아래에서 무료 체험을 시작해 "테스트가 통과할 때까지 배포하지 마"라고 받아쓰고, 그 제약이 정리를 그대로 통과하는지 확인해 보세요. 그 시험이 제품 전부입니다.
흔들려서는 안 되는 지시를 시험하세요
무료 체험을 시작해 결정적인 단서가 들어간 프롬프트를, 특히 '하지 마'가 들어간 프롬프트를 받아쓰고 무엇이 도착하는지 확인하세요.
Start free trialEarly access: we'll email you the moment the macOS build is ready — your 14 days start when you first sign in from the app.
계속 읽기
병렬 에이전트에 프롬프트 받아쓰기, 레인 하나씩
코딩 에이전트를 두세 개 동시에 돌리면 프롬프트 쓰는 일이 병목이 됩니다. 지금 보고 있는 레인을 떠나지 않고 병렬 레인에 먹이를 주는 음성 워크플로.
Claude Code를 목소리로 조종하기: 병렬 레인으로 만들기
AI 코딩 에이전트는 타이핑을 병목으로 만들었습니다. macOS에서 병렬 에이전트 레인을 가로질러 프롬프트와 리뷰와 방향 수정을 받아쓰는 실전 워크플로.
터미널에서도 살아남는 받아쓰기
받아쓰기 붙여넣기는 터미널, SSH, tmux, 비QWERTY 배열에서 조용히 실패합니다. 클립보드 붙여넣기 방식이 거기서 깨지는 이유와, 타이핑 모드가 대신 하는 일.