核心思路:用虚拟文件树替代平铺向量库

OpenViking 的设计起点很直觉:与其把所有内容切成碎片扔进一个大池子,不如给它们建一套有层级、有路径的虚拟文件系统。所有上下文统一映射到 viking:// 这棵树上:

viking://
├── resources/      ← 文档/代码/网页
├── user/memories/  ← 用户偏好
└── agent/
    ├── skills/     ← 可复用技能
    └── memories/   ← 任务经验

每个节点有唯一 URI,AI 可以像操作文件一样读写上下文。这个设计最实用的地方在于:所有操作都可追踪、可调试,不再是向量库里的黑箱。

三层上下文(L0/L1/L2):token 不再爆炸

写入时,OpenViking 自动为每份内容生成三个粒度的摘要:

  • L0 Abstract:约 100 tokens,用来快速判断「这里有没有我要的东西」
  • L1 Overview:约 2k tokens,规划阶段的决策依据
  • L2 Detail:完整原文,真正需要时才加载

类比一下:先看书的封面摘要,再翻目录,最后才读正文。AI 不需要每次把整本书读完,推理成本大幅下降。对于独立开发者来说,这直接关系到 API 调用费用——省下来的 token 就是省下来的钱。

目录递归检索:精度和召回率可以兼得

传统向量搜索的做法是全库暴力匹配最相似的 chunk,语义相近但实际无关的内容经常混进结果。OpenViking 换了一套策略:

  1. 对用户意图做分析,拆解出多个检索条件
  2. 在顶层做向量搜索,锁定高分目录
  3. 进入目录内部做二次精细搜索
  4. 如果还有子目录,继续递归向下
  5. 汇总所有候选,返回最终结果

思路就像在图书馆找书:先定位到书房,再找到书架,最后拿到那本具体的书。层层缩小范围,召回率和精度同时提升。

Session 记忆提取:Agent 越用越懂你

每次会话结束时,OpenViking 会自动触发记忆提取:

  • 用户偏好写入 user/memories/
  • 任务经验写入 agent/memories/

下次启动时自动加载,用户不需要重新介绍自己,Agent 也不用从零开始理解上下文。这是真正意义上的「上下文自进化」——对于想搭建长期服务用户的 AI Agent 来说,这个能力几乎是刚需。

一句话总结

RAG 存的是碎片,OpenViking 存的是结构。如果你正在搭建自己的 AI Agent 或知识库应用,遇到了检索质量的瓶颈,值得花一个晚上读一下它的设计文档,看看「文件系统范式」的思路能不能嫁接到你的系统里。项目已在 GitHub 开源,可以直接查看源码和文档。