OpenViking 采用双层存储架构,分离内容存储和索引存储。
┌─────────────────────────────────────────┐
│ VikingFS (URI 抽象层) │
│ URI 映射 · 层级访问 · 关联管理 │
└────────────────┬────────────────────────┘
┌────────┴────────┐
│ │
┌───────▼────────┐ ┌─────▼───────────┐
│ 向量库索引 │ │ AGFS │
│ (语义搜索) │ │ (内容存储) │
└────────────────┘ └─────────────────┘
| 存储层 | 职责 | 存储内容 |
|---|---|---|
| AGFS | 内容存储 | L0/L1/L2 完整内容、多媒体文件、关联关系 |
| 向量库 | 索引存储 | URI、向量、元数据(不存文件内容) |
- 职责清晰:向量库只负责检索,AGFS 负责存储
- 内存优化:向量库不存储文件内容,节省内存
- 单一数据源:所有内容从 AGFS 读取,向量库只存引用
- 独立扩展:向量库和 AGFS 可分别扩展
VikingFS 是统一的 URI 抽象层,屏蔽底层存储细节。
viking://resources/docs/auth → /local/resources/docs/auth
viking://user/memories → /local/user/memories
viking://agent/skills → /local/agent/skills
| 方法 | 说明 |
|---|---|
read(uri) |
读取文件内容 |
write(uri, data) |
写入文件 |
mkdir(uri) |
创建目录 |
rm(uri) |
删除文件/目录(同步删除向量) |
mv(old, new) |
移动/重命名(同步更新向量 URI) |
abstract(uri) |
读取 L0 摘要 |
overview(uri) |
读取 L1 概览 |
relations(uri) |
获取关联列表 |
find(query, uri) |
语义搜索 |
VikingFS 通过 .relations.json 管理资源间的关联:
# 创建关联
viking_fs.link(
from_uri="viking://resources/docs/auth",
uris=["viking://resources/docs/security"],
reason="相关安全文档"
)
# 获取关联
relations = viking_fs.relations("viking://resources/docs/auth")AGFS 提供 POSIX 风格的文件操作,支持多种后端。
| 后端 | 说明 | 配置 |
|---|---|---|
localfs |
本地文件系统 | path |
s3fs |
S3 兼容存储 | bucket, endpoint |
memory |
内存存储(测试用) | - |
每个上下文目录遵循统一结构:
viking://resources/docs/auth/
├── .abstract.md # L0 摘要
├── .overview.md # L1 概览
├── .relations.json # 关联
└── *.md # L2 详细内容
向量库存储语义索引,支持向量搜索和标量过滤。
| 字段 | 类型 | 说明 |
|---|---|---|
id |
string | 主键 |
uri |
string | 资源 URI |
parent_uri |
string | 父目录 URI |
context_type |
string | resource/memory/skill |
is_leaf |
bool | 是否叶子节点 |
vector |
vector | 密集向量 |
sparse_vector |
sparse_vector | 稀疏向量 |
abstract |
string | L0 摘要文本 |
name |
string | 名称 |
description |
string | 描述 |
created_at |
string | 创建时间 |
active_count |
int64 | 使用次数 |
index_meta = {
"IndexType": "flat_hybrid", # 混合索引
"Distance": "cosine", # 余弦距离
"Quant": "int8", # 量化方式
}| 后端 | 说明 |
|---|---|
local |
本地持久化 |
http |
HTTP 远程服务 |
volcengine |
火山引擎 VikingDB |
VikingFS 自动维护向量库与 AGFS 的一致性。
viking_fs.rm("viking://resources/docs/auth", recursive=True)
# 自动递归删除向量库中所有 uri 以此开头的记录viking_fs.mv(
"viking://resources/docs/auth",
"viking://resources/docs/authentication"
)
# 自动更新向量库中的 uri 和 parent_uri 字段- 架构概述 - 系统整体架构
- 上下文层级 - L0/L1/L2 模型
- Viking URI - URI 规范
- 检索机制 - 检索流程详解