返回首页

JuliaLM:无需 ChatGPT 的知识库 RAG

JuliaLM — 个人知识库的开源 RAG 系统。使用 SurrealDB 存储向量和图,级联解析 PDF/YouTube,四种搜索策略。包含 FSRS 闪卡和上下文预算。

构建 JuliaLM:基于你技术栈的 NotebookLM 类似系统
Advertisement 728x90

JuliaLM:面向个人知识库的一体化RAG系统

开发者常面临处理大量文档的挑战:PDF、YouTube讲座、网页等。像ChatGPT这样的标准聊天机器人在处理多源内容时会丢失上下文,而现成的RAG框架则难以应对扫描文档和视频。JuliaLM通过定制化流程解决这一问题:一次性源加载、多策略搜索和上下文预算管理。该系统基于Nuxt.js、FastAPI和SurrealDB构建,提供向量搜索、聊天和闪卡生成功能。

技术栈架构与SurrealDB选择

Nuxt.js前端通过REST和SSE与后端通信。FastAPI使用LangGraph编排AI、管理任务队列,并与SurrealDB集成。该数据库将关系表、图连接和向量搜索整合在单一服务中,替代了Postgres + Redis + Pinecone的组合。

前端 (Nuxt.js)
    ↕ REST + SSE
后端 (FastAPI)
    ├── LangGraph (AI编排)
    ├── 后台命令 (任务队列)
    ├── SurrealDB (数据 + 向量 + 图)
    ├── Gotenberg (文档转换)
    └── MiniMax / 嵌入API (LLM + 向量化)

任务队列基于SurrealDB实现,支持重试(最多5次)和指数退避。轻量级源采用同步处理(5–10秒);重型PDF则异步处理并轮询状态。

Google AdInline article slot

级联源解析

文档处理采用后备方案确保可靠性:

  • PDF和办公文件:使用Docling转换为Markdown并保留结构(标题、表格)。后备方案——基于LibreOffice的Gotenberg处理PPTX/XLSX。
  • YouTube:1) youtube-transcript-api(按语言获取字幕:俄语→英语→西班牙语→葡萄牙语);2) pytubefix(Android客户端);3) Firecrawl/Jina。
  • 网页:Playwright(JS渲染、UA/视口随机化)+ readability;后备方案——Jina Reader、HTTP。
  • 图像:使用视觉模型进行手写文本OCR。

这确保了即使YouTube API失效或遇到验证码也能提取文本。

向量化与多策略搜索

文本被分割为约500个令牌的块(重叠率15%),优先分隔符:双换行→单换行→句号。这是针对科学文本在准确性和上下文之间的经验平衡。

Google AdInline article slot

源搜索并行结合四种策略:

  • 向量搜索——通过嵌入进行语义搜索(余弦相似度≥0.15)。
  • 文本搜索——基于全文的BM25。
  • 标题搜索——基于标题。
  • 洞察搜索——基于摘要和洞察。

去重:每次匹配得分+0.05。取前5个结果。

长文档的上下文预算管理

总体限制——300,000字符(75K令牌)。每源:最小5,000,最大40,000。

Google AdInline article slot
  • 短源:全部使用。
  • 长源 + 已知查询:洞察 + 相关块(内部向量搜索)。
  • 长源 + 未知查询:洞察 + 文本开头。

这种方法防止处理书籍时上下文溢出。

基于FSRS的闪卡

以JSON格式生成“问题-答案”对并进行验证。通过FSRS实现间隔重复:稳定性、难度、状态参数(新/学习中/复习中)。评分1–4重新计算计划。集成到笔记本中,无需导出到Anki。

高级数据库搜索

两种基本模式:BM25和向量搜索。“询问数据库”——LangGraph图:

  • 生成最多5个子查询及指令。
  • 并行搜索(每查询最多10个结果)。
  • 合成中间答案。

关键要点

  • 级联解析保证从任何源(包括无字幕YouTube视频)提取文本。
  • 四种搜索策略相比单一向量搜索,召回率提升20–30%。
  • 上下文预算允许处理超过1000页的语料库而不失相关性。
  • FSRS集成通过自动化间隔重复简化学习。
  • SurrealDB简化部署:一个容器替代三个数据库。

— Editorial Team

Advertisement 728x90

继续阅读