引言
"AI needs to know where it learned something from."
这是"一天一个开源项目"系列的第113篇文章。今天带你了解的项目是 notebooklm-py。
Google NotebookLM 是目前最好的"个人知识库 + AI 问答"工具之一------你上传文档,它帮你提炼、总结、生成播客、制作幻灯片,并且每个回答都有来源引用。但它有一个巨大的局限:没有官方 API,一切只能在网页上手动操作。
notebooklm-py 解决了这个问题。它逆向工程了 NotebookLM 的全部未公开 API,让你用 Python 代码或 CLI 完整控制 NotebookLM 的每一个功能------包括网页界面没有暴露的功能。更进一步,它还提供了一个 Claude Code Skill,让 Claude 能在对话中实时查询你的 NotebookLM 知识库,把 Gemini 的知识基础能力和 Claude 的推理能力结合起来。
9,500+ Stars,MIT 开源。
你将学到什么
- notebooklm-py 的三种使用方式(Python API / CLI / Agent Skill)
- 它能做哪些 NotebookLM 网页界面做不到的事
- Claude Code Skill 集成如何实现"Claude + NotebookLM"的跨厂商 AI 协作
- 为什么"有来源引用的回答"是解决 AI 幻觉最直接的工程手段
- 逆向工程未公开 API 的代价:能力与脆弱性的权衡
前置知识
- 熟悉 Python 基础和 pip 包管理
- 用过 Google NotebookLM(了解它的核心功能)
- 有 Claude Code 使用经验(如果你关注 Skill 集成部分)
项目背景
项目简介
notebooklm-py 是由开发者 Teng Lin 构建的非官方 Python 客户端,通过逆向工程 Google NotebookLM 的内部 API,提供完整的程序化访问能力。它不是爬虫,而是直接调用 NotebookLM 客户端与 Google 服务器通信时使用的同一批 HTTP 接口。
项目包含两个紧密相关的组件:
css
notebooklm-py
├── Python 库 / CLI ← 完整的 NotebookLM API 封装
└── Claude Code Skill ← 让 Claude 在会话中实时查询 NotebookLM
这两个组件解决了不同层次的问题:Python 库解决的是"如何自动化 NotebookLM 操作";Claude Code Skill 解决的是"如何让 AI 助手的回答基于你的真实文档而不是训练数据"。
作者介绍
- 主要作者 :Teng Lin(GitHub: @teng-lin)
- 项目性质:非官方、社区驱动,与 Google 无官方关联
- 发布平台 :GitHub + PyPI(
pip install notebooklm-py) - 当前版本:v0.5.0(Beta 状态)
项目数据
- ⭐ GitHub Stars: 9,500+
- 📦 PyPI: notebooklm-py
- 📄 License: MIT
- 🐍 Python: ≥ 3.10
- 🖥️ 平台: macOS, Linux, Windows
- ⚠️ 状态: Beta(基于未公开 API,可能随 Google 变更而失效)
- 🌐 仓库: teng-lin/notebooklm-py
主要功能
核心作用
notebooklm-py 的功能覆盖了 NotebookLM 的完整能力图谱:
arduino
Notebook 管理
├── 创建、列出、重命名、删除、分享
来源导入
├── URL(网页)
├── YouTube 视频
├── PDF 文件
├── Google Drive 文档
└── 粘贴文本
知识查询
├── 带对话历史的问答(引用来源)
└── 引用固定(pin citations)
内容生成(Studio 功能)
├── 音频播客(Audio Overview)
├── 视频概述
├── 幻灯片(PPTX 格式)
├── 测验(Quiz)
├── 闪卡(Flashcards)
├── 脑图(JSON 格式)
├── 报告
└── 信息图
研究代理
├── 网络研究(自动导入搜索结果)
└── Drive 研究(自动导入云盘文档)
三种使用方式
方式 1:Python API(异步,适合自动化流水线)
python
import asyncio
from notebooklm import NotebookLM
async def main():
async with NotebookLM() as nlm:
# 创建 Notebook
notebook = await nlm.create_notebook("我的研究项目")
# 导入多种来源
await notebook.add_source("https://arxiv.org/abs/2310.06825")
await notebook.add_source("research.pdf")
await notebook.add_source("https://youtu.be/dQw4w9WgXcQ")
# 查询知识库(返回带引用的回答)
response = await notebook.query(
"这篇论文的核心创新点是什么?",
include_citations=True
)
print(response.answer)
print(response.citations) # 每条引用都指向具体来源段落
# 生成音频播客
podcast = await notebook.generate_audio_overview()
podcast.save("summary.mp3")
# 生成幻灯片
slides = await notebook.generate_slides()
slides.save("presentation.pptx")
asyncio.run(main())
方式 2:CLI(Shell 脚本和 CI/CD)
bash
# 安装
pip install notebooklm-py
# 基础操作
notebooklm notebook create "产品文档知识库"
notebooklm source add --notebook "产品文档知识库" https://docs.example.com
notebooklm source add --notebook "产品文档知识库" ./spec-v2.pdf
# 查询
notebooklm query --notebook "产品文档知识库" "新版 API 的认证方式有哪些变化?"
# 生成内容
notebooklm generate audio --notebook "产品文档知识库"
notebooklm generate slides --notebook "产品文档知识库" --output slides.pptx
# 批量导入(在 CI/CD 中自动更新知识库)
notebooklm source sync --notebook "产品文档知识库" ./docs/
方式 3:Claude Code Skill(让 Claude 实时查询 NotebookLM)
这是整个项目最值得重点介绍的部分。
bash
# 安装 Skill(方法 1:通过插件市场)
/plugin marketplace add teng-lin/notebooklm-py
# 安装 Skill(方法 2:直接安装到 Skills 目录)
notebooklm skill install
# 首次认证(浏览器登录 Google 账号,之后自动维持)
notebooklm auth login
安装后,在 Claude Code 的对话中:
css
你:解释一下我们系统的认证架构,我记得在架构文档里有详细说明
Claude:[内部调用 NotebookLM Skill,查询你的"系统架构"知识库]
Claude:根据你的架构文档(来源:architecture-v3.md,第 4 页),
系统使用 JWT + Refresh Token 双令牌机制...
[每条信息都有来源引用,不是训练数据中的泛化回答]
项目详细剖析
Claude Code Skill 的技术原理
理解这个 Skill 如何工作,需要理解它的两层架构:
Layer 1:浏览器自动化(Browser Automation)
NotebookLM 没有公开 API,所有操作都需要通过 Google 账号认证。notebooklm-py 使用浏览器自动化(Playwright)来维持认证状态,捕获认证令牌后再直接发起 HTTP 请求。
这意味着:
- ✅ 功能完整(与网页端完全对等)
- ✅ 本地运行(所有数据留在你的设备上)
- ⚠️ 需要本地 Claude Code(云端/沙箱环境无法使用浏览器)
- ⚠️ 依赖 Google 内部 API,随时可能失效
Layer 2:Skill 集成层
css
Claude Code 对话
↓ 判断需要知识库支持
Skill 触发
↓ 构造 NotebookLM 查询
notebooklm-py Python 库
↓ HTTP 请求到 Google 服务器
NotebookLM(Gemini 1.5 Pro 后端)
↓ 返回带引用的回答
Skill 解析响应
↓ 注入到 Claude 的上下文
Claude 最终回答(基于真实来源,有引用)
为什么"有来源引用的回答"是反幻觉的工程解法
这是值得深入思考的设计哲学。
AI 幻觉的核心问题不是"AI 回答了错误的内容",而是"AI 回答了不知道是否正确的内容却表现出确定性"。两种对抗策略:
策略 A:更好的训练数据和 RLHF → 缓解但无法根治(模型永远不知道自己不知道什么)
策略 B:强制每条断言都来自可验证的来源 → 根本性解决(如果来源不存在,就无法生成该断言)
notebooklm-py 的 Claude Code Skill 走的是策略 B 的路:
arduino
传统 Claude 回答:
"JWT 是一种...(来自训练数据,可能是过期版本)"
接入 NotebookLM 的 Claude 回答:
"根据 architecture-v3.md(第 4 页第 2 段),
你们系统的 JWT 实现使用了 ECDSA 签名...
(来自你自己上传的文档,可追溯)"
这种模式特别适合:代码库文档、API 规范、内部流程手册、产品需求文档------这些知识只存在于你的组织内部,模型训练数据里没有,只能通过文档检索来获取。
超越网页界面的能力
notebooklm-py 能做一些 NotebookLM 网页界面做不到的事:
python
# 批量创建多个 Notebook(网页需要一个个手动点)
notebooks = await asyncio.gather(*[
nlm.create_notebook(f"研究主题 {i}")
for i in range(10)
])
# 程序化引用固定(网页界面的隐藏功能)
await notebook.pin_citation(citation_id="cit_abc123")
# 研究代理:自动搜索并导入相关网页(超出网页界面能力)
await notebook.research_web(
query="量子计算最新进展 2026",
auto_import=True,
max_sources=15
)
# 定时更新知识库(CI/CD 中自动同步最新文档)
async def sync_docs():
notebook = await nlm.get_notebook("产品文档")
await notebook.sync_sources("./docs/") # 只添加新文件,不重复导入
使用风险与权衡
这个项目最重要的技术限制值得正视:
| 风险 | 影响 | 缓解方式 |
|---|---|---|
| 基于未公开 API | Google 随时可能改变接口,导致工具失效 | 关注项目更新,有 fallback 方案 |
| 浏览器自动化 | 需要本地环境,无法在 CI/CD 中使用完整功能 | CLI 模式部分功能可在无头环境运行 |
| 非官方客户端 | 违反 Google ToS(服务条款)风险 | 作者标注为"个人使用和原型验证" |
| Beta 状态 | API 接口可能在版本间变化 | 锁定版本号,生产环境谨慎使用 |
作者在文档中明确说明:这个工具适合原型验证和个人项目,不建议用于关键生产系统。
项目地址与资源
官方资源
- 🌟 GitHub : github.com/teng-lin/no...
- 📦 PyPI : pypi.org/project/not...
- 📖 Skill 安装指南 : 见仓库
skills/README.md
安装快速参考
bash
# 基础安装
pip install notebooklm-py
# 含浏览器自动化支持(Skill 集成必须)
pip install "notebooklm-py[browser]"
# Claude Code Skill 安装
notebooklm skill install
notebooklm auth login # 首次认证
适用人群
- 研究人员:自动化文献综述工作流,批量导入论文并查询知识库
- 开发团队:把 API 规范、架构文档注入 Claude Code,获得有来源依据的代码建议
- 内容创作者:批量从文档生成播客、幻灯片、思维导图
- AI 工具构建者:研究跨厂商 AI 能力组合(Claude + NotebookLM/Gemini)
总结与展望
核心要点回顾
- 完整 API 封装:Notebook CRUD、多类型来源导入、RAG 查询、Studio 内容生成(音频/视频/幻灯片/闪卡)全覆盖
- 三种使用方式:Python 异步 API(流水线)、CLI(脚本/CI)、Claude Code Skill(AI 会话集成)
- 跨厂商 AI 协作:Claude 的推理 + NotebookLM/Gemini 的知识检索,形成互补
- 反幻觉工程实践:强制每条断言都来自可追溯来源,而不是依赖模型的训练数据
- 超越网页界面:批量操作、程序化引用固定、研究代理自动导入------这些能力只能通过 API 实现
一句话评价
notebooklm-py 做了 Google 不愿意做的事------把 NotebookLM 变成一个可编程的知识引擎;而它的 Claude Code Skill 则做了一件更有意思的事:让两个不同厂商的 AI 系统协作,各自做自己最擅长的部分。
欢迎来我的个人主页找到更多有用的知识和有趣的产品