一篇文章,七种形态——用Agent将任何内容自动转化为播客、PPT、思维导图、测验等多种格式,让知识传播不再受限于单一载体。
世界上有一种浪费叫"我写了一篇好文章,但它只活在一个页面上"。播客用户不看文章,PPT读者不听播客,思维导图爱好者两者都不看。内容创作者的痛点从来不是"产出不够",而是"一鱼多吃"——如何让同一份内容以最适合的形式触达不同受众。
| 内容源 | 格式支持 | 处理方式 |
|---|---|---|
| 微信公众号文章 | URL | 反爬虫获取+HTML解析 |
| 网页文章 | URL | Readability提取 |
| YouTube视频 | URL | 字幕提取+内容摘要 |
| PDF文档 | 文件 | OCR+文本提取 |
| Markdown文件 | 文件 | 直接解析 |
| 搜索查询 | 文本 | 搜索+多源聚合 |
| 输出格式 | 描述 | 适用场景 |
|---|---|---|
| 播客(Podcast) | 双人对话音频脚本 | 通勤学习 |
| PPT演示 | 结构化幻灯片 | 会议分享 |
| 思维导图 | 层次化知识结构 | 知识整理 |
| 测验题 | 选择/填空/问答 | 教学考核 |
| 摘要 | 浓缩版文章 | 快速阅读 |
| 闪卡 | Anki格式记忆卡 | 间隔重复学习 |
| FAQ | 问答对列表 | 知识库建设 |
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视频字幕提取
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);
}
// 播客脚本生成器
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的"技能包"
// 小红: 技能包?像游戏里给角色学新技能那样?
// 小明: 没错!而且更酷的是,这些技能可以随时添加和升级...
// 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;
}
// 思维导图Markdown生成
async function generateMindMap(markdown) {
const prompt = `将以下内容转换为Mermaid思维导图格式。
要求:
1. 中心节点为文章主旨
2. 一级分支为主要章节
3. 二级分支为关键概念
4. 叶子节点为具体细节
格式:
mindmap
root(主旨)
分支1
子节点1
子节点2
分支2
...
内容:
${markdown}`;
return await llm.generate(prompt);
}
// 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);
}
}
NotebookLM内容处理Agent解决的不是"怎么写内容"的问题,而是"怎么让写好的内容活起来"的问题。通过多源获取和多种输出格式的组合,一份内容可以变成七种形态,触达七种不同的受众。在内容为王的时代,"一鱼多吃"才是内容创作者的核心竞争力。
世界上有一种效率叫"写一次,用七次",内容处理Agent正在让这种效率成为现实。
最后更新:2026-05-16 | 妙趣AI - AI工具导航与教程平台