← 返回教程列表 GitHub Trending 2,556⭐

NotebookLM内容处理Agent开发指南

一篇文章,七种形态——用Agent将任何内容自动转化为播客、PPT、思维导图、测验等多种格式,让知识传播不再受限于单一载体。

目录

  1. 内容形态转换的痛点
  2. qiaomu项目解析
  3. Agent架构设计
  4. 多源内容获取
  5. 七种输出格式
  6. OpenClaw集成方案
  7. 播客生成详解
  8. 自动化工作流
  9. 最佳实践
  10. 总结

内容形态转换的痛点

世界上有一种浪费叫"我写了一篇好文章,但它只活在一个页面上"。播客用户不看文章,PPT读者不听播客,思维导图爱好者两者都不看。内容创作者的痛点从来不是"产出不够",而是"一鱼多吃"——如何让同一份内容以最适合的形式触达不同受众。

项目亮点:qiaomu-anything-to-notebooklm(joeseesun/qiaomu)在GitHub上获得2,556星标,单日增长465星。这是一个Claude Skill,支持多源内容输入,自动生成多种输出格式。

qiaomu项目解析

支持的内容源

内容源格式支持处理方式
微信公众号文章URL反爬虫获取+HTML解析
网页文章URLReadability提取
YouTube视频URL字幕提取+内容摘要
PDF文档文件OCR+文本提取
Markdown文件文件直接解析
搜索查询文本搜索+多源聚合

支持的输出格式

输出格式描述适用场景
播客(Podcast)双人对话音频脚本通勤学习
PPT演示结构化幻灯片会议分享
思维导图层次化知识结构知识整理
测验题选择/填空/问答教学考核
摘要浓缩版文章快速阅读
闪卡Anki格式记忆卡间隔重复学习
FAQ问答对列表知识库建设

Agent架构设计

NotebookLM内容处理Agent架构:

┌──────────────────────────────────────────────┐
│               输入层                           │
│  ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌─────┐│
│  │微信URL│ │网页URL│ │YouTube│ │ PDF  │ │搜索 ││
│  └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ └──┬──┘│
└─────┼────────┼────────┼────────┼────────┼───┘
      │        │        │        │        │
┌─────┴────────┴────────┴────────┴────────┴───┐
│           内容获取与解析层                      │
│  [反爬处理] [Readability] [字幕提取] [OCR]    │
│  [搜索聚合] → 统一Markdown格式                │
└─────────────────────┬───────────────────────┘
                      │
┌─────────────────────┴───────────────────────┐
│           OpenClaw Agent 核心层                │
│  ┌──────────────────────────────────────┐    │
│  │       内容理解与分析                    │    │
│  │  - 关键信息提取                        │    │
│  │  - 逻辑结构识别                        │    │
│  │  - 知识点标注                          │    │
│  └──────────────┬───────────────────────┘    │
│                 │                             │
│  ┌──────────────┴───────────────────────┐    │
│  │       格式转换引擎                      │    │
│  │  ┌──────┐ ┌──────┐ ┌──────┐         │    │
│  │  │播客  │ │ PPT  │ │思维导图│         │    │
│  │  │生成器│ │生成器│ │生成器 │         │    │
│  │  └──────┘ └──────┘ └──────┘         │    │
│  │  ┌──────┐ ┌──────┐ ┌──────┐         │    │
│  │  │测验  │ │闪卡  │ │ FAQ  │         │    │
│  │  │生成器│ │生成器│ │生成器│         │    │
│  │  └──────┘ └──────┘ └──────┘         │    │
│  └──────────────────────────────────────┘    │
└─────────────────────────────────────────────┘

多源内容获取

微信公众号文章获取

// 微信公众号反爬虫获取
async function fetchWechatArticle(url) {
  // 1. 使用Playwright绕过反爬
  const browser = await chromium.launch({ headless: true });
  const page = await browser.newPage();
  
  // 2. 设置移动端UA
  await page.setExtraHTTPHeaders({
    'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X)'
  });
  
  await page.goto(url, { waitUntil: 'networkidle' });
  
  // 3. 提取正文内容
  const content = await page.evaluate(() => {
    const title = document.getElementById('activity-name')?.textContent;
    const author = document.getElementById('js_name')?.textContent;
    const body = document.getElementById('js_content')?.innerHTML;
    return { title, author, body };
  });
  
  await browser.close();
  
  // 4. HTML转Markdown
  return htmlToMarkdown(content.body, {
    title: content.title,
    author: content.author
  });
}

YouTube字幕提取

// YouTube视频字幕提取
async function extractYouTubeTranscript(url) {
  const videoId = extractVideoId(url);
  
  const response = await fetch(
    `https://www.youtube.com/watch?v=${videoId}`
  );
  
  // 提取字幕track列表
  const tracks = await extractCaptionTracks(response);
  
  if (tracks.length === 0) {
    // 使用Whisper作为降级方案
    const audioUrl = await getYouTubeAudioUrl(videoId);
    const transcript = await transcribeWithWhisper(audioUrl);
    return transcript;
  }
  
  // 下载并解析字幕
  const subtitle = await fetch(tracks[0].url);
  return parseSRT(subtitle);
}

七种输出格式

1. 播客脚本生成

