mcpField
B
byted-voice-to-text

byted-voice-to-text

github.com/bytedance生産性47795 回インストール今日更新
リポジトリ

byted-voice-to-text について

byted-voice-to-text は、Volcengine BigModel ASR を使って音声を文字起こしするスキルです。音声の事前検査後、長さやサイズ、入力元に応じて高速版または標準版のスクリプトを選びます。

主な機能

  1. 01音声メタデータの事前検査
  2. 02高速版と標準版の認識スクリプト
  3. 03ローカルファイル、URL、Feishu 音声に対応
  4. 04音声の長さとサイズに応じた振り分け
  5. 05ffmpeg/ffprobe の自動検出と導入

活用シーン

  1. 01Feishu の音声メッセージを文字起こし
  2. 02ローカル音声ファイルの文字起こし
  3. 03公開 URL 上の音声の認識
  4. 04文字起こしをもとにユーザー依頼を処理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bytedance/agentkit-samples --skill byted-voice-to-text

インストール後、Claude Code で/byted-voice-to-textを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
requirements.txt
references/
routing_strategy.md
scripts/
api_key.py
inspect_audio.py
asr_flash.py
ensure_ffmpeg.py
asr_standard.py

詳細

Voice to Text Skill

火山引擎 BigModel ASR を使用して音声をテキストに変換します。精度と多言語対応能力はローカルの whisper を大幅に上回り、速度もより高速です。

コア実行フロー

  1. 飛書の音声メッセージ(message_type: audio)を受信し、音声内容を自動認識する必要がある場合
  2. ユーザーから音声の文字起こしを依頼された場合:
    • まず inspect_audio.py を実行します
    • 続いて、長さ、サイズ、URL/ローカルパスに応じて asr_flash.py(高速版)または asr_standard.py(標準版)を選択します
  3. ffmpeg/ffprobe がない場合:まず ensure_ffmpeg.py --execute を実行します
  4. ユーザーからインストール、利用開始、手動設定について質問された場合:文末の reference map に従って、該当するドキュメントを読みます

強制ルール(最優先)

音声メッセージまたは音声ファイルの添付を受信した場合:

  • 音声の認識には、本 Skill のスクリプトを必ず使用し、これ以外は使用しないでください
  • whisper コマンドまたは openai-whisper skill の使用は禁止です
  • フォールバックは禁止です:スクリプトが失敗した場合は、エラー情報をそのままユーザーに伝え、whisper に切り替えないでください
  • 認識の前に必ず検査します:常に最初に python3 <SKILL_DIR>/scripts/inspect_audio.py "<AUDIO_INPUT>" を実行します
  • ffmpeg/ffprobe がない場合は、まず自動でインストールします:最初に python3 <SKILL_DIR>/scripts/ensure_ffmpeg.py --execute を実行し、失敗した場合に限りユーザーに支援を求めます

使用手順

  1. 音声のソース(ローカルファイル、URL、または飛書の音声 file_key)を確認します。
  2. スクリプトを実行する前に、まず本スキルのディレクトリ skills/byted-voice-to-text に cd します。
  3. 該当するコマンドを実行します(下記のパラメーター説明を参照)。
  4. スクリプトが出力したテキストをユーザーが送信したテキストメッセージとして扱い、その意図を理解して通常どおり返信します。「音声認識の結果はxxxです」などの追加説明は不要です。ユーザーの質問にそのまま回答してください。

ルーティング早見表

ローカルファイル
条件スクリプト
長さ ≤ 2h かつ サイズ ≤ 100MBasr_flash.py --file "<FILE>" (高速版、同期で高速に返します)
2h < 長さ ≤ 5hasr_standard.py --file "<FILE>" (標準版、非同期の submit+poll)
長さ > 5h非対応です。まず分割し、各部分を高速版で処理します
長さを取得できず、サイズ ≤ 100MBasr_flash.py --file "<FILE>" (高速版をフォールバックとして使用)
長さを取得できず、サイズ > 100MBasr_standard.py --file "<FILE>" (標準版をフォールバックとして使用)
パブリック URL
  • デフォルトでは asr_standard.py --url "<URL>" を直接使用します
  • 事前にローカルへダウンロードしたり、検査やトランスコードを行ってからルーティングしたりしないでください
  • 標準版が実際に失敗した場合に限り、エラーに応じてローカルへのダウンロード/分割の処理に進むかどうかを判断します

URL、大きなファイル、分割に関する判断が必要な場合は、routing_strategy.md を参照してください。

環境変数と認証

認証には新しいコンソール方式を使用します。詳しくはクイックスタート(新しいコンソール)を参照してください。

