论文精读:《Directory-Aware Query and Maintenance in Vector Databases》 论文 Fig.2 的完整目录树/根目录 │ ├── HR/ 【Local{1}】 【Inc{1,2}】 │ ├── overview.pdf ............ doc_1 ← 直接放在 HR │ └── Policies/ 【Local{2}】 【Inc{2}】 │ └── benefits.pdf ....... doc_2 ← 放在子文件夹 Policies │ ├── Finance/ 【Local{3}】 【Inc{3}】 │ └── report_finance.pdf ...... doc_3 │ ├── Legal/ 【Local{4}】 【Inc{4}】 │ └── report_legal.pdf ........ doc_4 │ ├── Dept_A/ 【Local{5}】 【Inc{5,8}】 │ ├── report_A.pdf ............ doc_5 ← 直接放在 Dept_A │ └── OKR/ 【Local{8}】 【Inc{8}】 │ └── plan_A.pdf .......... doc_8 │ ├── Dept_B/ 【Local{6}】 【Inc{6,9}】 │ ├── report_B.pdf ............ doc_6 ← 直接放在 Dept_B │ └── OKR/ 【Local{9}】 【Inc{9}】 │ └── plan_B.pdf .......... doc_9 │ └── Archive/ 【Local∅】 【Inc{7}】 └── HR/ 【Local{7}】 【Inc{7}】 └── old_policy.pdf ...... doc_7基本信息arXiv:2606.16903v12026-06-15作者来自杭州电子科技大学、浙江大学、字节跳动Viking 向量引擎团队15 页。核心成果把 目录层级语义 作为向量数据库的一等公民能力并已落地进开源 Agent 上下文库OpenViking。0. 背景速成先扫清陌生概念向量数据库 / RAG把文档切块后用 embedding 模型如 bge-m3转成 1024 维向量存入向量库提问时把问题也向量化做 k 近邻k-NN相似度检索再把命中片段喂给 LLM 生成回答这就是 RAG。ANN 索引精确算全库太慢工业上用近似最近邻索引加速本文测了两种主流类型 ——PGProximity Graph近邻图即 HNSW 那类图索引和IVF倒排文件先聚类分区再搜。现状痛点接口 —— 标量元数据过滤metadata filtering现在的向量库只能给条目打扁平标量属性做过滤如categoryfinance、price100再在满足条件的候选集里跑向量排序。它表达不了 层级目录 这种结构。本文的一句话现实数据代码仓库、企业 Wiki、文件系统、Agent 记忆都是一层层文件夹组织的但向量库只把路径当普通字符串存导致 在某目录及其所有子目录里递归搜索 和 整体搬移 / 合并一个文件夹 这两件最常见的事都很难做、很贵。本文要把这套目录结构原生内置进向量库。一、研究目标与待解决的实际问题先看一棵最朴素的文件夹树论文里的例子,记住这棵树下面所有操作都对着它走。/根目录相当于此电脑 ├── HR/ ← 人事文件夹 │ ├── overview.pdf (doc_1) ← 直接放在HR里的文件 │ └── Policies/ ← HR里面还有个子文件夹政策 │ └── benefits.pdf (doc_2) ← 放在子文件夹里的文件 ├── Dept_A/ ← A部门文件夹 │ ├── report_A.pdf (doc_5) │ └── OKR/ │ └── plan_A.pdf (doc_8) └── Dept_B/ ← B部门文件夹 ├── report_B.pdf (doc_6) └── OKR/ └── plan_B.pdf (doc_9)1.1 研究目标论文原话定位This paper studies native directory semantics as a first-class capability for vector databases.把原生目录语义作为向量数据库的一等能力来研究。具体落地为形式化定义两个核心算子并在一个解耦于 ANN 索引的 可插拔目录语义层 上实现、对比三种方案。DSQDirectory-Semantic Query目录语义查询读路径按目录拓扑圈定合法候选集再交给向量排序支持递归查询Recursive搜目标目录及其所有子孙目录里的条目。例锚定/HR/应同时命中/HR/overview.pdf(doc_1) 和/HR/Policies/benefits.pdf(doc_2)。非递归查询Non-Recursive只搜直接挂在该目录下的条目不含子目录。例对/HR/非递归只返回 doc_1排除子目录里的 doc_2。派生操作排除某分支、兄弟查询、祖先查询都可由这两个基元组合得到。为什么要分递归/非递归两种因为需求不同有时你要 整个部门全搜递归有时只要 这一层目录下直接登记的东西非递归。论文说更复杂的查法比如 排除掉某个子文件夹 只看兄弟文件夹 往上看祖先目录都能用这两种基础查法组合出来所以重点只讲这两个。DSMDirectory-Semantic Maintenance目录语义维护写路径在保持命名空间语义的前提下改变拓扑代表操作为MOVE移动子树把整个/Dept_A/挂到/Dept_B/下内部结构不变。如电脑上的 剪切 Dept_A → 打开 Dept_B → 粘贴。注意是搬整个文件夹不是一个个搬里面的文件。MERGE合并子树并去重把/Dept_A/并入/Dept_B/并递归调和同名冲突如两边都有OKR/需合并到同一个OKR里 → {doc_8, doc_9}。论文还说新建文件夹、删文件夹、改文件夹名字都能看成这两个动作的简单变种比如改名≈移动到一个新名字下所以只重点研究 MOVE 和 MERGE。1.2 要解决的真实行业痛点论文给的两类失败 两条工程 workaround 代价痛点本质把层级拍平成标量字符串丢失了拓扑。标量字符串就是一个单独的、平的文字值比如/docs/v2.0/intro.md数据库只把它当成 文件名字符串 来存。层级 / 拓扑这串路径其实藏着 文件夹套文件夹 的父子关系 ——/docs/v2.0/是上级intro.md是下级/archive/v1.0/是另一个平行分支。拍平数据库把这层父子结构抹掉了所有路径在它眼里都是一条条互不相关的平字符串。就像你把一棵树拍扁成一地树叶只捡到叶子丢了枝干。论文引言给了两个 语义相似但语境错误 的检索失败例子失败例子 1现行文档和过时归档被一起捞出来你问 architecture design架构设计向量相似度算法发现/docs/v2.0/里的新文档和问题很像 ✅ 该要/archive/v1.0/里的旧版归档文档文字也很像 ❌ 不该要已经过期了因为数据库只按 文字像不像 打分它不知道/archive/这个文件夹就代表 废弃、别用所以把新旧一锅端。失败例子 2相关材料被无关文件 稀释你在/docs/里想找正经资料但/logs/日志文件夹里有些文件用词和问题也沾边向量算法觉得 也有点像就把它们也排进结果里。真正相关的材料被这些噪音冲淡、淹没了。论文强调这些 不是排序ranking误差而是数据库根本缺少层级作用域的原生算子。意思是这不能怪向量相似度算得不准。相似度其实算对了 —— 旧文档和日志文字上确实像。问题在于你本来只想限定在某个文件夹范围里找可数据库没有 按文件夹圈范围 这个能力它只能在全库里按文字像不像捞。所以是 缺工具不是 算法笨。当前业界的应用层 workaround 及其两条代价这是论文批判的核心workaround权宜之计 / 土办法数据库自己不会按文件夹圈范围那应用程序外面的业务代码就自己动手补。现在要在/src/下递归搜土办法是怎么做的第 1 步应用程序先去另一个外部的元数据存储比如关系数据库里把/src/下面所有后代路径一条条枚举出来列成一张长长的清单[/src/a/x.py, /src/a/y.py, /src/b/z.py, ...]。第 2 步拿这张超长清单向向量库提交一个条件path IN [/src/a/x.py, /src/a/y.py, ...]。析取谓词就是上面那个IN 一大串—— 满足 在这张清单里任意一条 就算合格是个由很多 或者 拼起来的条件。清单可能成千上万条。路径现状 workaround 的后果读递归检索作用域解析变成一个不透明的预处理步骤数据库无法把 结构裁剪 和 向量搜索 联合优化延迟被推高圈范围这件事变成了数据库管不着的、黑乎乎的前置步骤不透明预处理外面先列清单再喂给数据库。数据库不知道哪些目录是空的、哪些该提前剪掉没法把 先按结构剪掉无关分支 和 向量搜索 两件事配合着一起优化只能先笨拙地列一大堆导致延迟被推高。写MOVE/MERGE要在外部目录存储和向量元数据之间协调更新一个逻辑子树操作退化成大量文档级 / 路径级更新 →写放大write amplification并暴露一致性隐患写放大write amplification本来你只想做 搬一个文件夹 这一个动作结果系统被迫拆成一大堆文件级、路径级的更新。举个具体的你要把/Dept_A/整个搬走里面有 1000 个文件。理想搬 1 次文件夹。土办法因为路径是拍平的平字符串系统得挨个修改这 1000 个文件的路径记录还要同步改 外部目录存储 和 向量库元数据 两处。一个动作放大成上千个小更新。一致性隐患这两处外部目录库、向量库是分开存的更新要 两边协调。万一改到一半出错、断电、并发就会出现目录库里显示搬走了向量库里路径还是旧的 ——两边对不上、数据不一致。1.3 设计需求论文 II-D 节给出的四条硬约束也是后文评判三方案的标尺作用域正确性scope correctness向量排序前必须先正确解析出递归 / 非递归目录范围。查询效率query efficiency每次查询不应扫描或展开一棵大子树。维护效率maintenance efficiency结构变更时尽量不要重写受影响子树里的每个条目 / 物化路径。ANN 索引独立性ANN-index independence目录语义只做 候选集解析层能挂在不同向量索引之上不改 ANN 算法本身。二、研究的产业发展价值2.1 对应场景四类天然层级组织的知识载体论文 Fig.1代码仓库如 MineContext/opencontext 的Home/VectorDatabaseCloud/Quic/backends/sqlite_backend.py企业 Wiki / 公司文档如/Bytedance/Documents/Personal个人文件系统kStart/Getting...databasesAgent 上下文 / 记忆存储viking:// 命名空间2.2 核心产业价值RAG/Agent 工程正从 文档集合 走向 运营级知识库生成质量高度依赖召回上下文的相关性与一致性论文引 [11]-[14]而有效搜索空间往往由 项目目录、版本分支、用户记忆命名空间、Agent 技能库 这类结构作用域决定。目录语义是把这层 语境合法性 补进数据库底座。直接服务爆火的 Agent 记忆 / 上下文工程记忆要被频繁 创建、合并、归档、挂到项目或技能上资源子树要随工作区演进而重组论文 IV-C。没有原生目录维护这些都得靠应用层两套存储硬协调 —— 正是 MOVE/MERGE 写放大和一致性隐患的高发区。本文成果已进入OpenViking面向 AI Agent 的开源上下文数据库支持文件系统式组织、L0/L1/L2 分层加载、目录递归检索是可直接被 Agent 框架复用的工程范式。与 hybrid retrieval 互补而非竞争论文 VI 节明确划界混合检索稠密 稀疏、RRF 融合解决 在候选集内怎么排得更准目录语义解决哪些条目有资格被检索。先解析目录候选集再在集内做稠密 / 稀疏 / 混合排序 —— 这给现有向量库提供了一层正交增强落地门槛低。开源贡献了两个大规模 benchmark现有数据集都不暴露目录语义操作WIKI-DirWikipedia 语料 DBpedia 查询 / 相关性标签363,467 个目录、平均深度 11.95、194 万向量化条目、456 条带目录约束的测试查询、1000 MOVE 1000 MERGEbge-m31024 维。ARXIV-Dir276 万篇 arXiv 摘要双命名空间主题层级/cs/AI/均深 2.19时间层级/2024/05/均深 1.92mxbai-embed-large-v11024 维1000 查询ground truth 由暴力搜索算出。 这为后续 目录语义向量检索 研究提供了标准评测底座。工业级验证背书在字节 Viking 引擎C48 核 Xeon Silver 4310 / 125GB上实现并同时跑通 PG图索引与 IVF分区索引两类 ANN证明其索引中立性主张成立。三、核心创新方法、模型与对比优势本文的方法贡献是 一个层 三个方案目录语义层独立于 ANN三个方案分别是PE-Online、PE-Offline、TrieHI。下面逐层拆。DSQ/DSM 是定义一次的 接口标准三种方案是这份标准的三个实现版本3.1 方案一PE-Online在线路径展开查询时展开时间换空间思路入库时只记录条目精确的父目录递归展开推迟到查询时做。存储 / 索引3 个元数据结构均独立于 ANNentry-to-directory每个条目→逻辑父目录映射parent-path 倒排索引每个目录路径键 → 直接挂在它下面的条目集合auxiliary directory index存全部目录键支持前缀枚举、直儿子查询。DSQ递归先用辅助索引枚举出子树里所有目录键K如/HR/→{/HR/,/HR/Policies/}逐个取 posting list 再求并集得 {doc_1, doc_2}。元数据工作量与mq枚举到的目录键数成线性。非递归直接查该路径键的 posting list一次查找即可很便宜。DSM在目录键层面重映射MOVE枚举受影响源键、前缀替换成目标键、重映射 posting listMERGE同名列的 posting list 求并。代价 O (mu)mu 为被移动子树的目录键数。致命弱点递归查询对 又浅又宽 的目录极度敏感 —— 要在查询时枚举海量后代键。3.2 方案二PE-Offline离线路径展开入库时物化祖先空间换时间思路入库时不仅挂到父目录还挂到每一个祖先目录的 posting list。doc_2 在/HR/Policies/就同时写进/、/HR/、/HR/Policies/三个列表。递归 DSQ 变快查/HR/一次命中已物化的祖先列表直接得 {doc_1, doc_2}。代价转移存储 / 入库变重深度 t 的条目贡献t 份祖先副本非递归反而变贵要从已含后代的总集里减去所有直接子目录集合SetTotal \ SetChildren最多 c 次子查找 求差DSM 更重除 O (mu) 路径键重映射外还要做 O (t) 的 祖先成员 更新 —— 把整棵子树集合 S 从 旧专属祖先A⁻ 摘除、加到 新专属祖先A⁺公共祖先不动。3.3 方案三TrieHITrie-based Hierarchical Index原生前缀树层级索引—— 本文主角核心创新不再把层级当成一串路径键而是把目录拓扑本身存成一棵前缀树Trie每个目录就是一个可复用的 作用域对象。数据结构每个 TrieNode 四个字段segment本地目录名children子段名→子节点的哈希表parent父节点指针inclusive_ids含入集合逻辑目录落在本节点或其任一后代的条目 ID 集合。关键不变式论文公式 1务必理解其中Local(v)直接存放在目录 \(v\) 下的条目Inc(v)目录 \(v\) 整个子树内的条目Child(v)直接子目录。通俗讲一个目录节点的 含入集合 直接挂在自己名下的条目 所有孩子节点含入集合的总和。这让目录节点成为一个可复用的物化作用域递归查询直接读这个聚合集维护时只需更新 成员发生变化的祖先链。各操作怎么跑入库从根按路径走到终端节点缺则建把 ID 登记到终端节点并沿祖先链追加到各 inclusive_idsO (t) 次访问 / 更新。递归 DSQ从根走到目标节点O (t)直接读该节点 inclusive_ids无需枚举后代。例/Dept_A/→ {doc_5, doc_8}。非递归 DSQSetTotalInc (p)并上各直接孩子的 Inc 得 SetChildren返回 SetTotal\SetChildren。例/Dept_A/→ {doc_5,doc_8}{doc_8}{doc_5}。MOVE定位源节点 s、旧父、新父SInc (s)从旧专属祖先链摘除 S、加到新专属祖先链然后摘掉源节点、挂到新父的 children 表、改 parent 指针整棵子树作为一个单元重链接。只走源 / 目标两条路径并更新受影响祖先聚合与后代目录键数量无关。MERGE先做祖先聚合迁移拓扑层上不冲突的孩子子树整棵重链接为单元只有同名冲突分支才在 trie 节点上递归调和冲突节点数记 r。先记住一把钥匙每个节点背后都记着一个 袋子 Inc (v)TrieHI 把目录存成一棵树。每个目录节点后面都挂一个袋子incclusive_ids记作 Inc袋子里装的是 我这个文件夹 我所有子文件夹里的全部文件 ID。我们把论文那棵树的每个袋子先填好后面所有操作都用它/根 Inc {1,2,3,4,5,6,7,8,9} ← 全库都在我这棵树下 ├── HR/ Inc {1,2} │ └── Policies/ Inc {2} ├── Finance/ Inc {3} ├── Legal/ Inc {4} ├── Dept_A/ Inc {5,8} ← 自己有doc_5子文件夹OKR里有doc_8 │ └── OKR/ Inc {8} ├── Dept_B/ Inc {6,9} │ └── OKR/ Inc {9} └── Archive/ └── HR/ Inc {7}不变式公式 1就是这句大白话一个节点的袋子 直接放我这儿的文件 我每个孩子袋子里的东西。有了这个预存的袋子后面查、搬、并都很省事。1. 入库插入一个文件沿这条路往上每层袋子都塞一份例子把doc_8放进/Dept_A/OKR/。步骤从根出发走这条路根 → Dept_A → OKR走到 OKR缺这个文件夹就顺手建。把 doc_8 记到 OKR 这个终端节点。沿着祖先链往上每经过一层就把 8 塞进它的袋子OKR 袋子8 → {8}Dept_A 袋子8 → {5,8}根袋子8本来就有补进全集这条路深度 t3就走 3 层、更新 3 个袋子所以是O(t)t 目录深度和全库多少文件无关。类比你把一封信放进 3 层抽屉的最里层顺手在每层抽屉外面的 本柜清单 上都登记一笔。2. 递归 DSQ直接读目标节点的袋子不用翻孩子查/Dept_A/下所有东西含子文件夹从根走到 Dept_A2 步。直接看它的袋子 Inc{5,8}结束。就这么简单 —— 因为袋子里已经预先装好了 我整棵子树的全部文件不用再去打开 OKR 枚举一遍。结果 {doc_5, doc_8}。这就是它比 PE-Online 快的原因PE-Online 没有这个预存袋子得现场一个个翻孩子。3. 非递归 DSQ袋子减去所有孩子的袋子 只留本层只查/Dept_A/这一层直接放着的文件不要子文件夹 OKR 里的。手算SetTotal Dept_A 的袋子 {5,8}SetChildren 所有直接孩子的袋子并起来 OKR 的袋子 {8}本层 SetTotal − SetChildren {5,8} − {8} {5}✅原理总袋子里 本层文件 孩子袋子里的文件把孩子的都减掉剩下的就是只属于本层的 doc_5。4. MOVE移动只拎 门框不动里面每件家具把整个 Dept_A 搬到 Dept_B 下面。关键直觉Dept_A 是一个整体节点搬家只搬这个节点本身里面的 OKR、doc_5、doc_8 一概不碰。步骤定位源节点 sDept_A、它的旧父根、新父Dept_B。S Dept_A 的袋子 {5,8}先把这包东西抓在手里。祖先链调整把 S 从 搬走后不再包含它的旧祖先 袋子里摘除加到 新专属祖先 袋子里公共祖先比如根两边都挂着不动。拓扑动作把 Dept_A 从旧父根的孩子名单里摘掉挂进新父Dept_B的孩子名单改一下 Dept_A 的 parent 指针。为什么便宜因为你只走了 源路径 和 目标路径 这两条线Dept_A 里面有多少个后代文件夹、多少文件完全不用管。类比你把一整个抽屉柜子从房间 A 挪到房间 B只需要拎着柜子搬不用把柜子里每件衣服拿出来重新贴标签。而 PE 方案相当于把每件衣服的标签都重写一遍。5. MERGE合并整箱搬只拆开 同名的箱子把 Dept_A 并进 Dept_B。分两层① 先做祖先袋子迁移和 MOVE 第 3 步同理把 S 的聚合从旧祖先挪到新祖先。② 拓扑合并分两种孩子不冲突的孩子Dept_B 里没有同名文件夹整棵原封不动挂过去。比如 Dept_A 下有个独有文件夹 XDept_B 没有 X那 X 连人带物整个挂到 Dept_B 下不拆开、不重写。同名冲突的孩子这里两边都有OKR/才在这个节点上递归调和—— 把两个 OKR 的袋子合并 {8}∪{9}{8,9}。冲突节点数记 r所以代价是 O (tr)。类比合并两个收纳箱别人独有的格子直接整个端过去只有两个箱子里都叫 OKR 的那个格子才打开把里面东西倒在一起。————回到正文一致性论文 IV-A一次变更内按固定顺序收集受影响条目集 → 改父子链接 → 刷新 entry-to-node 目录与祖先聚合 → 迁走后删除旧绑定重叠路径的变更串行化保证拓扑、目录、inclusive_ids 三者始终一致。工程实现细节条目 ID 集用Roaring bitmaps压缩位图做并 / 交 / 差省内存且集合运算快。3.4 三方案复杂度对比论文表 I、表 II 合并环节PE-Online 查询时展开PE-Offline 入库时物化TrieHI 原生前缀树索引存储低每条目 1 份父列表高每条目 t 份祖先列表中高trie 拓扑 每节点含入集入库低高t 次更新O (t) 节点访问 聚合更新递归 DSQ高枚举 mq 次查找 并集低一次查找O (t) 遍历 一次聚合读取非递归 DSQ低一次查找高1c 次子查找 求差O (tc) 并 / 差MOVE高O (mu) 路径键重映射高O (mu) 重映射 O (t) 祖先更新O (t) 节点访问 祖先聚合更新与子树大小无关MERGE高O (mu) 合并 冲突并集高O (mu)O (t) 祖先 冲突并集O (tr)仅冲突分支递归调和本质权衡PE-Online 用查询延迟换空间PE-Offline 用入库 / 写成本换查询快两者都把层级拍平成标量键共享同一个维护瓶颈 —— 结构变更要重写受影响子树的路径键Offline 还要改祖先TrieHI 用 额外的元数据空间 换取 健壮的递归 DSQ 高效 DSM。3.5 实验证据关键数据全部来自论文(1) 递归 DSQ目录专属延迟表 IV单位 µs只测目录谓词解析、不含 ANN表格数据集方法均值P99P99.9WIKI-Dir 递归PE-Online365,000.80≈365ms913,7042,654,322PE-Offline235.231,3324,233TrieHI273.101,5264,004ARXIV-Dir 递归PE-Online1,089.205,2925,380PE-Offline0.120.931.43TrieHI0.432.803.43→ WIKI 上 PE-Online 的递归目录解析高达365ms而 PE-Offline/TrieHI 仅235–273µs差约 1500 倍。原因图 10WIKI 浅锚点要展开的后代路径 m 在深度 1 时高达236,903个深度 2/4/8 仍有 19 万 / 17.5 万 / 8.65 万。(2) 非递归 DSQ代价反转表 IVWIKI 均值 µsPE-Online29.07最快直接查父键PE-Offline 1037.07TrieHI 945.17。论文澄清TrieHI不以 最简单的非递归查找最快 为目标它要的是递归高效且把非递归开销控制住图 8 证明这点元数据开销相对端到端向量搜索可忽略。(3) 三方法检索质量基本持平图 7、图 8递归 nDCG10 约 0.48–0.52WIKI、Recall100 约 0.94–0.95ARXIV非递归 Recall10 约 0.96–0.98。质量几乎重合差异全在横轴延迟—— 证明只要作用域解析正确目录层不损伤召回质量。(4) DSM 维护图 9对数坐标——TrieHI 最大亮点TrieHI橙线MOVE/MERGE 稳定在0.1–1ms 量级、方差极小PE-Online / PE-Offline蓝 / 绿线在1–100ms 间剧烈波动并出现高频尖峰子树越大越贵、延迟方差越高。原因扩展法要按子树规模重映射 / 合并路径键TrieHI 整棵子树 连根拔起重挂只动两条祖先链。(5) 建库与存储开销表 V建库时间WIKIPG 基线 1491.27s三目录方案 1502.21–1515.25s增幅 1.7%。存储PE-Online 最省PE-Offline 因祖先物化略增TrieHI 最大WIKI-PG基线 7925MB → PE-Online 8143 / PE-Offline 8213 / TrieHI8326MBARXIV-IVF10964 → 11256MB。论文明说这是 为可复用作用域和树本地维护付出的空间代价不存在唯一通吃方案而是空间↔递归 / 维护效率的交易。(6) 端到端落地效果OpenViking表 VI / 表 VIILOCOMO 长对话用户记忆 QALLM-as-judgedoubao-seed-2-0-pro表格系统准确率平均查询时间 (s)总输入 TokenOpenClaw 原生记忆24.20%95.14392,559,404OpenClaw OpenViking82.08%38.837,423,456Hermes 原生记忆33.38%82.479,228,398Hermes OpenViking82.86%27.952,026,755Claude Code auto-memory57.21%49.1353,306,422Claude Code OpenViking80.32%20.4129,968,899→ 三个 Agent 接入后准确率大幅跃升、查询时间下降、Token 用量大幅压缩靠 DSQ 先圈定用户 / 会话作用域 L0/L1/L2 分层避免把整段历史反复塞进 prompt。HotpotQA 多跳知识库 QA表格方法准确率Token/QA延迟 (s)/QANaive RAG62.50%1,2900.11HippoRAG 261.00%72620LightRAG89.00%28,44375OpenViking top-572.75%3,1540.22OpenViking top-2091.00%12,5330.23→ top-20 以 0.23s 拿到 91.00%超过 LightRAG 的 89%而 Token 仅为其 1/2、延迟从 75s 降到 0.23s。关键机理TrieHI 先圈定连贯目录作用域增大 top-k 只是多收 作用域内相关证据而不是灌入全库无关段落。四、落地借鉴可复用思路 知识补充4.1 可直接复用的创新思路与学习重点解耦的作用域解析层 架构目录 / 结构约束先解析成候选 ID 集再交给任意 ANN 排序。做自己的系统时不必改动底层 HNSW/IVF只需在其上加一层 谓词→候选集 的元数据层这是最低侵入的落地路径。节点即可复用作用域 的物化思想公式 1 含入集不变式把 目录 缓存好的聚合候选集递归查询零展开写操作只回刷受影响祖先链。这个 自顶向下聚合、变更只改祖先链 的模式可迁移到任意层级标签体系标签树、组织架构、分类法。写优化的关键洞察 —— 整子树重链接relink代替逐条重写MOVE 不改每个后代只改一个 parent 指针 两条祖先链的聚合。做层级搬迁 / 重组类功能时优先找 单元移动 而非 逐条更新。冲突局部化的 MERGE不冲突子树整棵搬只在同名分支上递归调和避免全量合并。L0/L1/L2 分层上下文 目录作用域先轻量摘要 (L0) 定位、再按需取细节 (L2)配合 DSQ 圈范围是显著降 Token、提准确率的 Agent 记忆工程手法LOCOMO 结果直接证明。选型指导别盲目上 TrieHI只读、几乎不维护、目录浅窄 → PE-Online 最省递归读极多、写少、能接受空间 → PE-Offline 够用频繁 MOVE/MERGE、子树大、要求稳定低延迟 → TrieHI。方法论借鉴论文把 目录操作 抽象成 2 个读原语 2 个写原语再用 目录专属延迟剥离 ANN 单独度量元数据层成本并同时测两种 ANN 以隔离变量 —— 做系统论文评测时值得模仿。4.2 需要额外补充的背景知识深入该方向前ANN 索引家族HNSW/NSG 等图索引PG、IVF 倒排聚类、量化PQ/SQ、DiskANN理解 候选集密度如何影响图遍历连通性论文图 11 提到约束越选择性PG 有效节点越稀疏、图连通变弱反而要更多遍历故 PG 延迟随深度上升而 IVF 分区探测为主、曲线更平。过滤向量检索filtered vector search解耦式谓词优化、按谓词选择性选择执行计划、coupled index标签索引、范围索引—— 本文 VI 节相关工作是该方向的直接邻域。集合表示Roaring bitmap 的分桶 / 容器压缩原理array/bitmap/run 容器切换并交差复杂度。Trie / 前缀树 / 层级聚合数据结构基数树radix tree、压缩前缀树以及 路径压缩、lazy 聚合 等变体。RAG 与 Agent 记忆基线Naive RAG、HippoRAG 2图谱记忆、LightRAG层次化图谱、LOCOMO/HotpotQA 评测协议、LLM-as-judge。写放大write amplification与一致性LSM-tree、副本协调、事务隔离在层级变更中的体现。未来方向论文 VII 自陈把 DSQ 扩展到更丰富的路径谓词前缀约束、通配符*、多分支排除以及语义约束 层级约束混合的代价感知查询规划—— 这是可直接跟进的选题缝隙。五、完整端到端流程从入库到查询到维护5.1 离线入库Ingestion文档 / 摘要经 embedding 模型WIKI 用 bge-m3、ARXIV 用 mxbai-embed-large-v1转 1024 维向量。构建两套索引①底层 ANNPG 图 / IVF 分区②目录语义元数据层三方案之一。TrieHI 入库按 URI / 路径从根遍历 trie缺节点则建条目 ID 挂到终端节点Local并沿祖先链追加进各节点inclusive_ids维护公式 1 不变式。写公共 entry-to-node 目录记录本条目当前逻辑父节点用于 DSM 记账三方案共有评测时剔除以公平比较。5.2 在线查询DSQ读路径查询语句先经parser解析出目录约束锚定路径 p、递归 / 非递归。作用域解析层与 ANN 解耦把约束解析成候选条目 ID 集递归TrieHI 走到 p 节点直接读Inc(p)非递归Inc(p) \ ⋃ Inc(直接孩子)派生排除 递归集相减通配 按层匹配孩子名继续遍历。候选 ID 集交给 ANN 执行器只在集内做向量排序返回 top-k。度量检索质量 nDCGk / Recallk 端到端延迟并单独剥离 目录专属延迟。5.3 结构维护DSM写路径以 MOVE / MERGE 为例变更前先圈定受影响 trie 区域MOVE 源子树 目标路径MERGE 源 / 目标两子树重叠变更串行化。收集受影响条目聚合集 SInc (源根)。祖先聚合迁移把 S 从 旧专属祖先 A⁻ 摘除加到 新专属祖先 A⁺公共祖先不动。改拓扑MOVE 源节点脱离旧父 children、挂入新父、改 parent 指针MERGE 不冲突子树整棵 relink同名冲突分支递归合并。刷新 entry-to-node 目录删除失效旧绑定保持公式 1 一致。此后 DSQ 即按新命名空间解析。5.4 OpenViking 端到端集成闭环viking:// URI 段 → trie 目录节点记忆 / 资源 / 技能文件系统式组织L0 摘要 / L1 概览 / L2 全文共享同一作用域查询先递归 DSQ 圈范围 → 集内向量排序 / 聚合 → 按需向 L2 取证据 → 喂给 Agent/QA重组走 DSM。一句话总结这篇论文的贡献不是 新的向量排序算法而是指出向量库把层级目录拍平成字符串是一切读延迟与写放大的根源它用 可插拔作用域层 2 读 2 写原语 把设计空间讲清并证明原生前缀树TrieHI以可控的额外存储换来递归查询免展开、子树搬迁只改祖先链的稳定低延迟最终在 Agent 记忆LOCOMO 准确率 24%→82%和多跳 QAHotpotQA 91% 0.23s上拿到可落地收益。