Aug 17, 2026
用 notebooklm-py 以编程方式访问 NotebookLM
一套非官方的 Python API、CLI、MCP server 与 agent skill,用于 Google NotebookLM(现称 Gemini Notebook)——生成音频概览、视频讲解、幻灯片、信息图、测验与报告,并为 agent 提供跨 session 记忆。
NotebookLM 的 Web UI 是一对多源文档聊天最舒服的方式。但只要你想脚本化它——定时生成音频概览、把 notebook 作为 agent 的记忆、或把 YouTube 字幕灌进去——浏览器就成了一堵墙。notebooklm-py 是一套非官方的 Python API、CLI、MCP server 和 agent skill,让你以编程方式拿到 NotebookLM(现品牌 Gemini Notebook)的访问能力,包括 Web UI 没暴露的功能。
为什么这个 Skill 重要
Web UI 适合一个人、一个 session。它不给你:
- 可编程的产物生成(定时音频概览、批量信息图)。
- 一个可以交给 agent、跨 session 存活的记忆层。
- 把 URL、PDF、Drive 文件、YouTube 字幕灌进 notebook 而不必手工点。
- 一个 MCP server,让任何兼容 MCP 的 agent 都能读写 notebook。
这四条它都覆盖。无论你想要个人自动化的 CLI,还是支撑更大流水线的 Python 库,装一次就好。
安装
CLI 用法:
uv tool install "notebooklm-py[browser]"
# 或: pipx install "notebooklm-py[browser]"
库用法:
uv add notebooklm-py
# 或: pip install "notebooklm-py"
Agent skill 用法:
notebooklm skill install
# 或: npx skills add teng-lin/notebooklm-py
首次跑运行会让你登录(notebooklm login)——支持 Playwright、浏览器 cookie 或 master token。在 Linux 上如果 playwright install chromium 报 TypeError: onExit is not a function,README 有文档化的解决方案。
实战:Claude Code 跨 session 记忆
真实场景,不是"hello world":给你的 Claude Code agent 一份跨 session 还活着的、引用可查的记忆。
搭建:
- 在 NotebookLM 建一个"Master Brain" notebook。
- 在工作流里加一个收尾步骤:每个 session 结束,往 notebook 写一条短笔记,概括本 session 的决策。
- 在
CLAUDE.md加一行,新 session 开始时先查这个 notebook。
## 记忆
在回复之前,先跑 `notebooklm ask --notebook "Master Brain" "<你当前的任务>"`。
把返回内容当作本次 session 的真实上下文。
任意新 session 开始时给 agent 的提示:
查询 Master Brain notebook,获取与当前任务相关的过往上下文,
在动手之前先概括相关决策。
预期输出:一份带引用的短摘要,例如"上次 session (2026-08-15) 决定用 PostgreSQL 而不是 SQLite;见 source 3"。Agent 进入新 session 时已经知道过去决定过什么,并有引用可查。
这就是持久化的 agent 记忆该有的样子:不是一个文本文件,而是一个可查询、可引用的过往决策库。
实战:生成每日音频简报
另一个真实场景:拿一组源 URL,生成一份你上班路上能听的音频概览。
CLI 流水线:
notebooklm notebook use "Daily Briefing"
notebooklm source add https://example.com/article-1
notebooklm source add https://example.com/article-2
notebooklm source add https://example.com/article-3
notebooklm generate audio-overview
notebooklm download --latest --output ./briefings/2026-08-17.mp3
预期输出:一份 MP3,放在 ./briefings/,内容是 NotebookLM 由你的三个源合成的音频概览。把整段用 cron 或 CI 调度起来,你就有了自动生成的每日播客。
实战:从电子表格批量生成信息图
真实数据流水线场景:一份 CSV 主题列表,每行生成一张信息图。
Python 流水线:
import asyncio, csv
from notebooklm import NotebookLMClient
async def main():
async with NotebookLMClient() as client:
nb = await client.notebooks.create("Topic Infographics")
with open("("topics.csv") as f:
reader = csv.DictReader(f)
for row in reader:
await client.sources.add_url(nb.id, row["url"])
for row in reader:
artifact = await client.artifacts.generate_infographic(nb.id, topic=row["topic"])
await client.artifacts.download(artifact.id, f"./out/{row["slug"]}.png")
asyncio.run(main())
预期输出:每个主题一张 PNG,放在 ./out/。Web UI 做不到;API 能。
技巧
- 只想要 MCP-backed notebook 给 agent 用的话,先装 agent-skill。 CLI 和 Python API 在你只要查询能力时偏重。
- 钉住库版本。 notebooklm-py 跟 Google 的非公开端点通信,这些端点可能在不通知的情况下变化;钉住版本,升级前先检查。
- 无头服务器用 master token。 Playwright 登录在本地能用;在 CI 或服务器环境,master token 更可靠。
- 关注每个 notebook 的源上限。 Google 各档位对一个 notebook 能放多少源有上限。撞到上限就拆成多个 notebook,不要硬扛。
何时不用这个 Skill
- 你需要稳定的、有支持的生产 API。 这是非官方的,调用的是非公开端点。Google 内部 API 随时可能坏。任何生产用途都要把它当作有风险。
- 你受限速或严格 SLA。 重度使用会被节流,没有服务级别承诺。
- 你的数据有 Web UI 都没覆盖的隐私约束。 你放进 notebook 的任何东西都进 Google 的系统。约束和 Web UI 一样——既不多,也不少。
- 你只需要一个功能。 如果你只要生成音频概览,更聚焦的工具可能更合适。这是广度优先的设计。
查看 排行榜 了解更多 skill。