Aug 17, 2026

用 notebooklm-py 以编程方式访问 NotebookLM

一套非官方的 Python API、CLI、MCP server 与 agent skill,用于 Google NotebookLM(现称 Gemini Notebook)——生成音频概览、视频讲解、幻灯片、信息图、测验与报告,并为 agent 提供跨 session 记忆。

#tutorial#python#ai-agents#productivity#developer-tools

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 chromiumTypeError: onExit is not a function,README 有文档化的解决方案。

实战:Claude Code 跨 session 记忆

真实场景,不是"hello world":给你的 Claude Code agent 一份跨 session 还活着的、引用可查的记忆。

搭建:

  1. 在 NotebookLM 建一个"Master Brain" notebook。
  2. 在工作流里加一个收尾步骤:每个 session 结束,往 notebook 写一条短笔记,概括本 session 的决策。
  3. 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。