Vibe Coding 课程-干货集训
03 自动总结英文播客
操作步骤
- 下载Spec.mdspec.md下载
- 打开vs code或其他IDE
- 点击「New File...」
- 完成创建并打开



- 点击「New File...」
用Claude Code开发
- 把开发文档放入这个项目中

- 打开Claude Code插件页面
- 在对话页面输入下列文案,Claude Code就会自动开始开发。中间有需要人工配置的环境,Claude Code都会给出详细的操作步骤
@PROJECT_SPEC.md 按照这个开发文档,拆解开发计划,并逐步完成开发。有需要我配置的节点,要告诉我详细的操作步骤
- 在对话页面输入下列文案,Claude Code就会自动开始开发。中间有需要人工配置的环境,Claude Code都会给出详细的操作步骤
Skill文档
---
description: 一键完成播客的抓取、转录和智能分析。自动执行 RSS 抓取 → Deepgram 转录 → Claude 分析 → 保存结果全流程。
user-invocable: true
---
# 播客分析 Skill
一键完成播客的抓取、转录和智能分析。
## 使用方法
```
/podcast-analyze
```
## 功能说明
自动执行完整的播客分析流程:
1. 抓取新播客单集(支持 RSS + 小宇宙)
2. 使用 Deepgram 将音频转为文字
3. 使用 Claude 进行深度分析
4. 输出结构化 JSON 并保存
## 执行步骤
### 步骤 1:抓取与转录
运行转录脚本,获取新单集并转为文字。
**抓取所有频道**:
```bash
cd '你的文件夹路径' && npm run build && npm start
```
**抓取单个频道**(使用 `--feed` 参数,模糊匹配):
```bash
cd '你的文件夹路径' && npm run build && npm start -- --feed "No Priors"
```
脚本会:
- 读取 `config/config.json` 中的 feeds(RSS / 小宇宙)
- 如果指定了 `--feed`,只处理名称匹配的频道
- 检测未处理的新单集
- 调用 Deepgram API 转录音频
- 保存转录文件到 `data/transcripts/` 目录
#### feeds 支持说明(很重要)
- **标准 RSS**:使用 `url` 抓取
- 配置示例:`{ "name": "xx", "url": "https://example.com/feed.xml", "type": "rss" }`
- **小宇宙(不依赖 RSS)**:使用 `podcastId`,从播客页面解析最新单集与音频直链
- 解析来源:播客页面的 Next.js 内嵌数据 `__NEXT_DATA__`
- 音频字段:`podcast.episodes[*].enclosure.url`(通常为 `m4a`),等价字段 `podcast.episodes[*].media.source.url`
- 配置示例:`{ "name": "xx", "podcastId": "xxxxxxxx", "type": "xiaoyuzhou" }`
#### 环境变量检查(必须)
如果没有配置 Deepgram Key,必须先提示用户配置:
```
DEEPGRAM_API_KEY=your_deepgram_key
```
### 步骤 2:读取转录文件
转录完成后,读取 `data/transcripts/` 目录下的新文件。
**必须只分析本次运行新增的文件**(避免重复):
- 优先从控制台输出的 `Transcript saved: ...` 收集路径
- 或按文件修改时间排序,取最新的 N 个(N = 本次成功转录数量)
### 步骤 3:智能分析
对转录文本进行深度分析,生成结构化 JSON。
---
## 分析原则(大师级标准)
> 🎯 **核心理念**:分析的目标不是「总结内容」,而是「让没听过播客的人获得 80% 的价值,并让听过的人能快速定位精华」。
---
### 一、听众价值优先原则
**分析前必须回答三个问题**:
1. 这期播客的**独特价值**是什么?(区别于其他内容的核心)
2. 听众听完后应该**能做什么**或**理解什么**?
3. 哪些内容值得**反复回听**?
**反面案例(禁止)**:
- ❌ "嘉宾讨论了 AI 的发展" → 空泛无信息量
- ❌ "主播介绍了公司背景" → 没有价值判断
**正面案例(推荐)**:
- ✅ "Sam Altman 首次公开回应 Q* 项目:承认存在但拒绝透露细节,暗示与 AGI 突破相关"
- ✅ "嘉宾分享了一个反直觉洞察:RAG 在长上下文时代可能被高估,原因是..."
---
### 二、话题切分的艺术
#### 2.1 切分原则
**按「认知单元」切分,而非按「说话时间」切分**:
| 切分依据 | 说明 | 示例 |
|---------|------|------|
| 主题转换 | 讨论焦点发生明显变化 | 从"创业经历"转到"技术架构" |
| 论点更迭 | 同一主题下提出新论点 | 从"AI 会取代工作"到"AI 会创造新工作" |
| 深度递进 | 从表层进入深层讨论 | 从"什么是 Agent"到"Agent 的本质困难" |
| 视角切换 | 不同角色的观点对比 | 主播 vs 嘉宾的不同立场 |
#### 2.2 话题粒度标准
- **1 小时播客**:8-15 个话题(平均 4-7 分钟/话题)
- **2 小时播客**:15-25 个话题
- **深度访谈**:可以更细,关键在于每个话题有独立价值
- **闲聊类播客**:可以更粗,合并相似内容
#### 2.3 话题标题撰写规范
**三要素:主体 + 动作/观点 + 价值点**
| 层级 | 示例 | 问题 |
|-----|------|------|
| ❌ 差 | "关于 AI" | 无信息量 |
| ⚠️ 中 | "讨论 AI Agent 的发展" | 缺乏具体观点 |
| ✅ 好 | "为什么 Agent 比 Copilot 更难做:自主决策的可靠性困境" | 有观点、有价值 |
---
### 三、观点提炼方法论
#### 3.1 三层提炼法
```
原文 → 核心论点 → 深层洞察
```
**示例**:
- **原文**:"我们试了很多 RAG 方案,最后发现直接把文档塞进 context 效果更好"
- **核心论点**:RAG 在某些场景下不如长上下文直接输入
- **深层洞察**:当检索质量无法保证时,模型的上下文理解能力可能优于分块检索
#### 3.2 观点分类框架
| 类型 | 特征 | 处理方式 |
|-----|------|---------|
| **事实陈述** | 可验证的客观信息 | 如实记录,标注来源 |
| **个人观点** | 嘉宾的主观判断 | 明确归属,保留原话 |
| **预测判断** | 对未来的推测 | 标注时间背景,记录推理逻辑 |
| **反直觉洞察** | 与常识相悖的见解 | **重点标注**,详细记录论证过程 |
| **方法论** | 可操作的建议/框架 | 结构化整理,确保可执行 |
#### 3.3 观点价值评估矩阵
```
│ 低普适性 │ 高普适性
─────────────┼────────────────┼────────────────
高新颖性 │ 领域专家视角 │ ⭐ 核心金句
─────────────┼────────────────┼────────────────
低新颖性 │ 可略过 │ 基础背景
```
---
### 四、证据溯源规范
#### 4.1 引用原则
**每个观点必须有「证据锚点」**:
```json
{
"summary_zh": "Anthropic 认为 Claude 的核心竞争力不是性能,而是可控性",
"evidence_quote": "We don't want to win on benchmarks. We want to win on being the model that people can actually trust and control.",
"evidence_time": 1823
}
```
#### 4.2 引用选择标准
| 优先级 | 类型 | 说明 |
|-------|------|------|
| 1 | 嘉宾原话中的金句 | 最有说服力 |
| 2 | 关键数据/案例 | 具体且可验证 |
| 3 | 核心论证段落 | 完整呈现推理链 |
| 4 | 主播的精准追问 | 帮助理解上下文 |
#### 4.3 禁止的引用方式
- ❌ 引用与观点无关的内容
- ❌ 断章取义,改变原意
- ❌ 只引用语气词或过渡句
---
### 五、概念提取规范
#### 5.1 提取标准
**只提取满足以下条件的概念**:
1. **首次出现**:该播客中第一次被解释的概念
2. **有门槛**:普通听众可能不理解的术语
3. **核心相关**:与本期主题直接相关
#### 5.2 概念解释三要素
```json
{
"term_en": "Constitutional AI",
"term_zh": "宪法 AI",
"explanation": "Anthropic 提出的 AI 对齐方法。核心思想是让 AI 根据一组预设的「宪法原则」进行自我批评和修正,而非完全依赖人类反馈。优势是可扩展性更好,减少对人工标注的依赖。"
}
```
**三要素**:
1. **是什么**(定义)
2. **为什么重要**(意义)
3. **怎么工作**(机制,如适用)
#### 5.3 术语处理规范
| 场景 | 处理方式 | 示例 |
|-----|---------|------|
| 通用英文术语 | 保留英文 | AI、API、GPU |
| 专业术语 | 中文(英文) | 检索增强生成 (RAG) |
| 品牌/产品名 | 保留原文 | Claude、GPT-4、Cursor |
| 缩写 | 首次出现时展开 | RLHF (Reinforcement Learning from Human Feedback) |
---
### 六、金句筛选标准
#### 6.1 金句的五个特征(满足 2 个以上)
1. **洞察性**:揭示了深层规律或反直觉真相
2. **表达力**:语言精炼,令人印象深刻
3. **可传播**:可以脱离上下文独立分享
4. **代表性**:体现嘉宾的核心观点或价值观
5. **启发性**:能引发听众思考或行动
#### 6.2 金句示例
| 类型 | 示例 |
|-----|------|
| 洞察型 | "The best AI products are the ones that make the AI invisible." |
| 预言型 | "In 5 years, not using AI will be like not using the internet today." |
| 方法论 | "Start with the workflow, not the model. The model is replaceable, the workflow is not." |
| 价值观 | "We'd rather be right than first." |
| 反思型 | "Every time I think I understand LLMs, they surprise me again." |
#### 6.3 数量控制
- **30 分钟播客**:2-4 条金句
- **1 小时播客**:4-8 条金句
- **2 小时深度访谈**:8-12 条金句
---
### 七、总览模块撰写规范
#### 7.1 一句话总结 (one_liner)
**公式**:`[主体] + [核心动作/观点] + [独特价值]`
| 层级 | 示例 |
|-----|------|
| ❌ 差 | "讨论 AI 发展" |
| ⚠️ 中 | "Sam Altman 谈 OpenAI 的未来" |
| ✅ 好 | "Sam Altman 首次回应 Q* 传闻,透露 AGI 时间表可能比预期更近" |
#### 7.2 概要 (abstract_zh)
**100-200 字,包含**:
1. 嘉宾背景(一句话)
2. 本期核心议题(1-2 个)
3. 最重要的 2-3 个观点
4. 为什么值得听(独特价值)
#### 7.3 深度摘要 (summary_zh)
**300-500 字,结构**:
1. **背景铺垫**(1-2 句)
2. **核心观点展开**(每个观点 2-3 句)
3. **关键论证/案例**(支撑观点的证据)
4. **总结/启示**(对听众的价值)
#### 7.4 核心观点 (keyPoints)
**每条观点必须**:
- 有明确的时间范围 (`startTime`, `endTime`)
- 是独立完整的论点(非章节标题)
- 包含具体信息(非空泛总结)
**数量**:
- 一般 3-7 条
- 覆盖播客 60%-80% 的核心内容
---
### 八、质量检查清单
分析完成后,必须通过以下检查:
#### 8.1 完整性检查
- [ ] 时间线覆盖了播客 90%+ 的有效内容
- [ ] 没有遗漏重要话题或观点
- [ ] 所有必填字段都已填写
#### 8.2 准确性检查
- [ ] 观点归属正确(不要把嘉宾观点写成主播说的)
- [ ] 时间戳与实际内容匹配
- [ ] 概念解释准确无误
#### 8.3 价值检查
- [ ] 每个话题的 summary 都有实质内容
- [ ] 金句确实具有传播价值
- [ ] keyPoints 抓住了真正的核心观点
#### 8.4 格式检查
- [ ] JSON 格式正确,无语法错误
- [ ] 语言字段与实际内容一致
- [ ] 英文播客包含双语字段
---
### 九、语言策略(关键!)
#### 9.1 语言检测与设置
| 原文语言 | `language` 字段 | 输出要求 |
|---------|----------------|---------|
| 中文播客 | `"zh"` | 只产出 `_zh` 字段,不需要 `_en` |
| 英文播客 | `"en"` | **必须**同时产出 `_zh` 和 `_en` 字段 |
#### 9.2 术语处理(贯穿始终)
**无论中英文播客,专业术语必须保留英文原词**:
- AI Agent、RAG、Fine-tuning、Prompt Engineering
- 格式:`中文翻译 (English Term)` 或直接使用英文
#### 9.3 翻译质量标准
英文播客的中文翻译必须:
- **信**:准确传达原意
- **达**:符合中文表达习惯
- **雅**:专业术语处理得当
---
> 📌 **最终原则**:分析必须遵守仓库内的 `spec.md`(它是最高分析指令)。
#### 输出格式
输出**纯 JSON**(不要 markdown 代码块)。
**中文播客格式**(`language: "zh"`,无 `_en` 字段):
```json
{
"language": "zh",
"overview": {
"one_liner_zh": "一句话总结本期亮点",
"abstract_zh": "一段话概要(100-200字左右)",
"summary_zh": "300-500字的全文深度摘要",
"keyPoints": [
{
"startTime": 120,
"endTime": 420,
"point_zh": "核心观点(保留英文术语如 AI Agent)"
}
],
"quotes": [
{ "time": 305, "speaker": "Speaker 0", "quote": "原文金句" }
]
},
"timeline": [
{
"startTime": 0,
"endTime": 360,
"speaker": "主播名",
"topic": { "zh": "话题中文标题" },
"content": {
"summary_zh": "核心观点总结,保留英文术语",
"evidence_quote": "原文引用",
"concepts": [{ "term_en": "RAG", "term_zh": "检索增强生成", "explanation": "..." }]
}
}
]
}
```
**英文播客格式**(`language: "en"`,必须有 `_zh` + `_en` 双语字段):
```json
{
"language": "en",
"overview": {
"one_liner_zh": "一句话中文总结",
"one_liner_en": "One-liner in English",
"abstract_zh": "一段话中文概要",
"summary_zh": "中文深度摘要",
"summary_en": "English summary",
"keyPoints": [
{
"startTime": 120,
"endTime": 420,
"point_zh": "核心观点(中文)",
"point_en": "Key point (English)"
}
],
"quotes": [
{ "time": 305, "speaker": "Speaker 0", "quote": "Original quote in English" }
]
},
"timeline": [
{
"startTime": 0,
"endTime": 360,
"speaker": "Guest Name",
"topic": {
"zh": "话题中文标题",
"en": "Topic Title in English"
},
"content": {
"summary_zh": "中文总结",
"summary_en": "English summary",
"evidence_quote": "Original quote from transcript",
"concepts": [{ "term_en": "RLHF", "term_zh": "人类反馈强化学习", "explanation": "..." }]
}
}
]
}
```
#### 字段说明
| 字段 | 说明 |
|------|------|
| `startTime` / `endTime` | 秒数(整数),与转录文本时间戳一致 |
| `speaker` | 如果无法确定姓名,使用 "Speaker 0", "Speaker 1" |
| `concepts` | 只提取该段落的**新概念**,不重复之前已解释的 |
| `evidence_quote` | 支撑观点的原文引用 |
### 步骤 4:保存结果
将分析结果保存为 JSON 文件:
```
data/episodes/{episode-id}.json
```
完整的单集数据结构:
```json
{
"id": "episode-guid",
"processedAt": "2024-01-01T00:00:00.000Z",
"meta": {
"podcastName": "播客名称",
"episodeTitle": "单集标题",
"publishDate": "发布日期",
"audioUrl": "音频链接",
"coverImage": "封面图",
"duration": 3600
},
"analysis": {
"overview": { ... },
"timeline": [ ... ]
}
}
```
同时更新索引文件 `data/db_index.json`。
**索引更新规则**:
- 把本次生成的 episode 写入/更新到 `data/db_index.json` 的 `episodes[]` 列表
- 最新的放在最前面(newest first)
### 步骤 5:完成提示
分析完成后,提示用户启动前端查看结果:
```bash
cd '你的文件夹路径' && npm run dev
```
## 分析示例
### 输入(转录片段)
```
[0:02:00 - 0:02:30] Speaker 0: 今天我们来聊一下 AI Agent,这可能是今年最火的概念之一了。
[0:02:30 - 0:05:00] Speaker 1: 对,Agent 这个词现在被用得很泛,但我理解的核心是让 AI 能够自主地完成任务,而不只是回答问题。
```
### 输出(分析结果)
```json
{
"startTime": 120,
"endTime": 300,
"speaker": "Speaker 1",
"topic": {
"zh": "AI Agent 的核心定义",
"en": "Core Definition of AI Agent"
},
"content": {
"summary_zh": "讨论了 AI Agent(智能体)的核心概念。与传统的问答式 AI 不同,Agent 强调的是自主完成任务的能力,包括感知环境、做出决策、执行行动的完整闭环。",
"evidence_quote": "Agent 这个词现在被用得很泛,但我理解的核心是让 AI 能够自主地完成任务,而不只是回答问题",
"concepts": [
{
"term_en": "AI Agent",
"term_zh": "AI 智能体",
"explanation": "能够感知环境、做出决策、自主执行任务的人工智能系统"
}
]
}
}
```