在 AI 驱动的研究工具领域,开源项目 open-notebook 提供了完全本地的 NotebookLM 替代方案,聚焦隐私、多模态内容管理和智能输出生成。其核心工程价值在于高效的本地文档 RAG(Retrieval-Augmented Generation)、灵活的自定义 LLM 集成,以及结构化播客生成管道。这些组件通过 LangChain 工作流、Esperanto 多模型适配器和 SurrealDB 存储无缝协作,实现多文档合成与 TTS 叙述输出。
本地文档 RAG 管道:多模态摄入与向量检索
open-notebook 的 RAG 系统从多模态文档摄入开始,支持 PDF、视频、音频、网页、Office 文件等。通过 Docling 等解析器提取文本和元数据,随后 chunking 分块(典型块大小 512-1024 tokens,overlap 20%),生成 embeddings。嵌入模型可选 OpenAI text-embedding-3-small(维度 1536,低成本)、Ollama/nomic-embed-text(本地免费)或 Voyage 等专业嵌入服务。
证据显示,该系统结合全文搜索(SurrealDB 原生)和向量相似度检索(余弦相似度阈值 >0.8),确保检索精度。用户可配置上下文粒度:Notebook 级(全文档)、Source 级(单文件)或 Note 级(精选摘要),避免 token 爆炸。在 chat/notes 生成中,RAG 注入 top-k=5 片段作为提示前缀,提升幻觉控制。
可落地参数清单:
- Chunking 配置:max_chunk_size=800, chunk_overlap=100;视频 / 音频转录使用 Whisper(OpenAI/Groq)。
- Embedding 选型:本地 Ollama 时,模型路径
/models/nomic-embed-text,batch_size=32 加速。 - 检索阈值:similarity_top_k=3-7,score_threshold=0.75;监控召回率 via API /search/metrics。
- 存储优化:SurrealDB namespace=open_notebook,索引向量字段
embedding(HNSW 索引,ef_construction=128)。 - 风险阈值:若本地 GPU <8GB,fallback 云嵌入;文档>100MB 时异步处理。
此 RAG 设计确保 100% 本地运行,数据永不外泄,适合敏感研究场景。
自定义 LLM 集成:Esperanto 多提供商适配
项目通过 Esperanto 库实现 LLM 抽象层,支持 16+ 提供商,包括云端 OpenAI/GPT-4o-mini(低成本 0.15$/M tokens)、Anthropic/Claude-3.5-sonnet(推理强)和本地 Ollama/Llama3.1-8B(零成本)。集成 LangChain LCEL(LangChain Expression Language)链式调用:RAG → Prompt → LLM → Post-process(引用提取)。
如 GitHub README 所述,“支持 OpenAI、Anthropic、Ollama 等 16+ 种 AI 模型提供商”。配置 via 环境变量:LLM_PROVIDER=ollama,OLLAMA_BASE_URL=http://host.docker.internal:11434,模型 llama3.1:8b。推理参数统一:temperature=0.7(创意平衡)、max_tokens=2048、top_p=0.9。
可落地清单:
- Provider 切换:Docker env
LLM_PROVIDER=openai,OPENAI_API_KEY=sk-...;测试 API /models/list。 - 本地优化:Ollama GPU 加速(CUDA 12+),quantization Q4_K_M 减存 50%;监控 VRAM <80%。
- Fallback 策略:主 LLM 失败时切换备用(如 GPT-4o-mini → Llama3),超时 30s。
- 提示工程:系统提示模板注入 RAG 上下文,“基于以下来源 [chunks] 回答,引用 ID”;reasoning 支持 o1-preview。
- 成本监控:API 仪表盘追踪 tokens/input-output,阈值 1M tokens / 日 警报。
此集成消除厂商锁定,支持混合模式(嵌入云 LLM,生成本地)。
结构化播客生成:TTS 多说话者与多文档合成
播客生成是亮点:从多 sources/notes 合成脚本,支持 1-4 说话者(自定义 profile:性别、口音、语气)。流程:1) 多文档合成(RAG 汇总 top sources);2) LLM 生成对话脚本(结构:引言 - 辩论 - 总结);3) TTS 分段渲染(ElevenLabs/PlayHT,voice_id 如 "Adam" 男声);4) 音频拼接 + BGM。
Episode Profiles 定义说话者:Speaker1(专家,正式)、Speaker2(主持人,随和)。TTS 参数:stability=0.5(自然变异)、similarity_boost=0.75(一致性)。输出 MP3,带章节标记。
可落地参数:
- 合成提示:
生成 2 说话者播客,长度 5-10min,焦点 {query},来源 {rag_chunks}。 - TTS 配置:
TTS_PROVIDER=elevenlabs,XI_API_KEY=...,voices=["pNInz6obpgDQGcFmaJgB", "EXAVITQu4vr4xnSDxMaL"];速度 1.0-1.2x。 - 多文档阈值:sources >10 时,优先级 score>0.9;脚本分段 <300s / 段,避免长时合成。
- 质量检查:WER <5%(转录验证),MOS 分数>4.0;回滚纯文本脚本。
- 部署钩子:POST /podcasts/generate,webhook 通知完成。
相比 NotebookLM 固定 2 说话者,此系统灵活,支持本地 TTS(如 Piper)零成本。
部署与监控:Docker 单容器工程化
推荐 Docker lfnovo/open_notebook:v1-latest-single,暴露 8502 (Next.js UI)、5055 (FastAPI API)。卷挂载:/notebook_data (内容)、/surreal_data (DB)。远程访问设 API_URL=http://{IP}:5055。
监控要点:
- 资源:CPU<80%、RAM 4-16GB(视模型)、GPU for Ollama。
- 健康检查:
/healthendpoint,DB 连接 >99.9%。 - 日志:Promtail + Loki,警报 OOM / 超时。
- 安全:密码保护 via
PASSWORD_HASH,HTTPS reverse proxy (Nginx)。 - ** scaling**:Compose 多副本,SurrealDB 集群;更新
docker pull v1-latest。
风险:端口暴露防火墙限 IP;本地模型冷启动 10-30s,预热脚本。
总结,此工程实现将 NotebookLM 开源化,提供参数化、可观测管道,适用于生产研究工作流。未来可扩展实时协作、更多 TTS。
资料来源: [1] https://github.com/lfnovo/open-notebook (README & docs) [2] https://www.open-notebook.ai/