数据存储真相 · 隐私边界

你的资料
到底存到哪去了?

书架上放的是书还是书目卡片?OpenViking 跟传统搜索索引根本就不是一回事。

是的——全部内容都会完整复制到 Server 机器上,不是"只存索引"。

OpenViking 是数据库不是搜索引擎。它需要把原始内容存在自己这边才能切片、生成摘要、做向量化、按需返回 L2 全文。没有 Server 本地存储,整套机制就跑不起来

01先纠正一个常见误解

很多人把 OpenViking 想成搜索引擎那种"只存索引"——这是错的。

✗ 错误想象

像 Google 那样的索引

Google 不存网页本身,只记录"这个关键词出现在哪个 URL"。你点搜索结果时是去原网站取内容。

如果 OpenViking 是这样:那 Server 上只有一堆 viking:// 链接和向量,原始内容还在你本地——但实际不是这样工作的。
✓ 实际情况

像 Notion / 网盘那样的存储

你把文档上传到 Notion,Notion 服务器上就有了完整副本——之后所有人查询、搜索都基于这个副本。原件丢了 Notion 上还在。

OpenViking 就是这个模式:你 add_resource 一份资料,Server 那边立刻有了一份完整副本 + 一堆衍生的摘要和向量。

02数据流:从你的 Agent 到 Server 磁盘

一份资料进入 OpenViking 后,被拆成四样东西分别存起来。

▸ 当你执行 add_resource("一份 5000 字的设计文档")

Agent (本地) add_resource(原文) 5000 字 完整文档 HTTP openviking-server 接收 → 切段 → 分发到三条路径 远程机器上 直接写入磁盘 (无需 AI 处理) VLM API 生成摘要 Embedding API 向量化每一段 agfs/ L2 全文副本 原汁原味 ≈ 原文大小 workspace/ .abstract (L0) .overview (L1) ≈ 原文 5-10% vectordb/ 向量 + 原文段 让 find 能找到 ≈ 原文 110% ⚠ 调用外部 API 时,原文同时也"流过"火山引擎 ⚠ 三处持久化 = 三处都"看得到你的数据" (Server 磁盘 + 火山引擎 + 云厂商) ▸ 一份原文进来,落盘成三份独立的持久化数据,再加上一次 API 透出

03Server 磁盘上最终留下了四样东西

单份资料的"足迹",每个都是原始数据的衍生品或本身。

L2 · 原文副本

完整原始内容

~/.openviking/data/agfs/

你给的资料一字不漏地存了一份。任何人在 Server 上 cat 这个文件就能看到原文。

≈ 等于原文大小
L0 + L1 · 摘要

VLM 生成的总结

workspace/<path>/.abstract
workspace/<path>/.overview

VLM 读了原文后写的摘要,跟原文是"两份独立内容"。摘要本身也算敏感信息——它精炼了原文要点。

≈ 原文 5-10%
Vector · 向量

每段的语义指纹

~/.openviking/data/vectordb/

每段切片的 1024 维浮点向量。但要注意:vectordb 通常会把原文段落也一并存下,方便检索时返回原文,不只是向量。

≈ 原文 110%(含原段落)
Session · 会话记录

你和 Agent 的对话日志

workspace/session/...

如果 Agent 用了 session/ 路径来记录交互,那连你跟 Agent 聊天的全部内容都会落盘到 Server 上。

随会话量增长

04完善"书架"比喻

你之前问"是不是把书本身放进去"——是的。但其实更准确的比喻是:

OpenViking Server = 一个图书馆 + 一位过分尽职的图书管理员

📚
把整本书放上书架 你给一本书,他不止登记书名,而是把整本书原件放在书架上(L2)。原件不在你手里也行——他这边已经有副本了。
📝
写一张内容摘要卡贴在封面 他还会读一遍这本书,写一句话总结(L0)和一段详细介绍(L1)贴在书上,方便快速判断要不要读全文。
🗂️
把每一段都登记到中央检索卡片柜里 他把书拆成段落,每段都生成一张"语义检索卡"放进中央卡片柜(vectordb),卡片上还抄了一份这段原文方便快速取用。
📓
录下你每次借书的对话 你跟管理员的每一次互动,他都会记在日志本上(session/)——你问了什么、他回答了什么、给你看了哪本书,全都留底。

所以"viking://" 这个 URI 不是指向外部源头的链接,而是指向 Server 内部这个图书馆的"书架坐标"。你的本地 Agent 拿到 viking://docs/api/auth.md,意思是"管理员请去你那个图书馆 docs/api/ 这一格把 auth.md 取给我看"。

05这意味着什么——隐私和安全

把"全部数据复制到 Server"这件事想透了,安全意识就建立起来了。

★ 现实意义

  • 那台 OpenViking Server 能登录的任何人都能看到所有原始数据。SSH 进去 cat 就行,没有任何加密保护(除非你自己加)。
  • 数据同时也流过火山引擎的 API——做 embedding 和 VLM 摘要时,字节那边能看到全部内容。这是不可避免的第二处副本
  • 如果用云上 VPS 部署 Server,云厂商技术上能访问到磁盘内容(除非全盘加密)。
  • 本地 Agent 一旦 add_resource 把数据发送出去就无法撤回——即使后面删除,Server 磁盘上的副本要专门 delete 才会清掉,向量库里的残留更难追。
  • 你跟 Agent 的对话如果走 session/ 路径持久化,所有聊天记录都在远程——这对多用户场景尤其敏感。

06那应该把 OpenViking 放哪里?

三种部署模式,按数据敏感度选。

按"数据离自己多近"排序

最稳
自己的私有服务器 / 内网 VPC 数据全程在自己掌控的网络里。即使如此,火山引擎 API 这一跳还是要走出去(除非自托管模型)。适合企业内部多 Agent 平台
折中
公网云上的 VPS(阿里云/火山云 ECS) 数据在云厂商机房,理论上他们能看。配上磁盘加密 + IP 白名单 + 强密钥能挡掉绝大部分意外。适合个人项目或非敏感数据
慎用
第三方托管的 OpenViking 服务 假如未来有人提供 SaaS 化的 OpenViking,你的所有数据都在他们那。除非合规可控,否则别把敏感业务数据扔进去
⌘ 对你那个多 Agent 平台

这个数据模型会影响你的架构决策

你的"群聊式多 Agent 协作"场景特别值得提前想清楚一件事:所有 Agent 之间的消息、共享的上下文、协作过程产生的中间产物——全部会被 OpenViking 持久化。这既是优点(完整可追溯)也是负担(合规和存储成本)。

建议的架构边界:① 给每个"工作空间"(比如每个客户/项目)独立部署一个 OpenViking 实例,不要混租;② 在你的 Agent 平台层做一个"敏感数据过滤"——某些内容(密码、API key、个人信息)明确不进 OpenViking,只在 session 内存里活几秒就消失;③ 定期 delete 老 session,向量库会越来越胖。

把 OpenViking 当成"会留底的记忆"而不是"临时缓存"来设计,整个系统的边界就清晰了。