環境変数用途必須
MODEL_SPEECH_API_KEYAPI Key(新しいコンソール方式)はい
MODEL_SPEECH_APP_IDApp ID(旧方式の認証時に併用)いいえ
MODEL_SPEECH_ASR_API_BASE高速版エンドポイント(デフォルト値あり)いいえ
MODEL_SPEECH_ASR_RESOURCE_ID高速版リソース ID(デフォルトは volc.bigasr.auc_turbo)いいえ
MODEL_SPEECH_ASR_STANDARD_SUBMIT_URL標準版の送信エンドポイント(デフォルト値あり)いいえ
MODEL_SPEECH_ASR_STANDARD_QUERY_URL標準版のクエリエンドポイント(デフォルト値あり)いいえ
MODEL_SPEECH_ASR_STANDARD_RESOURCE_ID標準版リソース ID(デフォルトは volc.bigasr.auc)いいえ
FEISHU_TENANT_TOKEN飛書 tenant_access_token(--file-key モードのみ)いいえ

スクリプト一覧

スクリプト用途対応モード
scripts/inspect_audio.py音声メタデータの検査(長さ、サンプリングレート、チャンネルなど)事前チェック
scripts/ensure_ffmpeg.pyffmpeg/ffprobe の自動検出とインストール事前チェック
scripts/asr_flash.py高速版の認識(≤2h/100MB、同期)Express/Flash
scripts/asr_standard.py標準版の認識(≤5h、非同期 submit+poll)Standard

最小スクリプト例

# 预检:探测音频元信息
python3 <SKILL_DIR>/scripts/inspect_audio.py "<AUDIO_INPUT>"

# 缺 ffmpeg 时自动安装
python3 <SKILL_DIR>/scripts/ensure_ffmpeg.py --execute

# 极速版(短音频,≤2h/100MB)
python3 <SKILL_DIR>/scripts/asr_flash.py --file "<AUDIO_FILE>"

# 标准版(长音频或 URL)
python3 <SKILL_DIR>/scripts/asr_standard.py --url "<AUDIO_URL>"
python3 <SKILL_DIR>/scripts/asr_standard.py --file "<LONG_AUDIO_FILE>"

# 标准版:仅提交不轮询
python3 <SKILL_DIR>/scripts/asr_standard.py --url "<URL>" --no-poll

# 标准版:查询已有任务
python3 <SKILL_DIR>/scripts/asr_standard.py --query-task-id <ID> --query-logid <LOGID>

asr_flash.py(高速版)のパラメーター

パラメーター必須説明
--file3つのうちいずれかローカル音声ファイルのパス
--url3つのうちいずれか音声ファイルの URL
--file-key3つのうちいずれか飛書の音声メッセージの file_key
--feishu-tokenいいえ飛書 tenant_access_token
--appidいいえApp ID
--tokenいいえAPI Key
--languageいいえ言語コード

asr_standard.py(標準版)のパラメーター

パラメーター必須説明
--url2つのうちいずれか音声ファイルの URL
--file2つのうちいずれかローカル音声ファイルのパス
--appidいいえApp ID
--tokenいいえAPI Key
--languageいいえ言語コード
--no-pollいいえタスクの送信のみを行い、結果をポーリングしません
--poll-intervalいいえポーリング間隔(秒、デフォルトは 3)
--poll-max-timeいいえポーリングの最大時間(秒、デフォルトは 10800)
--query-task-idいいえ既存のタスク ID をクエリします
--query-logidいいえクエリ時に渡す X-Tt-Logid

飛書の音声メッセージの処理フロー

收到 audio 消息 → 音频文件已下载到 /root/.openclaw/media/inbound/ → 执行 asr_flash.py --file → 返回文字 → 当作用户消息处理

よく使うコマンド:

# 飞书语音文件(最常用,文件已被飞书插件自动下载)
python scripts/asr_flash.py --file "/root/.openclaw/media/inbound/xxxxx.ogg"

エラー処理

  • PermissionError: MODEL_SPEECH_API_KEY ... → API Key を設定するようユーザーに案内します
  • ASR 请求失败 → API 認証情報とアカウントを確認します
  • 音频时长超过 5 小时 → ファイルを分割するようユーザーに案内します
  • 音频文件不存在/为空 → ファイルパスを確認します
  • エラーが発生した場合は、具体的なエラーをそのままユーザーに伝え、whisper で代替しないでください。

references を引き続き読む場合

  • URL/大きなファイル/分割/ルーティングの詳細:routing_strategy.md を読みます

参考ドキュメント

コメント