乐于分享
好东西不私藏

传统RAG把文档切碎,TreeSearch不接受,结果反而更快更准

传统RAG把文档切碎,TreeSearch不接受,结果反而更快更准

无需 Embedding,无需向量库,无需切分——开源项目TreeSearch 用树结构保留文档灵魂,毫秒级检索万级文档。

你是不是也被 RAG 切碎过?

用过 RAG 的人都知道这个痛点:

文档被机械地切成固定大小的 chunk,喂给向量数据库,检索出来的片段上下文断裂,拼不出完整语义。你问"第三章的实验方法是什么",它给你返回一坨没有章节归属的文字碎片。

传统 RAG 的致命缺陷,不在于检索不够快,而在于它根本不理解文档的结构。

一篇论文有章节层级,一份 API 文档有标题嵌套,一段代码有类和函数的从属关系——这些天然的结构,才是人类理解文档的钥匙,却在 chunk 切分的那一刻,全部丢失了。

TreeSearch,就是为了解决这个问题而生的。

TreeSearch 是什么?

TreeSearch是一个结构感知的文档检索库。它的核心理念极其简洁:

把文档解析成树,而不是切成块。

传统 RAG:文档 → 切成 chunks → 向量化 → 检索 → ❌ 上下文断裂
TreeSearch:文档 → 解析为树结构 → 结构化检索 → ✅ 保留完整语义

支持 Markdown、纯文本、代码文件(Python AST + 正则,Java/Go/JS/C++ 等)、HTML、XML、JSON、CSV、PDF、DOCX——几乎你能想到的文档格式,它都能解析成树。

然后呢?用 SQLite FTS5 做关键词匹配。没有向量,没有 Embedding 模型,没有 API Key,毫秒级出结果。

为什么它比传统 RAG 更好?

传统 RAG
TreeSearch
预处理
分块 + 向量嵌入
解析标题 → 构建树
检索方式
向量相似度搜索
FTS5 关键词匹配(无需 LLM)
多文档
需向量数据库路由
FTS5 跨文档打分
文档结构
分块后丢失
完整保留为树形层级
依赖
向量数据库 + 嵌入模型
仅 SQLite

核心优势——五个"无需":无需向量嵌入、无需分块、无需向量数据库、无需 LLM 调用、无需等待。

QASPER 基准 Tree 模式 MRR 0.50(+25% vs 纯 FTS5);CodeSearchNet Flat 模式 MRR 0.91。

三种检索模式,自动帮你选

Tree 模式——论文、长文档,锚点定位 + 树遍历找最优路径Flat 模式——代码搜索、关键词查询,纯 FTS5 倒排索引Auto 模式(默认)——智能选择,零配置

Auto 模式三层策略:类型映射 → 深度校验 → 比例阈值,不会出现"1 个 markdown 混在 50 个代码文件里就全走 tree"的问题。

三大核心场景

技术文档问答:100+ 份 API 文档、设计文档、RFC 毫秒检索,返回完整章节不是碎片

代码库语义搜索:AST 解析 + ripgrep 加速,搜索"登录相关"直接定位完整类和函数

学术论文检索:50 页论文自动定位到"3.2 Experimental Design"章节

安装超简单

pip install -U pytreesearch
treesearch "认证系统如何工作?" src/ docs/

macOS/Linux 也可以用 Rust CLI(不依赖 Python):

brew tap shibing624/tap && brew install treesearch

写在最后

TreeSearch 的价值不在于"更快"——虽然确实快——而在于它重新定义了文档检索的思路:不是把文档切碎后强行拼凑,而是尊重文档的天然结构,让检索结果本身就带有上下文。

https://github.com/shibing624/TreeSearch

相关学习资料