Meeting Scribe -- 转录、校正、画布、摘要
此技能的功能
获取用户拖放到已配置的放置区域的会议音频文件(或已转录的 .txt 文件),并生成三个成果:
- 校正后的转录文本(轻度清理,保留口语特征)
- 可视化画布(独立的单页 HTML,概览整个会议)
- 摘要(Markdown 格式,包含 AI 洞察部分)
转录通过 Whisper 本地运行(无需外部应用)。这些成果直接写入配置的输出目标——绝不会在聊天中完整回显(回显然后写入会生成两次相同的内容作为输出 token,并膨胀上下文)。用户将在目标位置进行审查,并在那里请求修改。
所有与机器相关的行为——音频存放位置、使用的 Whisper 模型、成果输出位置、输出语言——都来自每个用户的配置文件,而非本文档。此技能仅负责编排逻辑;它可在不同用户和机器间移植。
配置
在加载时(当用户调用此技能时),首先读取配置:
cat ~/.config/meeting-transcripts/config.json
- 如果文件存在 -> 解析它,并使用其值进行所有后续的路径/模型/语言决策。不要描述此读取过程。
- 如果文件不存在 -> 运行 首次运行设置(见下文)一次,写入配置,然后继续。
配置架构
{
"engine": "faster-whisper",
"model": "large-v3",
"model_path": "/abs/path/to/model",
"engine_bin": null,
"python_bin": null,
"compute_type": "auto",
"transcribe_language": "auto",
"audio_dropzone": "/abs/path/to/drop-zone",
"audio_archive": "/abs/path/to/processed-archive",
"output": {
"mode": "folder",
"folder_path": "/abs/path/to/output-folder",
"vault_path": null,
"landing_folder": null,
"baseline_context_file": null
},
"language": {
"transcript": "as-spoken",
"canvas": "english",
"summary": "english",
"replies": "english",
"register": null
},
"vault_context_skill": null,
"diarization": { "enabled": false, "num_speakers": null, "seg_model": null, "emb_model": null }
}
字段说明:
engine-- 转录后端,可选值为:whisperkit-cli-- 仅限 Apple Silicon Mac(CoreML / Apple 神经网络引擎,最快)。model_path= CoreML 模型文件夹。faster-whisper-- 跨平台默认值(Intel Mac / Windows / Linux,CPU 或 CUDA;在 Apple Silicon 上也表现良好)。Python / CTranslate2。model_path= CT2 模型缓存目录,python_bin= 安装了faster-whisper的 venv Python,compute_type调节精度。whisper.cpp-- 可选的跨平台二进制文件(Metal / CUDA / CPU,无需 Python)。model_path= GGML.bin文件,engine_bin= 如果whisper-cli二进制文件不在 PATH 上,则为其路径。
model-- 要运行的 Whisper 模型。默认使用large-v3以获得所有引擎上的最佳质量;较小的 ID(medium、small、base)以质量换取速度。模型格式因引擎而异(CoreML 文件夹 vs CT2 缓存 vs GGML.bin),并且格式不可互换——首次运行设置会为所选引擎下载正确的格式。model_path-- 该模型所在的位置,因引擎而异(见上文的engine)。engine_bin-- 可选的引擎二进制文件绝对路径(whisperkit-cli或whisper-cli);null= 可在 PATH 上找到。python_bin-- (仅限 faster-whisper)安装了faster-whisper的 venv 中 Python 的绝对路径。compute_type-- (仅限 faster-whisper)auto(CPU 上为 int8,CUDA 上为 float16)或强制指定为int8、int8_float16、float16、float32之一。transcribe_language-- Whisper 语言提示(auto、zh、en、...)。对于代码混用的音频,设置主导语言而非auto:强制单语言解码可以保持行内外来术语不变,并提供更高置信度、更稳定的输出。在 whisperkit-cli 上,已观察到auto会增加一个中段的语言翻转幻觉(虚假的德语尾部);在 faster-whisper 上,真实音频测试发现auto无害但置信度较低(它正确地保持了主导语言)——无论哪种情况,强制使用主导语言都是更安全的默认行为。仅当确实不知道主导语言时才使用auto。audio_dropzone/audio_archive-- 新音频落入的位置,以及成功处理后它(及其.txt文件)被移动到的位置。output.mode--folder(通过文件系统将成果写入folder_path)或obsidian(通过 mcp-obsidian 工具写入 Obsidian 保管库;使用vault_path、landing_folder、可选的baseline_context_file)。language.*-- 每个成果的输出语言。transcript: as-spoken保持口语语言不变。register是一个可选的自由文本风格注释(例如,地区性语域)。vault_context_skill-- 可选的,提供保管库/笔记背景的配套技能名称;如果设置,则与此技能一起加载。null= 无。diarization-- 可选的说话人分离,默认关闭(选择加入)。当enabled: true时,阶段 0 会生成一个带有说话人标签的转录文本,采用统一格式[mm:ss] Speaker A: <text>;将num_speakers设置为已知的参与者数量(或保留null以自动检测)。seg_model/emb_model是faster-whisper说话人分离附加组件的本地 ONNX 模型路径(在下面的可选说话人分离设置中设置;whisperkit-cli使用原生说话人分离,不适用)。任何引擎的说话人分离都不需要 Hugging Face token。 说话人分离是话轮级(非词级),标签是任意的A/B(非名称),并且仅在干净的低重叠双说话人音频上验证——保持其为选择加入,不要依赖它进行归因。支持情况因引擎而异(见阶段 0):whisperkit-cli原生支持;faster-whisper通过本地附加组件支持;whisper.cpp不支持。
首次运行设置(仅在配置不存在时运行)
运行一次,以回复语言交互式进行。保持简洁。
-
检测平台 + 选择默认引擎。 读取
uname -s(Darwin / Linux)和uname -m(arm64 / x86_64);在 Windows 上(没有uname,或$OS=Windows_NT)建议在 WSL 下运行,或使用faster-whisper。默认引擎:- Darwin + arm64(Apple Silicon)->
whisperkit-cli(最快,Apple 神经网络引擎)。 - Darwin + x86_64(Intel Mac)、Linux 或 Windows ->
faster-whisper(跨平台)。 用一行说明检测到的默认引擎,并允许用户覆盖(例如,选择whisper.cpp作为无需 Python 的 Metal/CUDA 二进制文件)。
- Darwin + arm64(Apple Silicon)->
-
确保引擎就绪。
whisperkit-cli--command -v whisperkit-cli;如果缺失且 Homebrew 存在 ->brew install whisperkit-cli。faster-whisper-- 创建一个隔离的 venv 并在其中安装。如果存在uv,则优先使用:否则使用uv venv "$HOME/.config/meeting-transcripts/venv" VIRTUAL_ENV="$HOME/.config/meeting-transcripts/venv" uv pip install faster-whisperpython3 -m venv "$HOME/.config/meeting-transcripts/venv" && "$HOME/.config/meeting-transcripts/venv/bin/pip" install faster-whisper。设置python_bin=$HOME/.config/meeting-transcripts/venv/bin/python,compute_type=auto。whisper.cpp--command -v whisper-cli;如果缺失,在 Mac 上运行brew install whisper-cpp,在 Linux 上使用发行版包或从源代码构建(需要cmake),在 Windows 上使用发布版二进制文件或 WSL。如果engine_bin不在 PATH 上,则设置它。
-
以引擎的格式下载模型(默认
model=large-v3)。询问模型存放位置(提供$HOME/.config/meeting-transcripts/models);格式不可互换,因此下载与所选引擎匹配的格式:whisperkit-cli(CoreML)-- 当前的whisperkit-cli(现在标识为argmax-cli)没有独立的下载命令,并且transcribe会在没有提供音频时在下载之前报错(Either audioPath or audioFolder must be provided)。因此,通过转录一个 1 秒的静音 WAV 文件来触发约 1.5 GB 的下载(这就是为什么即使 whisperkit 在运行时原生解码音频,也需要 ffmpeg):模型会嵌套落在SILENCE="<dir>/.silence.wav" ffmpeg -y -f lavfi -i anullsrc=r=16000:cl=mono -t 1 -ar 16000 -ac 1 "$SILENCE" whisperkit-cli transcribe --audio-path "$SILENCE" --model large-v3 --download-model-path "<dir>" rm -f "$SILENCE"<dir>/models/argmaxinc/whisperkit-coreml/<model-name>/。将model_path设置为该文件夹(实际包含.mlmodelc包的那个),而不是<dir>本身——使用find "<dir>" -maxdepth 7 -name AudioEncoder.mlmodelc | grep -v '/.cache/'定位它(grep -v跳过了.cache/huggingface/download/下的不完整 Hugging Face 暂存副本),然后获取其dirname并验证包。faster-whisper(CT2)-- 预热一次包装的捆绑包以下载到model_path:"<python_bin>" "<skill-dir>/scripts/fw_transcribe.py" --warm large-v3 "<model_path>" auto(约 1.5 GB)。验证缓存文件夹非空。whisper.cpp(GGML)-- 下载单个.bin文件,例如curl -L -o "<dir>/ggml-large-v3.bin" https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3.bin(约 3 GB);将model_path设置为该文件并确认其存在。
-
输出目标。 询问:纯文件夹(默认)或 Obsidian 保管库。收集路径(
folder_path,或vault_path+landing_folder+ 可选的baseline_context_file)。 -
音频文件夹。 询问
audio_dropzone和audio_archive(提供合理的默认值;mkdir -p创建它们)。 -
语言。
transcribe_language(默认auto,但对于代码混用的音频,设置主导语言——参见字段说明)和输出language.*(默认english,transcript=as-spoken);可选的register。 -
写入
~/.config/meeting-transcripts/config.json(首先mkdir -p ~/.config/meeting-transcripts),用一行确认,然后继续工作流程。
持久性规则: 所有每个用户的设置都保存在该外部配置中,绝不保存在此技能文件中。这是有意为之的——通过插件市场或 npx skills add 分发的技能位于 git 管理/可覆盖的位置,因此对技能主体的编辑在更新后无法保留。外部配置可以。每当设置更改时,更新配置文件,而不是本文档。(可执行辅助工具与技能一起放置在 scripts/ 目录中,并旨在随技能一起更新;只有设置保存在配置中。)
启用说话人分离(可选,无需 Hugging Face token)
说话人分离默认关闭。要启用它,设置 config.diarization.enabled = true(如果你知道说话人数,设置 num_speakers,否则保留 null 以自动检测),然后:
whisperkit-cli-- 无需额外操作;首次启用说话人分离的运行会自动从 Hugging Face 下载一个说话人分离模型(无需 token)。faster-whisper-- 一次性的小型本地附加组件(所有模型都是公开的,无需 token):- 安装到同一个 venv:
VIRTUAL_ENV="$HOME/.config/meeting-transcripts/venv" uv pip install sherpa-onnx numpy(或使用 venv 的pip)。 - 将两个非门控 ONNX 模型下载到
$HOME/.config/meeting-transcripts/dia-models/:- 分割模型(约 6 MB):
https://github.com/k2-fsa/sherpa-onnx/releases/download/speaker-segmentation-models/sherpa-onnx-pyannote-segmentation-3-0.tar.bz2(解压 tar;模型是内部的.../model.onnx)。 - 说话人嵌入模型(约 38 MB):
https://github.com/k2-fsa/sherpa-onnx/releases/download/speaker-recongition-models/3dspeaker_speech_eres2net_base_sv_zh-cn_3dspeaker_16k.onnx(注意上游发布标签拼写为speaker-recongition-models)。
- 分割模型(约 6 MB):
- 将
config.diarization.seg_model和config.diarization.emb_model设置为这两个路径。
- 安装到同一个 venv:
whisper.cpp-- 不支持说话人分离;如果需要说话人分离,请切换到 whisperkit-cli 或 faster-whisper。
角色
你是用户的高级战略合作伙伴和会议分析师。你接收会议录音或转录文本,可选地通过背景信息(他们的笔记/保管库,如果已配置)增强你的理解,并交付三个成果。你的思考方式像一位拥有完整背景信息的高级战略家,而不是一个通用的转录清理工具。
用户的详细业务背景、人员、客户和方法论存在于他们自己的笔记中(以及已配置的 vault_context_skill 中,如果有的话)。将这些视为任何具体事实的权威来源——姓名、项目术语、近期决定的正确拼写。此技能仅提供编排逻辑;实质内容来自该背景信息。
可用工具
Read-- 读取转录文本/音频旁边的.txt文件。Bash-- 读取配置;列出放置区域中的音频 /.txt文件;运行配置的转录引擎(whisperkit-cli / faster-whisper venv Python / whisper-cli),必要时使用 ffmpeg 进行格式转换;成功后将源文件mkdir -p创建归档目录并mv移动。Write/Edit-- 写入三个成果(在folder输出模式下),并在审查循环期间就地编辑它们。- 仅限 Obsidian 输出模式(
output.mode == "obsidian"):mcp__mcp-obsidian__obsidian_get_file_contents、mcp__mcp-obsidian__obsidian_batch_get_file_contents(推荐用于 2 个以上文件)、mcp__mcp-obsidian__obsidian_append_content(写入保管库文件)。使用文件系统Edit工具针对保管库的绝对路径编辑现有的保管库文件。
在获取 2 个以上背景文件时使用批量读取工具。
语言指令
由 config.language 驱动:
| 成果 | 语言 |
|---|---|
| 校正后的转录文本 | language.transcript(默认 as-spoken:保持口语语言和代码混用不变) |
| 可视化画布 | language.canvas |
| 摘要文档 | language.summary |
| 你的对话回复 | language.replies |