오디오 / 음성 메모 (2026-01-17)
작동하는 항목
- 미디어 이해(오디오): 오디오 이해가 활성화되어 있거나 자동 감지되면, OpenClaw는 다음을 수행합니다:
- 첫 번째 오디오 첨부 파일(로컬 경로 또는 URL)을 찾고 필요하면 다운로드합니다.
- 각 모델 항목에 보내기 전에
maxBytes를 적용합니다. - 순서대로 첫 번째 적격 모델 항목(provider 또는 CLI)을 실행합니다.
- 실패하거나 건너뛰면(크기/타임아웃), 다음 항목을 시도합니다.
- 성공하면
Body를[Audio]블록으로 대체하고{{Transcript}}를 설정합니다.
- 명령 파싱: 전사에 성공하면 슬래시 명령이 계속 동작하도록
CommandBody/RawBody가 transcript로 설정됩니다. - 상세 로깅:
--verbose에서는 전사가 실행되는 시점과 본문이 대체되는 시점을 로그에 기록합니다.
자동 감지 (기본값)
모델을 구성하지 않고tools.media.audio.enabled가 false로 설정되어 있지 않으면,
OpenClaw는 다음 순서로 자동 감지하며 처음으로 동작하는 옵션에서 중지합니다:
- 해당 provider가 오디오 이해를 지원하는 경우 활성 응답 모델
- 로컬 CLI(설치된 경우)
sherpa-onnx-offline(SHERPA_ONNX_MODEL_DIR에 encoder/decoder/joiner/tokens 필요)whisper-cli(whisper-cpp제공,WHISPER_CPP_MODEL또는 번들 tiny 모델 사용)whisper(Python CLI, 모델 자동 다운로드)
read_many_files를 사용하는 Gemini CLI (gemini)- provider 인증
- 오디오를 지원하는 구성된
models.providers.*항목을 먼저 시도합니다 - 번들 대체 순서: OpenAI → Groq → Deepgram → Google → Mistral
- 오디오를 지원하는 구성된
tools.media.audio.enabled: false로 설정하세요.
사용자 지정하려면 tools.media.audio.models를 설정하세요.
참고: 바이너리 감지는 macOS/Linux/Windows 전반에서 best-effort로 수행됩니다. CLI가 PATH에 있어야 하며(~는 확장됨), 아니면 전체 명령 경로가 포함된 명시적 CLI 모델을 설정하세요.
구성 예시
provider + CLI 대체 (OpenAI + Whisper CLI)
범위 게이팅이 있는 provider 전용
provider 전용 (Deepgram)
provider 전용 (Mistral Voxtral)
transcript를 채팅에 반향 출력 (opt-in)
참고 및 제한 사항
- provider 인증은 표준 모델 인증 순서(auth profiles, env vars,
models.providers.*.apiKey)를 따릅니다. - Groq 설정 세부 사항: Groq.
provider: "deepgram"을 사용할 때 Deepgram은DEEPGRAM_API_KEY를 사용합니다.- Deepgram 설정 세부 사항: Deepgram (audio transcription).
- Mistral 설정 세부 사항: Mistral.
- 오디오 provider는
tools.media.audio를 통해baseUrl,headers,providerOptions를 재정의할 수 있습니다. - 기본 크기 상한은 20MB입니다(
tools.media.audio.maxBytes). 초과 크기 오디오는 해당 모델에서 건너뛰고 다음 항목을 시도합니다. - 1024바이트보다 작은 아주 작거나 비어 있는 오디오 파일은 provider/CLI 전사 전에 건너뜁니다.
- 오디오의 기본
maxChars는 설정되지 않음(전체 transcript). 출력을 잘라내려면tools.media.audio.maxChars또는 항목별maxChars를 설정하세요. - OpenAI 자동 기본값은
gpt-4o-mini-transcribe입니다. 더 높은 정확도를 원하면model: "gpt-4o-transcribe"를 설정하세요. - 여러 음성 메모를 처리하려면
tools.media.audio.attachments를 사용하세요(mode: "all"+maxAttachments). - transcript는 템플릿에서
{{Transcript}}로 사용할 수 있습니다. tools.media.audio.echoTranscript는 기본적으로 꺼져 있습니다. 에이전트 처리 전에 transcript 확인 메시지를 원래 채팅으로 다시 보내려면 활성화하세요.tools.media.audio.echoFormat은 echo 텍스트를 사용자 지정합니다(플레이스홀더:{transcript}).- CLI stdout에는 상한(5MB)이 있으므로 CLI 출력은 간결하게 유지하세요.
프록시 환경 지원
provider 기반 오디오 전사는 표준 아웃바운드 프록시 env var를 지원합니다:HTTPS_PROXYHTTP_PROXYhttps_proxyhttp_proxy
그룹에서의 멘션 감지
그룹 채팅에requireMention: true가 설정되면, OpenClaw는 이제 멘션을 확인하기 전에 오디오를 전사합니다. 이를 통해 멘션이 포함된 음성 메모도 처리할 수 있습니다.
동작 방식:
- 음성 메시지에 텍스트 본문이 없고 그룹에 멘션이 필요하면, OpenClaw는 “preflight” 전사를 수행합니다.
- transcript에서 멘션 패턴(예:
@BotName, 이모지 트리거)을 확인합니다. - 멘션이 발견되면 메시지는 전체 응답 파이프라인으로 진행됩니다.
- transcript는 멘션 감지에 사용되므로 음성 메모도 멘션 게이트를 통과할 수 있습니다.
- preflight 중 전사가 실패하면(타임아웃, API 오류 등), 메시지는 텍스트 전용 멘션 감지를 기준으로 처리됩니다.
- 이렇게 하면 혼합 메시지(텍스트 + 오디오)가 잘못 버려지는 일이 없도록 보장합니다.
- 해당 그룹의 preflight transcript 멘션 검사를 건너뛰려면
channels.telegram.groups.<chatId>.disableAudioPreflight: true를 설정하세요. - 토픽별 재정의를 위해
channels.telegram.groups.<chatId>.topics.<threadId>.disableAudioPreflight를 설정하세요(true면 건너뜀,false면 강제 활성화). - 기본값은
false입니다(멘션 게이트 조건이 일치하면 preflight 활성화).
requireMention: true가 설정된 Telegram 그룹에서 “Hey @Claude, what’s the weather?”라고 말하는 음성 메모를 보냅니다. 음성 메모가 전사되고 멘션이 감지되며 에이전트가 응답합니다.
주의할 점
- 범위 규칙은 first-match wins를 사용합니다.
chatType은direct,group,room으로 정규화됩니다. - CLI가 종료 코드 0으로 끝나고 일반 텍스트를 출력하는지 확인하세요. JSON은
jq -r .text로 가공해야 합니다. parakeet-mlx의 경우--output-dir를 전달하면,--output-format이txt이거나 생략된 경우 OpenClaw는<output-dir>/<media-basename>.txt를 읽습니다.txt가 아닌 출력 형식은 stdout 파싱으로 대체됩니다.- 응답 큐를 막지 않도록 타임아웃(
timeoutSeconds, 기본값 60초)을 적절하게 유지하세요. - preflight 전사는 멘션 감지를 위해 첫 번째 오디오 첨부 파일만 처리합니다. 추가 오디오는 기본 미디어 이해 단계에서 처리됩니다.