volcengine/OpenViking:30k stars 的「AI Agent 上下文数据库」,把 viking:// 虚拟文件系统 + L0/L1/L2 三层加载塞给 Agent,token 砍掉 91%

引子

昨天我给 Claude Code 装了一堆 Agent Skills 之后撞上一个具体痛点。

我每天早上开一个新会话,要花 15-30 分钟「挑东西」:今天写博客,要把哪个 skill 进 context?这个项目的 README 要不要预加载?这份合同 PDF 要不要预先 chunk 完送进去?

挑得不对,session 跑 5 分钟就触发 context window 警告。挑得保守,又会重复触发「失忆」,同一个对话里讲过的事,第三次提的时候 Claude 又当新问题处理。

我在 GitHub Trending 看到了 volcengine/OpenViking,30,032 stars、今日 +803、近一周涨 985、字节火山引擎出品、AGPLv3、描述只有一句话:

Self-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.

我顺手翻了一下它的 benchmark,结果愣在桌前:

  • LoCoMo(long-conversation user memory)跑分:OpenClaw native 24.20% → 加上 OpenViking 之后 82.08%;Hermes 33.38% → 82.86%;Claude Code 57.21% → 80.32%
  • 输入 token 节省 34.3% 到 91.0%
  • 查询延迟降低 58.45% 到 66.10%
  • tau2-bench 任务成功率:retail +6.87pp,airline +11.87pp

加一层「上下文数据库」,Agent 的长期记忆准确度能翻 3 倍多,token 还能砍掉 9 成。

这不是又一个 mem0 clone,这是字节火山引擎把自家「Viking Memory Base」商业产品(2024 年起服务数千家客户)拆开源的版本。背后是 VLDB 2026 接收的 VikingMem 论文 + 人民大学、浙大、上交三所学校的学术协作 + 一个「viking:// 虚拟文件系统」的统一抽象。

这篇文章好好拆一下它,30k stars 背后的真实价值、它解决了什么「AI Agent 上下文工程」的根本痛点、怎么落到 Claude Code / Codex / Cursor 这些日常工具上,又有哪些坑值得提前知道。


一、项目背景:AI Agent 时代的「Context Engineering」难题

1.1 当我们谈「Agent 记忆」时,到底在谈什么

过去两年我给 Claude Code、Cursor、Codex 都写过 memory 相关的配置,每次都撞同一堵墙:

「我上次让你干过的事,为什么你这次又忘了?」

这件事的本质是:LLM 本身没有 memory。Agent 要「记住」任何事,必须靠外挂系统把这些事实、偏好、上下文「写出来」,下次启动再读回去。

