音訊 / 語音訊息 — 2026-01-17
運作原理
- 媒體理解 (音訊):若啟用了音訊理解功能(或自動偵測到),OpenClaw 會執行:
- 定位第一個音訊附件(本地路徑或網址),並在需要時進行下載。
- 在發送至各模型前強制執行
maxBytes大小限制。 - 依序執行第一個符合條件的模型項目(供應商或 CLI)。
- 若失敗或跳過(因大小/逾時),則嘗試下一個項目。
- 成功時,將訊息主體改為
[Audio]區塊,並設定{{Transcript}}。
- 指令解析:轉錄成功後,
CommandBody/RawBody會被設定為轉錄內容,因此斜線指令仍可運作。 - 詳細日誌:在
--verbose模式下,我們會記錄轉錄執行的時機及其何時取代訊息主體。
自動偵測(預設)
如果您未配置模型且tools.media.audio.enabled 未設為 false,OpenClaw 會依序偵測並停在第一個可用的選項:
- 本地 CLI(若已安裝)
sherpa-onnx-offline(需要SHERPA_ONNX_MODEL_DIR搭配 encoder/decoder/joiner/tokens)whisper-cli(來自whisper-cpp;使用WHISPER_CPP_MODEL或內附的 tiny 模型)whisper(Python CLI;自動下載模型)
- Gemini CLI(
gemini)使用read_many_files - 供應商金鑰(OpenAI → Groq → Deepgram → Google)
tools.media.audio.enabled: false。
若要自訂,請設定 tools.media.audio.models。
注意:CLI 偵測在 macOS/Linux/Windows 上採用最佳效力;請確保 CLI 在 PATH 上(我們會展開 ~),或設定完整命令路徑的明確 CLI 模型。
設定範例
供應商 + CLI 備援(OpenAI + Whisper CLI)
供應商限制(含範圍限制)
僅供應商(Deepgram)
僅供應商(Mistral Voxtral)
回音轉錄至聊天(選擇加入)
注意事項與限制
- 供應商認證遵循標準模型認證順序(認證設定檔、環境變數、
models.providers.*.apiKey)。 - Deepgram 在使用
provider: "deepgram"時會讀取DEEPGRAM_API_KEY。 - Deepgram 設定詳情:Deepgram(音訊轉錄)。
- Mistral 設定詳情:Mistral。
- 音訊供應商可透過
tools.media.audio覆蓋baseUrl、headers和providerOptions。 - 預設大小上限為 20MB(
tools.media.audio.maxBytes)。超過大小的音訊會跳過該模型,嘗試下一個項目。 - 小於 1024 位元組的微小/空音訊檔案在供應商/CLI 轉錄前會被跳過。
- 音訊的預設
maxChars為未設定(完整轉錄)。設定tools.media.audio.maxChars或每項的maxChars以修剪輸出。 - OpenAI 自動預設為
gpt-4o-mini-transcribe;設定model: "gpt-4o-transcribe"以獲得更高準確度。 - 使用
tools.media.audio.attachments處理多個語音訊息(mode: "all"+maxAttachments)。 - 轉錄內容可透過
{{Transcript}}在模板中使用。 tools.media.audio.echoTranscript預設為關閉;啟用它以在代理程式處理前將轉錄確認傳送回原始聊天。tools.media.audio.echoFormat自訂回音文字(預留位置:{transcript})。- CLI stdout 有上限(5MB);保持 CLI 輸出簡潔。
Proxy 環境支援
基於提供商的音訊轉錄遵循標準出站 Proxy 環境變數:HTTPS_PROXYHTTP_PROXYhttps_proxyhttp_proxy
群組中的提及偵測
當為群組聊天設定requireMention: true 時,OpenClaw 現在會在檢查提及前轉錄音訊。這允許語音訊息即使包含提及也能被處理。
運作方式:
- 若語音訊息沒有文字主體且群組需要提及,OpenClaw 會執行「預檢」轉錄。
- 轉錄內容會被檢查是否有提及模式(例如
@BotName、emoji 觸發)。 - 若找到提及,訊息會通過完整回應管道。
- 轉錄會用於提及偵測,因此語音訊息可以通過提及門檻。
- 若預檢期間轉錄失敗(逾時、API 錯誤等),訊息會根據純文字提及偵測進行處理。
- 這確保混合訊息(文字 + 音訊)永遠不會被錯誤地丟棄。
- 設定
channels.telegram.groups.<chatId>.disableAudioPreflight: true以跳過該群組的預檢轉錄提及檢查。 - 設定
channels.telegram.groups.<chatId>.topics.<threadId>.disableAudioPreflight以逐主題覆蓋(true跳過,false強制啟用)。 - 預設為
false(當提及限制條件符合時預檢已啟用)。
requireMention: true 的 Telegram 群組中傳送語音訊息說「嘿 @Claude,天氣如何?」。語音訊息被轉錄,提及被偵測,代理程式會回覆。
常見陷阱
- 範圍規則遵循先匹配先贏。
chatType被標準化為direct、group或room。 - 請確保您的 CLI 結束狀態碼為 0 並印出純文字;JSON 需透過
jq -r .text進行處理。 - 對於
parakeet-mlx,若您傳遞--output-dir,OpenClaw 會在--output-format為txt(或省略)時讀取<output-dir>/<media-basename>.txt;非txt輸出格式回退至 stdout 解析。 - 保持合理的逾時時間(
timeoutSeconds,預設 60 秒)以避免阻塞回應佇列。 - 預檢轉錄只處理第一個音訊附件以進行提及偵測。其他音訊會在主媒體理解階段進行處理。