site logo

Marico's space

每日一开源项目(第77期):notebooklm-py - 将 Google NotebookLM 变成可编程 API,支持 Claude Code 集成

编程技术 2026-06-04 14:49:32 9

最近折腾了一下 notebooklm-py,把 Google NotebookLM(谷歌的智能笔记工具)变成了可编程的 API,还顺手接入了 Claude Code,整个过程踩了几个坑,这篇把核心东西说清楚。

Google NotebookLM 是目前最强的个人知识 + AI 问答工具之一:上传文档,它自动摘要、生成播客、做 PPT、回答问题还能标注来源。但有一个致命缺陷:没有官方 API。所有操作都得在网页上手动来。

notebooklm-py 就是来解决这个问题的。它逆向工程了 NotebookLM 一整套未公开的内部接口,让你通过 Python 或命令行完成所有操作,甚至包括网页界面里根本没暴露的功能。更骚的是,它还自带一个 Claude Code Skill,能让 Claude 在对话中实时查询你的 NotebookLM 知识库,把 Gemini 的知识检索和 Claude 的推理能力串起来用。

GitHub 9500+ 星,MIT 协议。

你会学到什么

  • notebooklm-py 的三种使用模式(Python API / CLI / Agent Skill)
  • 它能做到哪些 NotebookLM 网页版做不到的事
  • Claude Code Skill 集成如何实现跨厂商 AI 协作(Claude + NotebookLM)
  • 为什么"带来源标注的回答"是解决 AI 幻觉最直接的工程方案
  • 逆向未公开 API 的代价:能力与脆弱性并存

前置要求

  • 熟悉 Python 基础和 pip 包管理
  • 用过 Google NotebookLM(了解其核心功能)
  • 有 Claude Code 使用经验(跟 Skill 集成部分相关)

项目背景

项目介绍

notebooklm-py 是开发者 Teng Lin 构建的非官方 Python 客户端,通过逆向工程拦截 NotebookLM 网页客户端与谷歌服务器之间的 HTTP 请求来实现功能。

项目包含两个紧密关联的组件:

notebooklm-py ├── Python Library / CLI ← 完整的 NotebookLM API 封装 └── Claude Code Skill ← 让 Claude 在对话中查询 NotebookLM

这两个组件解决不同的问题:Python 库回答"如何自动化 NotebookLM 操作?",Claude Code Skill 回答"如何让 AI 助手的回复基于我的真实文档而不是训练数据?"。

