← 返回首页
📁

OpenViking

Open-source Context Database for AI Agents

25k
⭐ GitHub Stars
Volcengine
字节跳动出品
Python
AGPL-3.0

📌 什么是 OpenViking

OpenViking 是面向 AI Agent 的开源上下文数据库,采用 文件系统范式(Filesystem Paradigm) 统一管理 Agent 的三大核心上下文:记忆(Memories)、资源(Resources)和技能(Skills)。

核心思路:用 viking:// 协议将 Agent 的所有上下文组织成一个虚拟文件系统,Agent 可以像操作本地文件一样浏览、检索和加载上下文。

核心理念: Agent 的上下文管理不应该是一堆散落的向量检索 API —— 而应该是一个结构化、可导航、按需加载的文件系统。

该项目由 VikingMem 研究论文支撑(VLDB 2026),从学术层面验证了这种文件系统范式在 Agent 上下文管理中的有效性。

🗂️ L0 / L1 / L2 三层上下文加载

OpenViking 的关键创新:不是一次性把所有上下文塞给 LLM,而是按三个层级按需加载,精确控制 token 消耗。

L0
~100 tokens
Abstract 摘要
目录的最精简描述。用于快速判断"这个目录/文件是否与当前任务相关"。
L1
~2k tokens
Overview 概览
中等粒度的上下文,包含关键信息摘要和结构化字段。用于初步理解和决策。
L2
Full Detail
完整内容
完整的上下文内容,仅在确认相关时才加载。避免不必要的 token 浪费。
为什么这很重要? Agent 通常有大量上下文(记忆、文档、工具描述),但每次任务只需要其中一小部分。L0/L1/L2 让 Agent 先"扫一眼目录"(L0),再"读概要"(L1),最后才"读全文"(L2),大幅节省 token 开销。

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

OpenViking 不是简单的向量搜索,而是实现了目录递归检索策略,模拟人类在文件系统中"一层层翻找"的过程:

Step 1: Intent Analysis(意图分析)
    ↓ 分析 Agent 当前任务,确定需要哪类上下文
Step 2: Vector Positioning(向量定位)
    ↓ 用向量检索定位到相关目录区域
Step 3: Refined Exploration(精细化探索)
    ↓ 在定位到的目录中读取 L0/L1 摘要,筛选相关项
Step 4: Recursive Drill-down(递归下钻)
    ↓ 对相关子目录递归执行上述过程,直到找到 L2 完整内容

整个检索过程有可视化轨迹(Visualized Retrieval Trajectory),方便调试和观测 Agent 的上下文加载行为。

🔄 自动会话管理与记忆自迭代

OpenViking 在每次会话结束后自动执行:

这使得 Agent 的上下文库不是静态的,而是随使用持续进化的。

⚖️ OpenViking vs mem0

维度OpenVikingmem0
上下文模型✅ 文件系统范式(viking://)KV 向量存储
分层加载✅ L0/L1/L2 三级按需加载❌ 一次性检索
上下文类型✅ 记忆 + 资源 + 技能统一管理主要为记忆
检索策略✅ 目录递归检索(意图→向量→递归)向量相似度搜索
可观测性✅ 可视化检索轨迹❌ 黑盒检索
Token 效率✅ 三级按需加载,节省 70%+ token全量返回
会话管理✅ 自动提取偏好与经验手动管理
学术支撑✅ VLDB 2026 (VikingMem)社区驱动
社区规模25k ⭐较大

🚀 快速开始

安装
pip install openviking
基本使用 — Python
from openviking import VikingDB

# 初始化上下文数据库
db = VikingDB()

# 添加记忆(自动组织到文件系统中)
db.add_memory("user_preferences", {
    "language": "Python",
    "editor": "VS Code",
    "style": "prefer concise code"
})

# 添加资源(文档、代码片段等)
db.add_resource("project_docs/README.md", content="...")

# 添加技能描述
db.add_skill("web_search", description="Search the web for information")

# Agent 查询 — 使用 viking:// 协议导航
context = db.retrieve(
    query="用户的编程偏好是什么?",
    strategy="directory_recursive",  # 目录递归检索
    max_tokens=2000,                 # token 预算
)

# context 自动按 L0→L1→L2 加载,节省 token
print(context.items)   # 返回相关上下文项
print(context.trajectory)  # 可视化检索轨迹
会话结束后自动迭代记忆
# 会话结束后,OpenViking 自动提取并更新记忆
db.end_session(
    session_transcript=conversation_log,
    auto_extract=True,   # 自动提取用户偏好和 Agent 经验
    auto_organize=True,  # 自动整理文件系统结构
)

🔗 链接