funasr-transcribe
npx skills add https://github.com/cat-xierluo/legal-skills --skill funasr-transcribe
Agent 安装分布
Skill 文档
FunASR è¯é³è½¬æå
æ¬ skill æä¾æ¬å°è¯é³è¯å«æå¡ï¼å°é³é¢æè§é¢æä»¶è½¬æ¢ä¸ºç»æåç Markdown ææ¡£ã
åè½æ¦è¿°
- æ¯æå¤ç§é³è§é¢æ ¼å¼ï¼mp4ãmovãmp3ãwavãm4aãflac çï¼
- èªå¨çææ¶é´æ³
- æ¯æè¯´è¯äººå离ï¼diarizationï¼
- è¾åº Markdown æ ¼å¼ï¼ä¾¿äºé 读åç¼è¾
ä½¿ç¨æµç¨
馿¬¡ä½¿ç¨ï¼å®è£ ä¾èµåä¸è½½æ¨¡å
è¿è¡å®è£ èæ¬å®æç¯å¢é ç½®ï¼
python scripts/setup.py
å®è£ èæ¬ä¼èªå¨ï¼
- æ£æ¥ Python çæ¬ï¼éè¦ >= 3.8ï¼
- å®è£ ä¾èµå ï¼FastAPIãUvicornãFunASRãPyTorchï¼
- ä¸è½½ ASR 模åå°
~/.cache/modelscope/hub/models/
éªè¯å®è£ ç¶æï¼
python scripts/setup.py --verify
å¯å¨è½¬å½æå¡
python scripts/server.py
æå¡é»è®¤è¿è¡å¨ http://127.0.0.1:8765
æºè½ç¹æ§ï¼
- èªå¨å¯å¨ï¼é¦æ¬¡è¯·æ±æ¶èªå¨å 载模å
- 空é²å ³éï¼é»è®¤ 10 åéæ æ´»å¨åèªå¨å ³é以èçº¦èµæº
- å¯é
ç½®è¶
æ¶ï¼ä½¿ç¨
--idle-timeoutåæ°èªå®ä¹ç©ºé²è¶ æ¶æ¶é´ï¼ç§ï¼
æå¡çå½å¨æï¼
- å¯å¨åè¿å ¥ç©ºé²çæ§ç¶æ
- æ¥æ¶å°è¯·æ±æ¶èªå¨å 载模åå¹¶æ§è¡è½¬å½
- æ¯æ¬¡è¯·æ±é½ä¼é置空é²è®¡æ¶å¨
- è¿ç» 10 åéæ è¯·æ±æ¶èªå¨å ³é
- 䏿¬¡è¯·æ±æ¶éæ°å¯å¨
éè¦æç¤ºï¼
- â ï¸ è¯·å¿æå¨å ³éæå¡ – 转å½å®æå让æå¡ç»§ç»è¿è¡ï¼å®ä¼èªå¨å¨ 10 åéæ æ´»å¨åå ³é
- è¿æ ·å¯ä»¥è¿ç»è½¬å½å¤ä¸ªæä»¶ï¼æ ééå¤å¯å¨æå¡
- å¦éç«å³å
³éæå¡ï¼æ
Ctrl+Cæçå¾ 10 åé空é²è¶ æ¶
示ä¾ï¼èªå®ä¹ 30 åé空é²è¶ æ¶
python scripts/server.py --idle-timeout 1800
æ§è¡è½¬å½
使ç¨å®¢æ·ç«¯èæ¬è½¬å½æä»¶ï¼
# 转å½å个æä»¶
python scripts/transcribe.py /path/to/audio.mp3
# æå®è¾åºè·¯å¾
python scripts/transcribe.py /path/to/video.mp4 -o transcript.md
# å¯ç¨è¯´è¯äººå离
python scripts/transcribe.py /path/to/meeting.m4a --diarize
# æ¹é转å½ç®å½
python scripts/transcribe.py /path/to/media_folder/
AI æºè½æ»ç»ï¼Claude Code ç¯å¢ï¼
转å½å®æåï¼å¯ä»¥çæ AI æºè½æ»ç»ï¼å åå©ç¨ Claude Code çåç AI è½åã
工使µç¨ï¼
- æ§è¡è½¬å½åï¼èæ¬ä¼èªå¨å夿»ç»æç¤ºè¯
- å°æç¤ºè¯åéç» Claude AI çæç»æåæ»ç»
- å° Claude è¿åç JSON ç»æç²è´´åèæ¬
- èªå¨å°æ»ç»æ³¨å ¥å° Markdown æä»¶
ä½¿ç¨æ¹æ³ï¼
# 转å½å个æä»¶ï¼ä¼èªå¨æç¤ºæ¯å¦çææ»ç»ï¼
python scripts/transcribe.py /path/to/audio.mp3
# å¯ç¨è¯´è¯äººåç¦»å¹¶çææ»ç»
python scripts/transcribe.py /path/to/meeting.m4a --diarize --summary
æ»ç»å å®¹ç»æï¼
- å ¨ææ»ç» – 400+ åï¼å å«èæ¯ãé®é¢ãå ³é®äºå®
- åè¨äººæ»ç» – æ¯ä¸ªåè¨äººçè§ç¹ãæåº¦åè´¡ç®
- éç¹å 容 – 6-10 æ¡æ ¸å¿è¦ç¹
- å ³é®è¯ – 5-8 ä¸ªå ³é®æ¯è¯
æç¤ºè¯ç¹ç¹ï¼
- ä¸é¨é坹䏿å£è¯å对è¯ä¼å
- ä¿çåè¨äººä¸ä¸æåå¯¹è¯æµç¨
- ç»æå JSON è¾åºä¾¿äºè§£æåæ ¼å¼å
è¯¦ç»ææ¡£è¯·æ¥çï¼<references/api-reference.md>
éè¿ HTTP API è°ç¨
æ£æ¥æå¡ç¶æï¼
curl http://127.0.0.1:8765/health
ä½¿ç¨ curl ç´æ¥è°ç¨ APIï¼
curl -X POST http://127.0.0.1:8765/transcribe \
-H "Content-Type: application/json" \
-d '{"file_path": "/path/to/audio.mp3"}'
API ææ¡£ï¼Swagger UIï¼ï¼
FastAPI èªå¨çæäº¤äºå¼ API ææ¡£ï¼è®¿é®ï¼http://127.0.0.1:8765/docs
å¯å¨æ¤é¡µé¢ä¸ï¼
- æ¥çææ API 端ç¹
- å¨çº¿æµè¯ APIï¼ä¸éè¦ curlï¼
- æ¥ç请æ±/ååºæ ¼å¼
- æ¥ç详ç»åæ°è¯´æ
ååºç¤ºä¾ï¼å¥åº·æ£æ¥ï¼ï¼
{
"status": "ok",
"service": "FunASR Transcribe",
"uptime": 300,
"idle_time": 120
}
è¿ååæ®µè¯´æï¼
uptimeï¼æå¡è¿è¡æ¶é´ï¼ç§ï¼idle_timeï¼å½åç©ºé²æ¶é´ï¼ç§ï¼
宿´ API ææ¡£
详ç»ç API åèææ¡£è¯·æ¥çï¼<references/api-reference.md>
å å«ï¼
- ææ API 端ç¹ç宿´è§è
- 请æ±/ååºæ ¼å¼è¯¦è§£
- åæ°è¯´æå示ä¾
- 宿´ç curl å½ä»¤ç¤ºä¾
èæ¬è¯´æ
| èæ¬ | ç¨é |
|---|---|
scripts/setup.py |
ä¸é®å®è£ ä¾èµåä¸è½½æ¨¡å |
scripts/server.py |
å¯å¨ HTTP API æå¡ |
scripts/transcribe.py |
å½ä»¤è¡å®¢æ·ç«¯ï¼Claude Code ç¨ï¼ |
scripts/auto_transcribe.py |
èªå¨å转å½èæ¬ï¼æ¨èï¼ |
OpenClaw èªå¨è½¬å½ + æ»ç»æµç¨
æ¬ skill æ¯æå¨ OpenClaw ä¸èªå¨å®æè½¬å½ + æ»ç»å ¨æµç¨ã
æ¹å¼ä¸ï¼ä½¿ç¨èªå¨åèæ¬ï¼æ¨èï¼
# èªå¨è½¬å½ + è·åæ»ç»æç¤ºè¯
python scripts/auto_transcribe.py /path/to/audio.aac
# èªå¨è½¬å½ + 说è¯äººå离
python scripts/auto_transcribe.py /path/to/audio.aac --diarize
# åªè·åæ»ç»æç¤ºè¯ï¼ä¸çææ»ç»
python scripts/auto_transcribe.py /path/to/audio.aac --prompt-only
æ¹å¼äºï¼HTTP API è°ç¨
1. 转å½é³é¢
curl -X POST http://127.0.0.1:8765/transcribe \
-H "Content-Type: application/json" \
-d '{"file_path": "/path/to/audio.aac"}'
2. è·åæ»ç»æç¤ºè¯
curl -X POST http://127.0.0.1:8765/summary \
-H "Content-Type: application/json" \
-d '{"md_path": "/path/to/audio.md"}'
ååºç¤ºä¾ï¼
{
"success": true,
"output_path": "/path/to/audio.md",
"summary_prompt": "ä½ æ¯ä¸ä½æ
é¿å¤çå£è¯å䏿坹è¯...",
"text_preview": "è½¬å½ææ¬å500å..."
}
3. æ³¨å ¥ AI æ»ç»
å¨ Agentï¼OpenClawï¼ä¸çææ»ç»åï¼è°ç¨ï¼
curl -X POST http://127.0.0.1:8765/inject_summary \
-H "Content-Type: application/json" \
-d '{
"md_path": "/path/to/audio.md",
"summary_content": "## AI æè¦\n\n### å
¨ææ»ç»\n...\n\n### éç¹å
容\n- ...\n\n### å
³é®è¯\n..."
}'
宿´æµç¨ç¤ºä¾ï¼OpenClawï¼
ç¨æ·ï¼è½¬å½è¿ä¸ªé³é¢
â
Agentï¼
1. curl -X POST /transcribe -d '{"file_path": "xxx.aac"}'
2. curl -X POST /summary -d '{"md_path": "xxx.md"}'
3. ç¨æ¨¡åçææ»ç»
4. curl -X POST /inject_summary -d '{"md_path": "xxx.md", "summary_content": "..."}'
â
ç¨æ·ï¼æ¶å°å¸¦æ»ç»ç Markdown æä»¶
API ç«¯ç¹æ±æ»
| ç«¯ç¹ | æ¹æ³ | åè½ |
|---|---|---|
/health |
GET | å¥åº·æ£æ¥ |
/transcribe |
POST | 转å½é³é¢/è§é¢ |
/batch_transcribe |
POST | æ¹é转å½ç®å½ |
/summary |
POST | çæ AI æ»ç»æç¤ºè¯ |
/inject_summary |
POST | å°æ»ç»æ³¨å ¥ Markdown æä»¶ |
ç¯å¢æ£æµ
server.py ä¼èªå¨æ£æµè¿è¡ç¯å¢ï¼
- OpenClaw: æ£æµ
OPENCLAW_SERVICE_MARKER=openclawç¯å¢åé - Claude Code: æ£æµ
CLAUDE_API_KEYæANTHROPIC_API_KEYç¯å¢åé
é ç½®æä»¶
| æä»¶ | 说æ |
|---|---|
assets/models.json |
ASR 模åé ç½®æ¸ å |
assets/requirements.txt |
Python ä¾èµæ¸ å |
è¾åºæ ¼å¼
转å½ç»æä¿å为 Markdown æä»¶ï¼å å«ï¼
- æ é¢ – æä»¶åï¼æ è½¬å½æ¶é´æ³ï¼
- 转å½å
容 – æ ¼å¼ï¼
åè¨äººN HH:MM:SSæ¢è¡å 容 - AI æè¦ï¼å¯éï¼- å å«å ¨ææ»ç»ãåè¨äººæ»ç»ãéç¹å 容ãå ³é®è¯
ç¤ºä¾æ ¼å¼ï¼
# 转å½ï¼filename.mp4
## 转å½å
容
åè¨äºº1 00:00:01
è¿æ¯ç¬¬ä¸å¥è¯çå
容ã
åè¨äºº2 00:00:05
è¿æ¯ç¬¬äºå¥è¯çå
容ã
模åä¿¡æ¯
模ååå¨å¨ ModelScope é»è®¤ç¼åç®å½ ~/.cache/modelscope/hub/models/ï¼
- ASR 主模å (Paraformer) – 867MB
- VAD æ¨¡å – 4MB
- æ ç¹æ¨¡å – 283MB
- 说è¯äººåç¦»æ¨¡å – 28MB
æ éæé¤
æå¡å¯å¨å¤±è´¥æ¶ï¼è¿è¡éªè¯å½ä»¤æ£æ¥å®è£ ç¶æï¼
python scripts/setup.py --verify
éæ°ä¸è½½æ¨¡åï¼
python scripts/setup.py --skip-deps