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则异步处理并轮询状态。
级联源解析
文档处理采用后备方案确保可靠性:
- 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%),优先分隔符:双换行→单换行→句号。这是针对科学文本在准确性和上下文之间的经验平衡。
源搜索并行结合四种策略:
- 向量搜索——通过嵌入进行语义搜索(余弦相似度≥0.15)。
- 文本搜索——基于全文的BM25。
- 标题搜索——基于标题。
- 洞察搜索——基于摘要和洞察。
去重:每次匹配得分+0.05。取前5个结果。
长文档的上下文预算管理
总体限制——300,000字符(75K令牌)。每源:最小5,000,最大40,000。
- 短源:全部使用。
- 长源 + 已知查询:洞察 + 相关块(内部向量搜索)。
- 长源 + 未知查询:洞察 + 文本开头。
这种方法防止处理书籍时上下文溢出。
基于FSRS的闪卡
以JSON格式生成“问题-答案”对并进行验证。通过FSRS实现间隔重复:稳定性、难度、状态参数(新/学习中/复习中)。评分1–4重新计算计划。集成到笔记本中,无需导出到Anki。
高级数据库搜索
两种基本模式:BM25和向量搜索。“询问数据库”——LangGraph图:
- 生成最多5个子查询及指令。
- 并行搜索(每查询最多10个结果)。
- 合成中间答案。
关键要点
- 级联解析保证从任何源(包括无字幕YouTube视频)提取文本。
- 四种搜索策略相比单一向量搜索,召回率提升20–30%。
- 上下文预算允许处理超过1000页的语料库而不失相关性。
- FSRS集成通过自动化间隔重复简化学习。
- SurrealDB简化部署:一个容器替代三个数据库。
— Editorial Team
暂无评论。