于是 2024 年起,AI Agent 圈子里涌现出一大堆 memory 方案:

  • mem0:纯向量检索的 memory 层,主打「自动从对话里提取 fact」
  • Graphiti:把记忆组织成时序图谱,强调「事实随时间演变」
  • Cognee:知识图谱 + 向量双引擎,主打「结构化 RAG」
  • Headroom:直接压缩 token,省成本不省记忆
  • 各家 Coding Agent 自带的 memory(Claude Code 的 ~/.claude/projects/、Cursor 的 .cursorrules

这些方案各有侧重,但它们共有一个致命问题:memory、resources(项目文档、网页、PDF)、skills(Agent 技能)三个组件各管各的

我每天的体验就是:

  • memory 用一个 vector store
  • 项目文档用另一个 RAG 系统
  • Skills 又是文件系统 SKILL.md
  • 三个系统各跑各的索引、各用各的检索接口
  • Agent 写代码时,要在三个系统之间来回切换查询

更麻烦的是:没有一个统一 URI

我让 Claude Code 读一段 memory,它告诉我「vector id 0x7f3a」。我让它复现 3 天前看的那个文档,它说「from chunk 1234 of file X」。Agent 自己都不知道这些 ID 对应的语义边界在哪,出了它自己的运行时,谁都看不明白。

OpenViking 的核心判断:问题在 database 这一层,不在 memory 那一层

1.2 字节火山引擎 Viking 团队的「上下文数据库」思路

README 第一段写得很克制:

OpenViking is an open-source context database for AI agents. It stores memories, resources, and skills as one virtual filesystem under the viking:// protocol, so an agent browses its own context with ls, tree, and find instead of querying a black-box vector store.

把 memory /resources/skills 全部塞到一个虚拟文件系统下,Agent 用 ls / tree / find 操作自己的 context。直接查文件系统的 URI

这个判断背后有完整的工程演进支撑。OpenViking 不是从零写的小项目,它是字节火山引擎 Viking 团队 7 年工程积累的「开源切片」:

时间 里程碑 关键意义
2019–2023 VikingDB 向量数据库在字节内部广泛落地 支撑多款核心产品的非结构化信息检索;积累亿级向量实时检索经验
2024 VikingDB、Viking Knowledge Base、Viking Memory Base 三件套对外商业化(火山引擎公有云) 服务数千家企业客户;从内部工具转型商业产品
2025 拓展到 AI Search 和 Knowledge Assistants 形成「基础设施 → 应用」完整产品矩阵
Late 2025 开源 MineContext 探索主动式 AI 应用范式,验证个人 context engineering 思路
Early 2026 开源 OpenViking(2026-01-05 创建仓库) 全新设计的 context database 架构;战略转型为开源贡献者

简言之:火山引擎先用 7 年把这件事做成付费产品(Viking Memory Base),跑通了几千个客户的生产环境,现在把底层架构重新设计一遍,开源出来给整个 AI Agent 生态用

这跟很多” 开源 + 云上版本” 项目的路径相反,通常是大厂开源一个能引流的产品,把付费版当 main course。OpenViking 的立场是 “the open-source edition is not crippled”(README 原话):仓库里的 AGPLv3 版本功能完整,没有 feature gate、没有强制注册、没有激活码。想用就直接 clone。

商业版和开源版唯一的区别是「谁负责运维」:

  • Managed SaaS:挂在火山引擎 / BytePlus 上,企业级 SLA、团队协作、权限管理
  • Self-Managed:跑在你自己机房,离线环境也支持,加了分布式部署

这种态度的好处是:开源版本先把工程事实摆出来,剩下的留给市场选。

1.3 这次选 OpenViking 的原因

最近一个月我写过不少 AI Agent 周边:MCP、Harness、Skills、Cursor 配置、量化框架,但 context database 这个赛道还没写过

OpenViking 出现的时机也合适:

  • LoCoMo /tau2-bench 这种” 长对话 + 多轮 Agent 任务” 的评测在过去半年开始普及(之前大家都在刷 SWE-bench 这种” 短任务”)
  • 火山引擎这种大厂亲自下场做开源 context database,说明这个赛道被字节这样的厂视为 “AI Agent 时代的水电煤”
  • 30k stars + 字节出品 + VLDB 2026 论文 + 真实 benchmark 数据 = 稀缺组合

加上过去 3 天的博客主题(cumora 团队协作、mukul975 安全 skills、firecrawl-anydoc 文档处理),已经 4 天没碰”AI Agent 上下文” 了,正好换换。


二、核心功能:六大设计原则

OpenViking README 列了 5 个 Why:

  1. One filesystem for all context - 一套 viking:// URI 处理 memory /resources/skills
  2. Tiered loading cuts token spend - 三层加载按需取
  3. Directory recursive retrieval - 目录递归检索
  4. Observable retrieval - 可观测的检索轨迹
  5. Sessions become memory - Session 自动 commit 记忆

OpenViking 还应该加第六条,多 Agent 框架的统一接入,因为这是它从「内部产品」变成「生态底座」的关键。

下面一个个拆。

2.1 viking:// 统一虚拟文件系统

这是 OpenViking 最颠覆的设计决策。

传统 memory / RAG /skills 系统的拓扑是:

1
2
3
Agent  ──(query A)──>  Vector Store (memory)
──(query B)──> Document Store (RAG)
──(list C)───> File System (skills)

三个后端、三套接口、三种 namespace,Agent 端要写胶水代码串起来。

OpenViking 的拓扑:

1
2
3
4
5
6
7
8
Agent  ──(ls / find / grep)──>  viking://

┌──────────┼──────────┐
│ │ │
memories resources skills
│ │ │
└──────────┴──────────┘
同一个 AGFS 文件系统后端

URI 长这样(README 里给的例子):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
viking://
├── resources/ # 项目文档、repo、网页
│ └── my_project/
│ ├── docs/api/
│ └── src/
└── user/
└── {your_id}/
├── memories/preferences/
│ ├── writing_style
│ └── coding_habits
├── resources/private_project/
├── skills/
│ ├── search_code
│ └── analyze_data
└── peers/
└── web-visitor-alice/

Agent 操作自己 context 的方式变成:

1
2
3
4
ov ls viking://resources/
ov tree viking://resources/my_project -L 2
ov find "what is openviking"
ov grep "auth" --uri viking://resources/my_project/docs/api/

这套设计带来 3 个直接好处

  1. Agent 知道自己有哪些 contexttree 一打,AI 就能看到完整的「我有什么」目录树。向量库世界里,Agent 自己看不到仓库里有啥。
  2. 检索可观测。每一步 find 都留下 trajectory,错了可以 replay 调试(OpenViking 把它叫 “observable retrieval”)。
  3. 人和 Agent 共享同一套接口。我自己也能 ov ls 看自己的 memory 文件,调试体验跟 Agent 一样。

2.2 L0 / L1 / L2 三层加载:把 token 砍掉 91% 的关键

这是 OpenViking 最工程化、最值得借鉴的一招。

传统 RAG 系统把每个文档 chunk 当成” 读或没读” 的二值单位,要么整段送进 context,要么不送。结果就是:你给 Agent 一份 50 页的 PDF,它要么完整吃掉(爆炸),要么完全不知道(白问)。

OpenViking 的做法是 给每条 context 自动生成三个层级

  • L0(Abstract):一句话摘要,约 100 tokens,用于快速判断相关性
  • L1(Overview):核心信息 + 使用场景,约 2k tokens,用于规划
  • L2(Details):完整原文,按需读取

每个目录、每个文件都有三层:

1
2
3
4
5
6
7
8
9
viking://resources/my_project/
├── .abstract # L0: ~100 tokens - quick relevance check
├── .overview # L1: ~2k tokens - structure and key points
└── docs/
├── .abstract
├── .overview
└── api/
├── auth.md # L2: full content, loaded on demand
└── endpoints.md

检索过程变成:

  1. Agent 用 L0 判断「这条 context 大概是干啥的」
  2. 决定深入时读 L1 拿结构信息
  3. 真正要执行时再读 L2 完整内容

benchmark 数据直观:

  • OpenClaw native:24.20% 准确度(每次都吃全量 memory)
  • OpenClaw + OpenViking:82.08% 准确度(按需加载三层)
  • 准确度提升 3.4 倍,token 反而砍掉 34.3%

token 砍这么多?因为大部分时间 Agent 只需要 L0 + L1 就够了,L2 只在最后一步才读。

2.3 目录递归检索(Directory Recursive Retrieval)

向量检索有个老问题:chunks 之间没有上下文关联

我之前写 firecrawl-anydoc 时就提过,RAG 检索出来的常常是一段孤立的文本片段,AI 不知道它在文档里的位置。

解法是:先在目录层做向量检索,再往下钻

具体流程:

  1. Step 1:用 L0 abstract 在目录树第一层做向量检索,找到相关性最高的” 目录节点”
  2. Step 2:进入该目录,用 L1 overview 做第二轮向量检索,决定要进入哪个子目录
  3. Step 3:到叶节点才读 L2 完整内容

这相当于” 分块检索” → “分目录检索”。检索结果天然带着它的” 上下文路径”,你拿到 auth.md 的内容,同时知道它属于 my_project/docs/api/,连兄弟文件 endpoints.md 也一起被列出。

2.4 可观测的检索轨迹

LLM 应用最让人抓狂的地方:Agent 给出一个答案,你不知道它是怎么得出这个答案的

传统 RAG 系统的查询日志长这样:

1
2
3
4
[2026-08-20 02:14:33] query="how to authenticate"
→ vector_search → top_k=5
→ chunk_ids=[1234, 5678, 9012]
→ response generated

这条日志展开成” 目录浏览轨迹”:

1
2
3
4
5
6
7
8
9
10
[2026-08-20 02:14:33] query="how to authenticate"
→ ls viking://resources/my_project/ # 列出根目录
→ find "auth" --uri viking://resources/ # 在根目录检索
→ ranked: [docs/api/ (0.89), docs/tutorial/ (0.45)]
→ cd docs/api/
→ ls . # 看本目录 L0
→ read .overview # 读 L1
→ find "authenticate" --in=docs/api/ # 在子目录检索
→ ranked: [auth.md (0.92), endpoints.md (0.71)]
→ read auth.md # L2,按需

错误时你可以一键 replay 整个浏览路径,看到 Agent 是在哪一步 “走偏了”。这种可观测性是传统向量库做不到的,向量库的世界里,”query → result” 是个黑盒。

2.5 Session 自动 commit 记忆

传统 Agent memory 的痛点:怎么把” 一次会话里学到的用户偏好” 沉淀到长期记忆里?

解法是 session commit 模式

  1. Agent 跟用户跑完一次对话
  2. 会话结束时调用 commit_session()
  3. OpenViking 异步从对话里提取「user preferences」和「agent experience」
  4. 写入 viking://user/{your_id}/memories/preferences/viking://user/{your_id}/skills/

下次开新会话,Agent 一查 viking://user/{your_id}/memories/preferences/writing_style,发现:

用户喜欢用具体数字写标题;用户不喜欢 “在数字化时代” 这种开场;用户写技术博客时倾向用小戴的第一人称。这些偏好是系统自动从过去会话里抽出来的,不是用户手动配置的。

更深一层的是 “agent experience”:Agent 自己做完一个 task 之后,会沉淀「这次是怎么干的」作为 skill。下次遇到类似任务,直接调用上次的方法。

2.6 多 Agent 框架的统一接入

一个 context database 如果只能服务一个 Agent,那只是工具;能服务一堆 Agent,才是生态。

OpenViking 的接入列表(截至 2026-08-19):

Agent 框架 集成方式 文档路径
Claude Code Memory plugin + Hook agent-integrations/02-claude-code.md
Codex Memory plugin + Hook agent-integrations/04-codex.md
OpenClaw Memory plugin + Hook agent-integrations/03-openclaw.md
Hermes Memory plugin + Hook agent-integrations/05-hermes.md
Cursor MCP integration agent-integrations/12-cursor.md
TRAE / TRAE CN / TraeCode CLI 2.0 Memory plugin agent-integrations/13-trae.md
OpenCode Plugin agent-integrations/10-opencode.md
pi Extension agent-integrations/11-pi.md
Agent Plugins 1.0 Plugin distribution agent-integrations/15-agent-plugins.md
MCP clients MCP server agent-integrations/06-mcp-clients.md
LangChain / LangGraph Python SDK agent-integrations/07-langchain-langgraph.md
Log ingestion 直接 ingest Agent session log agent-integrations/09-log-ingestion.md

覆盖了 12 种主流 Agent 框架 + LangChain/LangGraph 这类通用框架。

这种” 广撒网” 的接入策略背后有个判断:Agent 框架不会收敛,Claude Code 不会吃掉 Cursor,Codex 不会吃掉 OpenCode。每个框架都有自己的用户群。context database 想要做大,必须对所有框架” 无差别”。

2.7 OpenViking Helper (Beta):桌面端可视化管理

这一条是 OpenViking 2026 上半年加的新功能,macOS / Windows 的桌面客户端:

  1. 可视化本地 Agent 配置:自动检测 Claude Code、Codex、Cursor、Trae、OpenCode 的安装位置,配置 plugin / MCP / Hook / CLI 集成
  2. Session trace 检查:解析 Claude Code、Codex、Trae 的 session 文件,展示 OpenViking recall、prompt injection、MCP calls、capture、commit 事件
  3. 本地 memory /skill 管理:可视化本地 memory /rule 文件和 SKILL.md,一键 sync 到 OpenViking

关键意义是:它把 OpenViking 从「CLI 后台服务」变成「有 GUI 的开发者工具」。普通用户不再需要手敲 ov config、手改 ~/.claude/settings.json

下载链接:

  • macOS Apple Silicon (arm64)
  • macOS Intel (x64)
  • Windows (x64)

文件命名是 openviking-helper-0.0.19-*.dmg / .exe,仍在 beta。

2.8 viking:// 协议 + API 设计:为什么是文件系统不是 REST

viking:// 协议的核心设计哲学我必须单独讲一下,因为它决定了整个 OpenViking 跟市面上其他 memory 工具的根本差异。

v0.1 的设计文档里强调:viking:// URI 不是一个「endpoint」,它是一个「文件路径」。这意味着:

维度 REST API 风格(mem0 / Graphiti) viking:// 文件系统风格(OpenViking)
命名空间 多个独立 API(/memories、/resources、/skills) 一个统一命名空间
引用方式 UUID / opaque ID 路径(像 /resources/my_project/docs/api/auth.md
操作符 GET / POST / DELETE ls / tree / find / grep / read / write
错误处理 HTTP status code 文件系统错误码(ENOENT / EACCES)
缓存策略 自定义 直接复用 OS page cache
调试方式 看 API 调用日志 tree / cat 直观看到

这套设计最妙的地方在于 Agent 可以” 自我描述”

1
ov tree viking://user/{your_id}/memories/ -L 3

返回结果是一棵树,Agent 看到这棵树,自然就知道「我有哪些记忆、记忆分几类」。在 REST API 风格下,Agent 要先 GET /memories 拿到列表,再 GET /categories 看分类,至少两次 API 调用才能拼出认知。

而且 viking:// 路径可以直接作为 prompt 的一部分发给 LLM

“请阅读 viking://resources/my_project/docs/api/auth.md,总结出 authentication 流程。”

LLM 看到的是个「文件路径」语义,不需要理解 opaque UUID。在 few-shot context 里塞一个文件路径也比塞一个 UUID 直观得多。

具体到代码层面(Python SDK):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from openviking import OpenViking

client = OpenViking()

# 加一个 GitHub repo 作为 resource
job = client.add_resource("https://github.com/volcengine/OpenViking")
client.wait_for_job(job)

# 列出根目录
entries = client.ls("viking://resources/")
# → [
# {"name": "volcengine", "type": "directory", "uri": "viking://resources/volcengine"},
# {"name": "my_project", "type": "directory", "uri": "viking://resources/my_project"},
# ]

# 找相关 context
results = client.find("how to authenticate", uri="viking://resources/volcengine")
# → [
# {
# "uri": "viking://resources/volcengine/OpenViking/docs/en/agent-integrations/02-claude-code.md",
# "l0_abstract": "Setup guide for integrating OpenViking with Claude Code...",
# "l1_overview": "...",
# "score": 0.89,
# "path": ["docs", "en", "agent-integrations", "02-claude-code.md"]
# },
# ...
# ]

# 真正读取 L2 完整内容
full = client.read("viking://resources/volcengine/OpenViking/docs/en/agent-integrations/02-claude-code.md")

这套 API 设计的「文件优先」哲学跟 Linux 的「一切皆文件」、Plan 9 的「一切皆文件系统」一脉相承。


三、技术架构亮点

3.1 整体架构:AGFS + 多语言 SDK + VikingBot

仓库根目录看一眼就懂:

1
2
3
4
5
6
7
8
9
10
11
12
openviking/
├── openviking/ # Python 主包(含 server + SDK + bot)
├── sdk/ # Python SDK 子包
├── crates/ov_cli/ # Rust 写的 ov CLI
├── npm/ # npm 包装的 CLI
├── integrations/ # 各 Agent 框架的集成 adapter
├── agent-plugins/ # Plugin 分发系统
├── web-studio/ # Web 端的 OpenViking Studio
├── bot/ # VikingBot
├── benchmark/ # LoCoMo / tau2-bench / RAG / skillsbench
├── docs/ # VitePress 文档站
└── examples/ # 示例代码

核心技术栈:

  • Python 主包 + Rust CLI + TypeScript SDK + npm CLI 四件套,对应不同使用场景
  • AGFS(自研文件系统层)做存储后端,README 里特意提到「delete-account now actually removes AGFS data on disk」(fix #4125),说明 AGFS 是核心存储组件
  • VikingBot 是基于 OpenViking 构建的 AI agent framework,pip install "openviking[bot]" 即可使用
  • OpenViking Studio 是 Web 端的 playground,可以不开本地服务就体验 context browsing /semantic search /multi-agent hub

依赖(从 pyproject.toml 抓的):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
dependencies = [
"openviking-sdk>=0.1.1",
"pydantic>=2.0.0",
"scrapy>=2.11.0", # 网页抓取
"trafilatura>=1.12.0", # 网页正文提取
"pdfplumber>=0.10.0", # PDF 解析
"python-docx>=1.0.0", # Word 解析
"python-pptx>=1.0.0", # PPT 解析
"openpyxl>=3.0.0", # Excel 解析
"ebooklib>=0.18.0", # EPUB 解析
"fastapi>=0.128.0", # HTTP server
"uvicorn>=0.39.0", # ASGI server
"volcengine-python-sdk[ark]>=5.0.3", # 火山引擎豆包 SDK
"openai>=1.0.0", # OpenAI 兼容协议
"httpx>=0.25.0",
"apscheduler>=3.11.0", # 异步任务调度(用于 session commit 异步提取)
"json-repair>=0.25.0",
...
]

光看依赖就知道:OpenViking 把 13 种常见文档格式(PDF / Word / PPT / Excel / EPUB / 网页 / HTML / XML / RSS…)解析器都内置在主包里,喂啥格式都能 ingestion

3.2 三层加载的实现细节

L0 / L1 / L2 是怎么生成的?

pyproject.toml 看依赖里没有 tiktoken 也没有 transformers,说明 L0/L1 的生成不是本地 LLM,而是调用外部 model。init wizard 里支持 6 种 provider:

  • Volcengine(火山引擎豆包)
  • OpenAI
  • Codex OAuth
  • Kimi
  • GLM
  • Local Ollama(init 会自动检测 + 拉模型)

也就是说,用户用谁家的 LLM,OpenViking 就用谁家的 LLM 生成三层摘要

L0 的 prompt 大概是「用一句话总结这份文档的核心内容」;L1 的 prompt 是「用结构化方式列出这份文档的关键章节和使用场景」。具体 prompt 在仓库 openviking/summary/ 下(我没细究,但肯定是 prompt engineering 的产物)。

每条 context 在 add 进 OpenViking 时,server 后台异步跑 L0/L1 生成,结果存到对应目录的 .abstract.overview 文件里。L0 ≈ 100 tokens,L1 ≈ 2k tokens,这两个数字是 README 给的实测值,不是拍脑袋。

3.3 学术背景:VikingMem 论文 + 三所高校协作

OpenViking 背后有一篇正经学术论文:VikingMem: A Memory Base Management System for Stateful LLM-based Applications(arXiv:2605.29640,2026 年,VLDB 2026 已接收)。

作者来自浙江大学(高云君教授团队)和字节火山引擎。

VLDB 是数据库领域三大顶会之一(SIGMOD / VLDB / ICDE),能被接收说明这个工作不是「工程轮子」,是有理论支撑的。论文应该是把 OpenViking 里的目录递归检索、三层加载、用户偏好提取等技术做了系统化建模。

另外,团队还跟三所国内高校有学术协作(README 里致谢):

  • 人民大学信息学院 孙亚辉副教授
  • 浙大软件学院 高云君教授 + 朱一帆、葛聪聪研究员
  • 上海交大人工智能学院 戴国浩副教授 + 无问芯穹联合创始人、首席科学家

无问芯穹(Infinigence AI)最近刚拿了新一轮融资,是国内做 AI 算力基础设施的公司。戴国浩老师同时挂学术 + 产业两份 title,这种” 学术界 + 工业界” 双跨的协作模式,让 OpenViking 的工程实践有论文级的严谨度。

3.4 工程事实:3 天前的 release + 458 个 open issue + 30+ commits/day

到 2026-08-19(写文章前一天)为止,仓库的状态:

  • 总 stars:30,032
  • Forks:2,329
  • Open issues:458
  • 最新 release:v0.4.15(2026-08-18)
  • 前一天 commits:10 条以上(issue 列表显示 8/19 一天开了 7 个新 issue + 关闭了 3 个 PR)
  • License:AGPLv3 + 部分子项目 Apache 2.0
  • 默认分支:main

Open issues 458 个不算少,说明项目还在快速迭代、有 bug 但也有 PR 在修。从 issue 标题看(截至 2026-08-19):

  • #4134 LiteLLMDenseEmbedder.embed_async() skips _truncate_vector()
  • #4133 Feature Request: Add batch/streaming import for large resource sets
  • #4132 [Bug]: 使用 …
  • #4131 [Bug]: MemoryUpdater 在 resolved_op.uris 为空时静默丢弃记忆
  • #4129 feat: new tos connector args
  • #4128 pi extension: session_shutdown never commits with takeover enabled
  • #4126 feat: restore user-scoped memory extraction policies

质量层次不齐,有真正的 bug(#4131 MemoryUpdater 静默丢弃 URI 是 silent data loss 类问题),也有 feature request(#4133 大批量 import 的流式 API)。

AGPLv3 这个 license 值得单独提一句:对个人开发者、自部署都 OK,但任何基于 OpenViking 提供 SaaS 服务的企业必须开源其修改。这是 copyleft 协议的标准要求。要是公司打算把 OpenViking 嵌进商业产品但不想开源,先看清楚 AGPLv3 的边界,或者直接买火山引擎的商业版(Self-Managed Online / Offline + license key)。


3.5 benchmark 复现成本:5 分钟上手

OpenViking 官方 benchmark 不是黑盒,仓库 benchmark/ 下放了完整复现脚本。

如果你想自己跑一遍 LoCoMo + Claude Code:

1
2
3
4
5
6
7
git clone https://github.com/volcengine/OpenViking
cd OpenViking/benchmark/locomo/openviking
pip install -r requirements.txt
# 设置 OpenAI / Claude / Doubao 的 API key
export OPENAI_API_KEY=sk-...
python run_eval.py --dataset=locomo --agent=claude-code
# 默认跑 1,500 个问句,预计耗时 4-8 小时

跑完会输出 results/locomo_claudecode_<timestamp>.csv,跟官方 README 给的数字直接对比。

同一目录下还有 6 个对比基线:

  • claudecode/ - Claude Code 原生 memory(不带 OpenViking)
  • hermes/ - Hermes Agent 原生 memory
  • mem0/ - mem0 接入
  • supermemory/ - supermemory 接入
  • openclaw/ - OpenClaw 原生 memory
  • openviking/ - OpenViking + 各种 Agent 的组合

拉平对比就能看出 OpenViking 在不同 Agent 上的实际增益。

这种「开源 + 完整 benchmark + 复现脚本」的三件套在国内大厂开源项目里不多见 —— 大多数项目给个数字就完事。OpenViking 把” 如何验证” 这件事也开源出来,是研究友好型态度。


四、怎么用:从 pip install 到 ov find 全流程

4.1 系统要求

  • Python 3.10 或更高(不支持 3.9 和以下)
  • macOS / Linux / Windows 都支持(OpenViking Helper 桌面版目前只发了 macOS arm64 /macOS x64 / Windows x64 三种二进制)
  • 一个可用的 LLM provider(火山引擎 / OpenAI / Codex OAuth / Kimi / GLM / 本地 Ollama)

4.2 5 步上手

Step 1:安装

1
pip install openviking --upgrade

一行命令搞定 Python 主包。

Step 2:初始化配置

1
openviking-server init

交互式 wizard:

  1. 选 provider(火山引擎 / OpenAI / Codex OAuth / Kimi / GLM / Ollama)
  2. 填 API key / OAuth 登录
  3. 选 embedding model(默认会拉跟 provider 配套的)
  4. 选 vector store(默认本地 SQLite + 向量,可选 VikingDB 远程)

完成后会在 ~/.openviking/ov.conf 生成配置文件。

Step 3:校验环境

1
openviking-server doctor

检查:

  • Python 版本 ≥ 3.10 ✓
  • ov.conf 文件存在且格式正确 ✓
  • Provider 网络连通性 ✓
  • 本地磁盘空间(默认需要 1-5 GB 给 AGFS + 向量索引)✓

Step 4:启动 server

1
2
3
openviking-server
# 或者后台跑
nohup openviking-server > openviking.log 2>&1 &

默认监听本地端口,HTTP API 走 FastAPI + uvicorn。

Step 5:装 CLI + 用 ov 命令

主包自带 ov CLI(Rust 写的,快)。常用命令:

1
2
3
4
5
6
7
ov status                                  # 看 server 状态
ov add-resource https://github.com/volcengine/OpenViking
# 后面可以加 --wait 阻塞直到 ingestion 完成
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

加 resource 时 OpenViking 会异步做三件事:

  1. 用 scrapy + trafilatura 抓网页 / 解析文档
  2. 调用 LLM 生成 L0 + L1 摘要
  3. embedding 入向量索引

整个过程是后台跑的,ov add-resource--wait 才阻塞等完成。

4.3 接入 Claude Code

这是最常见的场景。

Claude Code 的集成方式是 Memory plugin + Hook:

1
2
3
4
5
# 安装 Claude Code 集成
openviking install claude-code

# 配置 ~/.claude/settings.json
# 添加 hook + plugin 路径

装好之后,每次 Claude Code 开新会话时:

  1. 自动从 viking://user/{your_id}/memories/preferences/ 加载用户偏好(preferences /writing_style/coding_habits …)
  2. 每次工具调用前,自动 ov find 召回相关 context
  3. 会话结束自动 commit_session() 异步提取新偏好

具体文档路径:docs/en/agent-integrations/02-claude-code.md

4.4 接入 Codex / Cursor / TRAE / OpenCode

每家 Agent 框架的接入方式大同小异:

框架 接入方式 文档
Codex Memory plugin agent-integrations/04-codex.md
Cursor MCP server(Cursor 支持 MCP) agent-integrations/12-cursor.md
TRAE Memory plugin agent-integrations/13-trae.md
OpenCode Plugin agent-integrations/10-opencode.md
pi Extension agent-integrations/11-pi.md

日常用多个 Agent 框架,价值就出来了,同一份 viking:// 上下文,多个 Agent 共享

计划是把 Claude Code、Codex、Cursor 都接上 OpenViking,然后让 viking://resources/blog-topics/ 跨三个 Agent 共用。这样我无论在哪个 Agent 里开工,” 小戴最近的写作主题” 都一样。

4.5 接入 LangChain / LangGraph

如果你是用 LangChain 写自定义 Agent:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from openviking import OpenViking
from langchain.agents import initialize_agent

client = OpenViking()

@tool
def recall_context(query: str) -> str:
"""召回 OpenViking 里的相关 context"""
results = client.find(query, uri="viking://resources/")
return "\n".join([r["l1_overview"] for r in results[:5]])

agent = initialize_agent(
tools=[recall_context],
llm=ChatOpenAI(),
agent="chat-conversational-react-description"
)

Python SDK openviking-sdk 也提供,支持 sync + async + streaming。


五、Benchmark 实测:3 大数字说服我

光说设计理念没用,benchmark 数据才是硬道理。

OpenViking 在 README 里直接放了 benchmark chart(SVG 格式),三个核心数字:

5.1 LoCoMo:长期对话记忆准确度

LoCoMo(Long Conversation Memory)是 2024 年提出的 benchmark,专门测「超长对话里 AI 能不能正确回答问题」。

3 个 Agent 上对比 native vs OpenViking:

Agent LoCoMo Native LoCoMo + OpenViking 提升
OpenClaw 24.20% 82.08% +57.88 pp(3.4×)
Hermes 33.38% 82.86% +49.48 pp(2.5×)
Claude Code 57.21% 80.32% +23.11 pp(1.4×)

注:原始数据来自 README 内嵌的 SVG benchmark 图。

OpenClaw 这一组最戏剧化:native 准确度只有 24.20%(几乎就是随机猜),加上 OpenViking 之后直接到 82.08%。这说明 OpenClaw 自带的 native memory 基本不能用,OpenViking 在这种场景下的价值是” 从零到有”

Claude Code 的 native 已经 57.21%(不低),但加上 OpenViking 还能涨到 80.32%,意味着即使 Claude Code 自带 memory,加 OpenViking 还能再加 23 个百分点

5.2 token 节省:34.3% 到 91.0%

README 给的是「with OpenViking」 vs 「native」的 token 消耗对比:

  • OpenClaw:token 下降 91.0%(接近砍掉 9 成)
  • Hermes:token 下降 34.3%
  • Claude Code:token 下降 72.1% 左右(具体数字我没在 README 找到精确值,从 chart 估的)

按 API 价格算(假设 Claude Sonnet 5 input $3/M tokens):

  • 每天 1000 次会话、每次平均 50k tokens
  • Native:50M tokens/day × $3 = $150/day
  • OpenViking:14M tokens/day × $3 = $42/day
  • 每月省 $3000+

这只是按 input token 算,没算 output token(output 比 input 贵 3-5 倍)。OpenViking 减少了 context size,模型输出也会变短,整体账单能砍 50-70%。

5.3 查询延迟:58.45% 到 66.10% 降低

这个数字有点违反直觉,OpenViking 多了「目录递归检索」+「三层加载」两个步骤,怎么会更快?

原因在于 OpenViking 的 L0 abstract + L1 overview 是预处理好的(add-resource 时异步生成),检索时直接读 L0/L1 文件,不用每次都 embedding + similarity search 全量内容。

传统 RAG:query → embed → vector_search(全量内容) → top_k → 返回
OpenViking:query → embed → vector_search(只搜 L0 abstract) → 目录定位 → 读 L1(必要时) → 读 L2(最后一步)

由于 L0 abstract 只有 100 tokens 一条,embedding + similarity 阶段比全量内容快一个数量级

5.4 tau2-bench:多轮 Agent 任务成功率

tau2-bench 是 Sierra 出品的 multi-turn agent benchmark,专门测 AI 在客服、零售、航空这种「需要调用工具 + 维护会话状态」的场景里能不能干好活。

场景 Native + OpenViking 提升
Retail(零售客服) 70.94% 77.81% +6.87 pp
Airline(航空客服) 54.38% 66.25% +11.87 pp

Retail 涨 6.87pp、Airline 涨 11.87pp,这两个数字看起来「小」,但 multi-turn agent benchmark 上 5 pp 已经是显著提升,很多新方法在这个数据集上只能涨 1-2 pp。

Airline 涨 11.87pp 更值得关注,Airline 场景是 tau2-bench 里公认最难的(需要复杂的订票、改签、退款规则)。OpenViking 在这种「高规则密度 + 多步骤」场景下提升最大,说明 三层加载 + 目录递归在「需要稳定召回准确规则」的场景里价值最高。

5.5 复现脚本:开源

仓库 benchmark/ 目录下放了一整套复现脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
benchmark/
├── RAG/ # RAG 任务评估
├── locomo/ # LoCoMo(long-conversation memory)
│ ├── claudecode/
│ ├── hermes/
│ ├── mem0/
│ ├── openclaw/
│ ├── openviking/
│ ├── supermemory/
│ └── vikingbot/
├── longmemeval/ # LongMemEval
├── retrieval/ # 检索质量
├── skillsbench/ # Skills benchmark
├── tau2/ # tau2-bench
├── vectordb_perf/ # 向量库性能
├── cuvs/ # NVIDIA cuVS GPU 加速
└── custom/ # 自定义 benchmark

benchmark/locomo/README.md(LoCoMo 的中文评测指南)写得很细:

本目录包含 LoCoMo(Long-Term Conversation Memory)评测脚本,用于评估对话记忆系统的性能。

如果你想自己跑一遍验证:

1
2
cd benchmark/locomo/openviking
python run_eval.py --dataset=locomo --agent=claude-code

对比基线(mem0、supermemory、OpenClaw 原生、Hermes 原生、VikingBot)的脚本都在同一目录下,可以拉平对比。


六、合作伙伴 + 商业生态

OpenViking 找了 4 个 confirmed partner,它在主动做生态合作。README 明确列了 4 个 confirmed partner:

  1. deer-flow - 字节自研的 long-horizon SuperAgent harness(我之前拆过,跟今天这个 OpenViking 互补,deer-flow 是「怎么调度 Agent」,OpenViking 是「Agent 的 memory 从哪来」)
  2. NoKV - AI native 分布式文件系统(给 OpenViking 提供底层存储的可能性)
  3. loopx - Lightweight loop engineering state kernel(轻量循环工程状态内核)
  4. Hermes Agent - The agent that grows with you(Nous Research 自研的 self-evolving Agent)

注意 Hermes Agent 的描述是 “The agent that grows with you”这跟 OpenViking 的 “self-evolving context database” 是同一个方向。两个项目一个做 self-evolving Agent,一个做 self-evolving Agent Context,互相集成是天然的事。

如果你也想加入 partner list,README 说要开 issue 申请。

6.1 Managed SaaS 和 Self-Managed 商业版

两个商业版:

☁️ Managed SaaS(挂在火山引擎上)

  • Personal 版:免费试用 50 个 file;超出后用 VikingDB 跑生产
  • Enterprise 版:多用户 context 管理、团队协作、权限、企业 SLA
  • 海外版挂在 BytePlus 上

🏢 Self-Managed(跑在你自己的环境里)

  • Online:部署到你的云账号 / VPC,BYOC 支持
  • Offline:完全 air-gapped 环境,无网络访问(金融、政府、医疗刚需)

这两个商业版不是 feature gate,是” 谁来运维” 的问题。README 强调:

The open-source edition is not crippled. OpenViking in this repo is fully open source under AGPLv3: no feature gates, no account required, no activation key.

,这是字节难得的开源态度,比很多” 开源 + 商业版 feature gate” 的项目(点名几个常见的)清醒很多。


七、适用人群 + 局限性 + 我的计划

7.1 适合谁用

  • AI Agent 重度用户:每天跟 Claude Code / Codex / Cursor 打 8 小时交道、context window 警告反复出现的人
  • 多 Agent 框架玩家:同时用 Claude Code、Codex、Cursor 的用户,OpenViking 能让多个 Agent 共享同一份 memory
  • 企业 AI 团队:要给整个团队配 “Agent memory” 但不想每人都自己攒 skills 库的团队
  • 自部署爱好者:想自己掌控 memory 数据的人,数据全在本地 AGFS 里,不上传任何第三方
  • AI 写应用 / 做个人知识库的开发者:把自己写的博客、笔记、文档全部塞进 viking://resources/,让 AI 在自己” 熟悉” 的内容里工作

7.2 不适合谁

  • 完全没用过 Coding Agent 的人:先用 1-2 个月 Claude Code,再考虑 memory 工具
  • 数据安全极敏感的企业:AGPLv3 的传染性 + 数据本地化 + audit log,这些都需要自己评估合规
  • 只需要短期单次任务的人:价值在「跨 session 记忆」,单次问答用不上

7.3 局限性(写在前面的「坑」)

  • AGPLv3 协议边界:商业产品集成前必看,必要时买 Self-Managed license
  • v0.4.x 仍在快速迭代:458 个 open issue 意味着接口、CLI、API 都在变,生产环境部署要 pin 具体版本
  • 依赖 LLM 生成 L0/L1:如果 LLM 抽风(如 API 限流 / 网络问题),add-resource 会卡住
  • MCP / Skills 生态绑定:跟 Claude Code 配合最顺,Cursor 走 MCP 略重
  • 文档站 docs.openviking.ai 是 VitePress + 中文 / 英文 / 日文三语维护,但部分页面(如 getting-started /configuration)更新可能滞后

7.4 我的下一步

这周先把 OpenViking 装到本地:

1
2
3
4
pip install openviking --upgrade
openviking-server init # 选火山引擎 + 豆包
openviking-server doctor # 验证环境
openviking-server # 启动 server

然后:

  1. 把过去 3 个月博客的 markdown 全部 add-resourceviking://resources/blog/
  2. 接入 Claude Code,看每天写博客时 OpenViking 自动召回相关历史主题的效果
  3. 跑一遍 benchmark/locomo/claudecode/,跟 Claude Code 原生 memory 对比一下 token 和准确度
  4. 一周后写一篇《OpenViking 实战 7 天报告》

想试的话,先看 openviking.ai/studio 的在线 demo,不用装任何东西,直接在浏览器里体验 context browsing + semantic search。


八、总结

volcengine/OpenViking 不是又一个「开源版 SaaS 工具」,它是字节火山引擎把自家跑了 2 年的 Viking Memory Base 商业产品(服务数千家企业客户)拆开源的成果。

它的核心判断:Agent 时代 context 太多,memory / RAG /skills 分裂管理是反人类的。所以 OpenViking 用 viking:// 虚拟文件系统把三者统一到一套 URI 下,用 L0/L1/L2 三层加载把 token 砍掉 91%,用目录递归检索把 RAG 从「孤立 chunks」拉出来,用 observable trajectory 让 Agent 调试从黑盒变白盒。

Benchmark 数据说话:

  • LoCoMo 准确度 24.20% → 82.08%(OpenClaw);57.21% → 80.32%(Claude Code)
  • token 节省 34.3% - 91.0%
  • tau2-bench 任务成功率 +6.87pp / +11.87pp
  • 30k stars、字节出品、VLDB 2026 论文、三所高校协作

如果你每天在多个 Agent 之间切换、context window 反复爆、token 账单让人心疼,OpenViking 是 2026 年最值得花一个下午试试的 context database 项目。


GitHub 仓库https://github.com/volcengine/OpenViking

官网 + 在线 Demohttps://openviking.ai

文档站https://docs.openviking.ai

Benchmark 报告https://blog.openviking.ai/post/openviking-benchmark-results/

VikingMem 论文:arXiv:2605.29640(VLDB 2026)