引言
"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 接口。
項目包含兩個緊密相關的組件:
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 的完整能力圖譜:
Notebook 管理
├── 創建、列出、重命名、刪除、分享
來源導入
├── URL(網頁)
├── YouTube 視頻
├── PDF 文件
├── Google Drive 文檔
└── 粘貼文本
知識查詢
├── 帶對話歷史的問答(引用來源)
└── 引用固定(pin citations)
內容生成(Studio 功能)
├── 音頻播客(Audio Overview)
├── 視頻概述
├── 幻燈片(PPTX 格式)
├── 測驗(Quiz)
├── 閃卡(Flashcards)
├── 腦圖(JSON 格式)
├── 報告
└── 信息圖
研究代理
├── 網絡研究(自動導入搜索結果)
└── Drive 研究(自動導入雲盤文檔)
三種使用方式
方式 1:Python API(異步,適合自動化流水線)
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)
# 安裝
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)
這是整個項目最值得重點介紹的部分。
# 安裝 Skill(方法 1:通過插件市場)
/plugin marketplace add teng-lin/notebooklm-py
# 安裝 Skill(方法 2:直接安裝到 Skills 目錄)
notebooklm skill install
# 首次認證(瀏覽器登錄 Google 賬號,之後自動維持)
notebooklm auth login
安裝後,在 Claude Code 的對話中:
你:解釋一下我們系統的認證架構,我記得在架構文檔裡有詳細說明
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 集成層
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 的路:
傳統 Claude 回答:
"JWT 是一種...(來自訓練數據,可能是過期版本)"
接入 NotebookLM 的 Claude 回答:
"根據 architecture-v3.md(第 4 頁第 2 段),
你們系統的 JWT 實現使用了 ECDSA 簽名...
(來自你自己上傳的文檔,可追溯)"
這種模式特別適合:代碼庫文檔、API 規範、內部流程手冊、產品需求文檔——這些知識只存在於你的組織內部,模型訓練數據裡沒有,只能通過文檔檢索來獲取。
超越網頁界面的能力
notebooklm-py 能做一些 NotebookLM 網頁界面做不到的事:
# 批量創建多個 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
安裝快速參考
# 基礎安裝
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 系統協作,各自做自己最擅長的部分。
歡迎來我的個人主頁找到更多有用的知識和有趣的產品