// 播客脚本生成器
async function generatePodcastScript(markdown, options = {}) {
  const {
    hosts = ['主持人A', '主持人B'],
    style = 'conversational',
    duration = '15min'
  } = options;
  
  const prompt = `你是一个播客脚本编剧。请将以下内容转换为${duration}的${style}风格播客对话。

要求:
1. 两个主持人${hosts.join('和')}对话
2. 语言自然口语化,避免书面语
3. 适当加入幽默和比喻
4. 关键概念用通俗语言解释
5. 添加引入、过渡和总结

格式:
${hosts[0]}: ...
${hosts[1]}: ...

内容:
${markdown}`;

  return await llm.generate(prompt);
}

// 示例输出
// 小明: 今天我们来聊聊Agent Skills,这东西就像AI的"技能包"
// 小红: 技能包?像游戏里给角色学新技能那样?
// 小明: 没错!而且更酷的是,这些技能可以随时添加和升级...

2. PPT生成

// PPT大纲生成
async function generatePPTOutline(markdown, options = {}) {
  const {
    slides = 15,
    theme = 'tech',
    language = 'zh'
  } = options;
  
  const prompt = `请将以下内容转换为${slides}页PPT大纲。

要求:
1. 第1页:标题页(主标题+副标题+作者)
2. 第2页:内容概览
3. 中间页:核心内容(每页1个要点,带bullet points)
4. 倒数第2页:关键结论
5. 最后一页:行动建议/总结

输出JSON格式:
{
  "title": "...",
  "subtitle": "...",
  "slides": [
    {
      "page": 1,
      "type": "title",
      "title": "...",
      "content": ["..."],
      "speaker_notes": "..."
    }
  ]
}

内容:
${markdown}`;

  const outline = await llm.generate(prompt, { format: 'json' });
  return outline;
}

3. 思维导图

// 思维导图Markdown生成
async function generateMindMap(markdown) {
  const prompt = `将以下内容转换为Mermaid思维导图格式。

要求:
1. 中心节点为文章主旨
2. 一级分支为主要章节
3. 二级分支为关键概念
4. 叶子节点为具体细节

格式:
mindmap
  root(主旨)
    分支1
      子节点1
      子节点2
    分支2
      ...

内容:
${markdown}`;

  return await llm.generate(prompt);
}

OpenClaw集成方案

// SKILL.md - notebooklm-content-processor
## 多源内容处理与格式转换

当用户需要将内容转换为不同格式时:

### 输入支持
- 微信公众号文章URL
- 网页URL
- YouTube视频URL
- PDF文件
- Markdown文件
- 搜索查询

### 输出格式
- podcast: 播客对话脚本
- ppt: PPT演示大纲(JSON)
- mindmap: 思维导图(Mermaid)
- quiz: 测验题(JSON)
- summary: 摘要(Markdown)
- flashcard: 闪卡(Anki格式)
- faq: FAQ列表(JSON)

### 使用方式
1. 先用 `fetch_content` 获取和解析内容
2. 分析内容结构和关键信息
3. 用 `convert_format` 转换为目标格式
4. 可选:使用 `batch_convert` 一次生成多种格式

播客生成详解

对话风格设计

好的播客脚本需要三种元素:

// 播客风格配置
const PODCAST_STYLES = {
  conversational: {
    description: '轻松对话风',
    characteristics: ['口语化', '比喻多', '节奏轻快'],
    hostPersonalities: ['好奇型', '专家型']
  },
  educational: {
    description: '教学讲解风',
    characteristics: ['结构清晰', '概念先行', '案例丰富'],
    hostPersonalities: ['老师型', '学生型']
  },
  debate: {
    description: '观点辩论风',
    characteristics: ['对立观点', '逻辑推导', '共识达成'],
    hostPersonalities: ['正方', '反方']
  }
};

自动化工作流

// 自动化内容处理管线
// 每天自动将精选文章转换为多种格式

async function dailyContentPipeline() {
  // 1. 获取今日精选文章
  const articles = await fetchDailyPicks();
  
  for (const article of articles) {
    // 2. 获取内容
    const content = await fetchContent(article.url);
    
    // 3. 批量转换
    const outputs = await Promise.all([
      generatePodcastScript(content, { duration: '10min' }),
      generatePPTOutline(content, { slides: 12 }),
      generateMindMap(content),
      generateQuiz(content, { questions: 10 }),
      generateFlashcards(content, { cards: 20 }),
      generateFAQ(content, { pairs: 5 })
    ]);
    
    // 4. 保存到对应目录
    await saveOutputs(article.title, {
      podcast: outputs[0],
      ppt: outputs[1],
      mindmap: outputs[2],
      quiz: outputs[3],
      flashcards: outputs[4],
      faq: outputs[5]
    });
    
    // 5. 通知发布
    await notifyPublisher(article.title, outputs);
  }
}

最佳实践

实践1:内容质量优先
输入内容的质量直接决定输出质量。先做好内容清洗(去广告、去导航、格式标准化)。
实践2:保持原文风格
转换格式时要保留原文的风格和语气,不要让所有内容都变成同一种"AI味道"。
实践3:分步验证
每步转换后人工抽查质量,建立反馈循环持续优化Prompt。

总结

NotebookLM内容处理Agent解决的不是"怎么写内容"的问题,而是"怎么让写好的内容活起来"的问题。通过多源获取和多种输出格式的组合,一份内容可以变成七种形态,触达七种不同的受众。在内容为王的时代,"一鱼多吃"才是内容创作者的核心竞争力。

世界上有一种效率叫"写一次,用七次",内容处理Agent正在让这种效率成为现实。

最后更新:2026-05-16 | 妙趣AI - AI工具导航与教程平台