小宇宙播客笔记生成器
把一条小宇宙单集链接,变成一份类型匹配、可直接归档的 Markdown 笔记。
何时用本技能
- 用户给出小宇宙单集链接(
https://www.xiaoyuzhoufm.com/episode/<id>),想要笔记/总结/逐字稿; - 用户已有音频文件或转录文本,想按类型整理成结构化笔记;
- 用户想批量整理某档播客的多期内容。
总体流程(五步)
- 取数据 —— 用
scripts/fetch_episode.py解析链接,拿到标题、播客名、发布日期、时长、音频直链、shownotes(含图文与图表)、章节;若页面自带官方转录,一并取出。 - 得转录 —— 若第 1 步已有官方转录,直接用;否则下载音频并用
scripts/transcribe.py --backend funasr-local本地转录(带说话人分离)。 - 判类型 —— 根据播客名 + shownotes + 转录开头,判断内容类型,选定模板(见下)。类型不明确时问用户一次。
- 写笔记 —— 由当前 WorkBuddy 内置大模型直接生成:读取对应模板文件,用转录 + shownotes 逐块填充。不要照抄模板里的说明文字,要输出填好的真实内容。
- 存文件 —— 保存两个成品:
<播客名>-<集标题>-笔记.md和<播客名>-<集标题>-逐字稿.txt(逐字稿一并留档),用present_files(若可用)交给用户。
第 1 步:取数据
python scripts/fetch_episode.py "<小宇宙链接或episode_id>" --out ./_work
脚本会在 ./_work/ 下生成:
- meta.json —— 结构化元数据(title / podcast_title / pub_date / duration_sec / audio_url / eid / has_official_transcript)
- shownotes.md —— shownotes 正文(已转 Markdown,保留图片链接和图表说明)
- chapters.json —— 章节时间戳(若有)
- official_transcript.txt —— 官方转录(若页面自带)
加 --download 会把音频存到 ./_work/audio.m4a:
python scripts/fetch_episode.py "<链接>" --out ./_work --download
> 说明:本脚本只处理公开单集。付费或需登录的内容拿不到直链,此时提示用户改用官方 App 导出音频,再走"已自备音频"路径。
第 2 步:得转录(默认本地 FunASR,带说话人分离)
核心原则:笔记必须基于真转录稿,不能只靠 shownotes 推断。 按下面优先级逐级尝试,前一级成功就停:
① 官方转录:若 meta.json 里 has_official_transcript 为真,直接用 official_transcript.txt。最准、零成本,跳过 ASR。
② 本地转录(默认,带说话人分离,模型走 ModelScope):
首次使用先准备环境(只需一次):
cd <技能目录>
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements-local.txt
然后(每期):
# 1) 下载音频
python scripts/fetch_episode.py "<链接>" --out ./_work --download
# 2) 转录(FunASR:paraformer-zh + cam++ 说话人分离;模型首次自动从 ModelScope 下载约 1GB)
python scripts/transcribe.py ./_work/audio.m4a --out ./_work --backend funasr-local
# 长音频/低内存机器(8GB 内存跑 60 分钟+ 音频)建议加 --chunk-sec 720 自动切段逐段转录:
python scripts/transcribe.py ./_work/audio.m4a --out ./_work --backend funasr-local --chunk-sec 720
- 产物:
./_work/transcript.txt(每句带【说话人N】)+./_work/transcript.srt。 - 全程离线:模型缓存
~/.cache/modelscope,之后不再联网。 - 说话人自动聚类、无需预知人数;如想限制说话人上限可加
--max-speakers 4。 - 长音频内存不足时:
--batch-sec 120(降低单批内存)+--chunk-sec 720(切段转录合并,最稳)。 - 耗时参考:一期 90 分钟音频在 Apple Silicon 上约 30 分钟;多人对谈效果最佳。
- 若 FunASR 分离效果不理想(多人/嘈杂/叠话场景),可改试备用本地后端 whisper+pyannote(
--backend local,需另行安装依赖,见requirements-local.txt注释)。
> ⚠️ 若都失败(付费内容/环境问题),不要用 shownotes 硬凑成"逐字稿笔记"。应如实告知用户没拿到转录,并让其在 front-matter 标注"整理依据:仅 shownotes(未转录)"。
第 3 步:判断内容类型并选模板
看 podcast_title + shownotes.md + 转录前 ~500 字,选一个最贴切的类型:
| 类型 | 触发信号 | 模板文件 |
|---|---|---|
| 财经/投资 | 谈宏观、股市、利率、基金、ETF、财报、投资策略 | templates/finance.md(内含子分支:行情/研报型 与 理念/对谈型,进模板后先按其顶部⓪判定再填) |
| 科技/商业/创投 | 产品、创业、AI、行业分析、公司战略、融资 | templates/tech-business.md |
| 人物/访谈/对谈 | 以嘉宾经历、观点、故事为主,弱结论强叙事 | templates/interview.md |
| 知识/科普/文史 | 讲解某学科、历史、概念、方法论 | templates/knowledge.md |
| 通用/其它 | 以上都不贴切 | templates/general.md |
类型明显就直接用;若在两类之间拿不准,用一句话问用户确认一次,别硬猜。用户也可以指定"就用财经模板"。
第 4 步:写笔记(由 WorkBuddy 内置大模型直接生成)
> 写笔记不绑定外部 LLM:由当前 WorkBuddy 大模型(即本 agent)直接读取模板 + 逐字稿生成。不调用任何外部 LLM API,不配置任何 LLM key。 无 agent 环境时可把 make_notes.py --dump-prompt(见下)导出的提示词贴给任意网页版 AI 兜底。
view选定的模板文件,按它的结构和逐块说明填写。- 每一块都要输出填好的真实内容,不能用"详见原文""同上"占位,也不要把模板里的方括号说明原样留在成品里。
- 所有笔记统一在文件开头加 YAML front-matter:
---
播客: <podcast_title>
单集: <title>
发布日期: <pub_date>
时长: <duration 分钟>
链接: <小宇宙链接>
类型: <财经/科技商业/人物访谈/知识科普/通用>
整理日期: <今天>
---
-
财经类的要求(见
templates/finance.md):
- 提到股票/基金/ETF 只写名称、不附代码:播客是口播、不会念代码,因此不做代码核实、也不要编造或补全代码。
- 图表必须逐一解读:shownotes / 图文页里的每张图表(K线、趋势图、数据表、结构图)都要分析:①图表类型与核心变量;②关键趋势/拐点/异常值;③与本集论点的关联;④数据来源与时间范围。 -
忠实于音频,不要脑补主讲人没说的判断或数据。模板里要求"若未涉及则如实标注"的地方,就照实写"本集未涉及"。
- 可用联网能力核实术语、背景、人名机构(这是比纯 API 调用更完整的路径)。
无 agent 环境兜底(可选):导出提示词后粘贴到任意网页版 AI:
python scripts/make_notes.py --work ./_work --type finance --out ./_work/note_prompt.md
第 5 步:输出
保存两个成品文件:
1. <播客名>-<集标题>-笔记.md(文件名去掉非法字符)。
2. <播客名>-<集标题>-逐字稿.txt —— 把 _work/transcript.txt(带 【说话人N】 标注)复制/另存为成品一并留档,方便日后回查原文、核对细节。
两个都用 present_files 交给用户(若可用);否则告诉用户文件路径。
已自备音频 / 转录文本的情况
- 用户直接给音频文件:跳过第 1 步,从第 2 步转录开始(
--backend funasr-local,输入改为音频文件路径);元数据向用户补问(节目名、集标题、链接)。 - 用户直接给转录文本或逐字稿:跳过第 1–2 步,从第 3 步选模板开始。
批量整理
用户给多条链接时,对每条依次跑完整流程,每期一个 md 文件,最后可另生成一个 索引.md 汇总各期标题、类型、一句话主旨和文件名。