raglite
轻量级 RAG 工具包:DuckDB/PostgreSQL 双后端,Late Chunking +
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
轻量级 RAG 工具包:DuckDB/PostgreSQL 双后端,Late Chunking +
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:RAGLite 由 superlinear-ai 团队开发,核心作者为 Laurent Sorber
想象这样一个场景:你的团队积累了数百份 PDF 格式的技术文档、合同和产品说明,每次找某个具体条款或技术细节都要靠 Ctrl+F 在 Word 里来回跳转,效率极低。
RAGLite 正是为解决这个痛点而生。它将任意格式的文档(以 PDF 为核心)转化为可检索的知识库,再结合大语言模型实现「自然语言问答」——你问「这个版本相比 v1.0 多了哪些安全机制」,RAGLite 自动检索最相关的段落,拼入 prompt,让 AI 在准确上下文中回答,而不是凭空编造。
检索增强生成(Retrieval-Augmented Generation, RAG)并非新技术,但长期以来主流方案存在两个极端:一是 LangChain/Hugging Face 等重型框架,学习曲线陡峭、依赖 PyTorch 等庞大生态;二是简陋的向量数据库方案,只能做简单的相似度检索,无法处理多模态文档、无法理解语义关联。
RAGLite 出现在这个空白地带——它定位为「精干而专业」的 RAG 工具包,仅依赖轻量级开源库(DuckDB、SQLAlchemy、LiteLLM),规避了 PyTorch 和 LangChain 这两个「巨无霸」,在保持功能完整性的同时显著降低了资源开销。
项目由 superlinear-ai 团队维护,核心贡献者 Laurent Sorber 在向量检索和自然语言处理领域有深厚积累,其另一项目 wtpsplit-lite(句子分割工具)被 RAGLite 直接引用,用于解决文档分句这一上游关键问题。
RAGLite 的文档处理链路设计精巧:首先通过 pdftext 将 PDF 转为文本,再利用 pypdfium2 处理版面结构,最终输出 Markdown 格式。这个流程相比直接提取纯文本的优势在于:标题层级、表格结构、图片位置都能保留,为后续分块(chunking)提供结构化输入。
特别值得一提的是其多向量嵌入策略(Multi-vector embedding)——基于 Late Chunking 论文的思想,每个句子独立生成向量,而非整个文档或段落。这带来的直接好处是:当用户提问时,系统能精确定位到「一句话」级别的上下文,减少无关噪声,提升答案精准度。
大多数 RAG 工具的分块逻辑是简单的滑动窗口(sliding window),设定 chunk_size=512 token 暴力切分。这会导致一个经典问题:一个问题的答案被切在两个 chunk 里,检索只能召回一半。
RAGLite 在 _split_chunklets.py 和 _split_chunks.py 中实现了语义分块(semantic chunking),核心思想是将「分块」建模为一个二元整数规划问题——每个句子是否属于当前块,由语义相关度和 token 预算共同约束最优解。此外还使用 wtpsplit-lite 做句子级别分割,从源头保证每个块的语义完整性。
这是 RAGLite 区别于「简单向量检索」的核心差异。系统采用三层检索架构:
这三层配合自适应检索策略(adaptive retrieval):LLM 自行判断是否需要补充检索、何时停止,避免了传统 RAG「一上来就检索」的粗暴模式,显著降低 token 消耗和延迟。
RAGLite 兼容 DuckDB 和 PostgreSQL 两种后端,这是一个务实的双轨设计:
通过统一的 SQLModel ORM 层封装,上层调用代码完全不用关心底层是哪种数据库,切换只需改一行 db_url 配置。
通过 LiteLLM 集成,RAGLite 支持几乎所有主流 LLM 提供商——OpenAI GPT 系列、Anthropic Claude、Azure OpenAI、本地 llama.cpp 模型等。Embedding 模型同样通过 LiteLLM 统一管理。这种「中间层抽象」策略,让用户不被特定模型绑定,可以随时切换性价比最高的方案。
RAGLite 还支持 Model Context Protocol(MCP),可以在 Claude Desktop App 中作为 MCP Server 安装,让 Claude 直接访问 RAGLite 的知识库。这使得 RAGLite 能无缝嵌入 AI Agent 工作流,而不只是作为一个独立工具使用。
RAGLite 提供两条接入路径:
1. Chainlit Web UI(开箱即用)
执行 raglite chainlit 命令即可启动一个基于 Chainlit 的对话界面,无需写一行代码。界面支持上传 PDF、提问、查看检索到的上下文块,可视化程度高,非常适合快速验证效果。
2. Python API(灵活集成)
提供 raglite.insert、raglite.search、raglite.query 等核心 API,数据科学家和工程师可以将其嵌入自己的 Python 应用或 LangChain 替代方案中。
安装方式:通过 uv / pip 直接安装:pip install raglite,依赖会自动拉取。最轻量的使用场景下,只需要 DuckDB + Python 3.10+ 即可运行。
从源码结构来看,RAGLite 采用单包模块化设计(所有代码集中在 src/raglite/ 下),文件划分按功能领域:
| 文件 | 职责 |
|---|---|
_rag.py | 核心 RAG 编排逻辑 |
_database.py | SQLModel ORM 数据模型(Chunk/ChunkSpan/Document) |
_embed.py | 向量嵌入,含 Late Chunking 实现 |
_search.py | 检索引擎:向量 + FTS + Rerank |
_insert.py | 文档插入与分块 |
_split_sentences.py | 句子分割 |
_split_chunks.py | 语义分块 |
_extract.py | LLM 辅助信息抽取 |
_eval.py | RAG 评估框架 |
_bench.py | 性能基准测试 |
_chainlit.py | Web UI 实现 |
_cli.py | Typer CLI 入口 |
_mcp.py | MCP Server 实现 |
_mistral_ocr.py | MistralOCR 集成(可选) |
_config.py | 配置管理 |
总计约 25 个模块,核心逻辑约 3000-5000 行 Python 代码,代码体量适中、易于审计和二次开发。
_eval.py,但主流 RAG 评估基准(Benchmark)的集成还不够成熟。RAGLite 的出现印证了一个趋势:RAG 工具正在从「重型框架」向「轻量工具包」分化。LangChain 曾经是标配,但 2024 年后社区对它的批评声越来越大——过度抽象、调试困难、性能开销大。像 RAGLite 这样「用多少装多少」的设计哲学正在获得更多认可。
截至 2026 年中,RAGLite 已获得 1100+ GitHub Stars,保持活跃开发。其「DuckDB 零运维 + MCP 协议」的组合,代表了 RAG 工具落地的最小化基础设施路线,对于想在本地快速验证 RAG 思路的开发者来说,是一个值得一试的选择。