作者信息

  • 主要作者:Teng Lin(GitHub: @teng-lin)
  • 项目性质:非官方、社区驱动、与谷歌无关联
  • 分发渠道:GitHub + PyPI(pip install notebooklm-py
  • 当前版本:v0.5.0(Beta)

项目数据

  • ⭐ GitHub Stars:9500+
  • 📦 PyPI:notebooklm-py
  • 📄 协议:MIT
  • 🐍 Python 版本:≥ 3.10
  • 🖥️ 支持平台:macOS、Linux、Windows
  • ⚠️ 状态:Beta(未公开 API——谷歌改动内部实现可能导致功能失效)
  • 🌐 仓库:teng-lin/notebooklm-py

核心功能

功能覆盖

notebooklm-py 覆盖了 NotebookLM 完整的功能面:

笔记本管理 ├── 创建、列出、重命名、删除、分享 资料导入 ├── 网页 URL ├── YouTube 视频 ├── PDF 文件 ├── 百度云/阿里云盘文档 └── 粘贴文本 知识查询 ├── 带对话历史的问答(答案附带来源) └── 来源引用固定 内容生成(Studio 功能) ├── 音频播客(Audio Overview) ├── 视频概览 ├── PPT 幻灯片 ├── 小测验 ├── 闪卡 ├── 思维导图(JSON) ├── 研究报告 └── 信息图 研究智能体 ├── 网页研究(自动导入搜索结果) └── 云盘研究(自动导入云端文档)

三种使用模式

模式一:Python API(异步,用于自动化流水线)

import asyncio
from notebooklm import NotebookLM async def main(): async with NotebookLM() as nlm: # 创建笔记本 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())

模式二:CLI(用于 shell 脚本和 CI/CD)

# 安装
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 "产品文档知识库" \ "v2 版本的身份验证 API 做了哪些变更?" # 生成内容
notebooklm generate audio --notebook "产品文档知识库"
notebooklm generate slides --notebook "产品文档知识库" --output slides.pptx # 批量同步(CI/CD 中自动更新知识库)
notebooklm source sync --notebook "产品文档知识库" ./docs/

模式三:Claude Code Skill(让 Claude 实时查询 NotebookLM)

这是整个项目最有趣的部分。

# 安装 Skill(方式一:通过插件市场)
/plugin marketplace add teng-lin/notebooklm-py # 安装 Skill(方式二:直接安装到 skills 目录)
notebooklm skill install # 首次认证(浏览器登录谷歌账号,之后自动维持)
notebooklm auth login

安装完成后,在 Claude Code 对话中:

你:解释一下系统的身份验证架构—— 我记得在架构文档里有记录。 Claude:[内部调用 NotebookLM Skill,查询你的"系统架构"笔记本] Claude:根据你的架构文档(来源:architecture-v3.md,第4页), 系统使用了 JWT + Refresh Token 双 Token 机制... [每个论断都有可追溯的来源支撑,而非训练数据的泛化]

深度解析

Claude Code Skill 的工作原理

理解这个 Skill 需要理解它的双层架构:

第一层:浏览器自动化

NotebookLM 没有公开 API,所有操作都需要谷歌账号认证。notebooklm-py 使用浏览器自动化(Playwright)来维持认证状态,抓取 auth token 后直接发 HTTP 请求。

这意味着:

  • ✅ 与网页 UI 完全一致的功能
  • ✅ 本地执行(所有数据留在本地设备)
  • ⚠️ 需要本地 Claude Code(云端/沙盒环境无法运行浏览器)
  • ⚠️ 依赖谷歌内部 API——随时可能失效

第二层:Skill 集成

Claude Code 对话 ↓ 判断需要调用知识库上下文
Skill 被触发 ↓ 构建 NotebookLM 查询
notebooklm-py Python 库 ↓ HTTP 请求发送到谷歌服务器
NotebookLM(Gemini 1.5 Pro 后端) ↓ 返回带来源的答案
Skill 解析响应 ↓ 注入到 Claude 的上下文窗口
Claude 的最终回答(基于真实来源,带引用)

为什么"带来源标注的回答"是解决幻觉的工程方案

这是一个值得深思的设计哲学。

AI 幻觉的核心问题不是"AI 说错了",而是"AI 以完全自信的态度说了一段可能错误的内容"。目前有两种应对策略:

策略 A:更好的训练数据和 RLHF

→ 有所缓解但无法消除(模型永远不知道自己不知道什么)

策略 B:强制每个论断都来自可验证的来源

→ 结构性修复(如果来源不存在,论断就无法生成)

notebooklm-py 的 Claude Code Skill 采用的是策略 B:

传统 Claude 回答:
"JWT 是一种令牌格式...(来自训练数据,可能已过时)" 接入 NotebookLM 的 Claude:
"根据 architecture-v3.md(第4页第2段), 你系统的 JWT 实现使用 ECDSA 签名...
(来自你自己上传的文档,完全可追溯)"

这个模式对于以下场景特别强大:代码库文档、API 规范、内部流程手册、产品需求——这些知识只存在于组织内部,任何模型的训练数据里都没有,只能通过文档检索获取。

超越网页界面的能力

notebooklm-py 有一些 NotebookLM 网页版做不到的功能:

# 批量创建多个笔记本(网页版需要手动逐个点击)
notebooks = await asyncio.gather(*[ nlm.create_notebook(f"研究主题 {i}") for i in range(10)
]) # 编程式来源引用固定(网页 UI 未暴露的能力)
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 谷歌随时可能改动内部实现,导致工具失效 关注项目更新,准备备用方案
浏览器自动化 需要本地环境;无头 CI/CD 无法使用完整功能 CLI 模式支持部分无头操作
非官方客户端 可能存在谷歌服务条款违规风险 作者标注为"个人使用和原型验证"
Beta 状态 API 可能在版本间发生变化 锁定版本号,生产环境谨慎使用

作者在文档中明确说明:这个工具适用于原型和个人项目,不适合对可靠性有严格要求的生产系统

项目链接与资源

官方资源

  • 🌟 GitHub:teng-lin/notebooklm-py
  • 📦 PyPI:pypi.org/project/notebooklm-py
  • 📖 Skill 安装指南:参见仓库中的 skills/README.md

快速安装参考

# 基础安装
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)

总结

核心要点

  1. 完整的 API 覆盖:笔记本 CRUD、多类型资料导入、RAG 查询、Studio 内容生成(音视频/幻灯片/闪卡)——全部可编程
  2. 三种使用模式:Python 异步 API(流水线)、CLI(脚本/CI)、Claude Code Skill(AI 会话集成)
  3. 跨厂商 AI 协作:Claude 的推理能力 + NotebookLM/Gemini 的知识检索——各展所长
  4. 对抗幻觉的工程方案:每个论断都绑定到可追溯来源,而不是依赖模型训练数据
  5. 超越网页界面:批量操作、编程式来源固定、带自动导入的研究智能体——只有通过 API 才能实现

一句话评价

notebooklm-py 做了谷歌自己没做的事——把 NotebookLM 变成可编程的知识引擎。它的 Claude Code Skill 做了更酷的事:让两个不同厂商的 AI 系统协作,每个做自己最擅长的事。

原文链接:https://dev.to/wonbot_ai/