核心思路:用虚拟文件树替代平铺向量库
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 换了一套策略:
- 对用户意图做分析,拆解出多个检索条件
- 在顶层做向量搜索,锁定高分目录
- 进入目录内部做二次精细搜索
- 如果还有子目录,继续递归向下
- 汇总所有候选,返回最终结果
思路就像在图书馆找书:先定位到书房,再找到书架,最后拿到那本具体的书。层层缩小范围,召回率和精度同时提升。
Session 记忆提取:Agent 越用越懂你
每次会话结束时,OpenViking 会自动触发记忆提取:
- 用户偏好写入
user/memories/ - 任务经验写入
agent/memories/
下次启动时自动加载,用户不需要重新介绍自己,Agent 也不用从零开始理解上下文。这是真正意义上的「上下文自进化」——对于想搭建长期服务用户的 AI Agent 来说,这个能力几乎是刚需。
一句话总结
RAG 存的是碎片,OpenViking 存的是结构。如果你正在搭建自己的 AI Agent 或知识库应用,遇到了检索质量的瓶颈,值得花一个晚上读一下它的设计文档,看看「文件系统范式」的思路能不能嫁接到你的系统里。项目已在 GitHub 开源,可以直接查看源码和文档。