OpenViking 是字节跳动旗下火山引擎开源的一个项目,给自己下的定义是"AI agent 的上下文数据库"。它解决的问题很具体:现在大多数 agent 的记忆是个黑盒——文本进去,embedding 出来,到底存了什么、为什么检索到这个,没人看得见。OpenViking 的做法是把 agent 的上下文组织成一个虚拟文件系统,让 agent 像操作文件一样操作自己的知识、记忆和技能。当前版本 0.3.22,AGPL-3.0 协议。
定位
agent 的上下文通常分成三类:知识(文档、代码)、记忆(用户偏好、经验)、技能(怎么做某件事的方法)。多数框架把这三样塞进一个扁平的向量池,检索时全局搜一遍。OpenViking 反着来,把这三类东西都放进一个 viking:// 命名空间下的目录树里,每一类都是目录,agent 用 ls、read、grep 这类文件操作去导航。
这样做最大的好处是可解释、可干预:你能打开任意一个目录,看到 agent 到底记住了什么,甚至直接编辑它。每个目录还带一份自动生成的摘要,agent 可以先扫摘要再决定读哪个文件,不用把全文都拉出来。
viking:// 文件系统
整个上下文库是一棵树,顶层按类型分。资源放 resources/,用户记忆放 user/{user_id}/memories/,技能放 skills/:
viking://
├── resources/
│ └── my_project/
│ └── docs/
│ ├── api/
│ └── tutorials/
└── user/
└── {user_id}/
├── memories/
│ └── preferences/
│ ├── writing_style
│ └── coding_habits
├── resources/
└── skills/
├── search_code
└── analyze_data
这个结构本身不复杂,但它把"上下文"从一堆散落的 embedding 变成了一份有路径、可浏览、可编辑的东西。对做 agent 的人来说,这意味着记忆不再是不可见的状态,出了问题能定位到具体目录。
三层加载
OpenViking 把每个目录的内容分成三层,对应不同的加载时机:
- L0(Abstract):一句话摘要,用来快速判断相关性。
- L1(Overview):核心信息和使用场景,用来做规划。
- L2(Details):完整原始数据,需要时才读。
经过语义处理的目录会带着 .abstract.md 和 .overview.md,agent 先读摘要和概述,判断相关了才去读 L2 的全文。这层设计对应的是 token 成本——摘要比全文便宜得多,agent 不用为了判断"有没有用"就把所有内容都拉进上下文。
目录限定的检索
传统向量库是全局搜,OpenViking 支持把语义搜索限定在某个目录子树里——搜一个项目、一个记忆目录,而不是扫整个向量池。CLI 里 find 直接跑查询,search 从会话上下文里规划检索。上手最快的方式是 CLI:
ov status
ov add-resource https://github.com/volcengine/OpenViking
ov task status TASK_ID # 重复执行,直到状态变 completed
ov ls viking://resources/
ov tree viking://resources/volcengine -L 2
ov find "what is openviking"
ov grep "openviking" --uri viking://resources/volcengine/OpenViking/docs/en
ov find 返回匹配的上下文和对应的 URI,你可以顺着 URI 继续 read。部署也不重:装好 uv、Python 3.10+,再配一个 embedding 模型和一个 VLM 就行,服务端初始化走 uv tool install openviking --upgrade && openviking-server init,配置写在 ~/.openviking/ov.conf。
基准数字
官方给了两组评测结果,是这份 README 里最硬的部分。用户记忆这块用 LoCoMo 数据集,接入 OpenViking 后三个 agent 集成(Claude Code、Codex 等)的准确率都到 80–83%,而它们在原生记忆上的准确率只有 24–57%;同时输入 token 下降 34.3%–91.0%,查询延迟下降 58.45%–66.10%。多轮 agent 任务用 tau2-bench,经验记忆让任务成功率在零售场景提升 6.87 个百分点、航空场景提升 11.87 个百分点。评测用的 VLM 是 Doubao 2.0 Pro。
这些数字要打个折看——评测是官方自己做的,用的也是自家的模型。但 24–57% 到 80–83% 这个跨度说明的结论是可信的:原生记忆确实很容易忘,而目录化 + 摘要这套机制对长会话记忆有实质帮助。
局限
几个点要提前知道。第一,协议是 AGPL-3.0,自托管免费,但把你的代码和它深度绑定之前要想清楚传染性条款的影响。第二,它是个服务端,要自己部署、自己管一个 embedding + VLM 的模型配置,不是 pip 装个包就完事。第三,项目很新(2026 年 1 月创建),3 篇支撑论文里两篇还没正式出版,API 和目录语义可能还会有变动。适合想在 agent 记忆上做严肃尝试、且能接受自托管成本的团队;只是想给 chatbot 加个"记住用户"的轻量需求,用它有点重。