字节笔记本
2026年2月20日
OpenViking:专为 AI Agent 设计的开源上下文数据库
本文介绍 OpenViking,字节跳动火山引擎开源的专为 AI Agent 设计的上下文数据库,通过文件系统范式统一管理 Agent 所需的记忆、资源和技能。
项目简介
OpenViking 是一个开源的上下文数据库(Context Database),专门为 AI Agent 设计。它由字节跳动火山引擎 Viking 团队开发和维护,旨在解决 AI Agent 开发中上下文管理的痛点。
该项目在 GitHub 上已获得广泛关注,采用 Apache 2.0 开源协议。
核心解决的问题
在 AI 时代,数据丰富但高质量上下文稀缺。开发 AI Agent 时,开发者常面临以下挑战:
| 挑战 | 说明 |
|---|---|
| 上下文碎片化 | 记忆在代码中,资源在向量数据库,技能散落各处,难以统一管理 |
| 上下文需求激增 | Agent 长时运行任务产生大量上下文,简单截断或压缩导致信息丢失 |
| 检索效果差 | 传统 RAG 使用扁平存储,缺乏全局视图,难以理解信息全貌 |
| 上下文不可观测 | 传统 RAG 的隐式检索链像黑盒,出错时难以调试 |
| 记忆迭代受限 | 当前记忆只是用户交互记录,缺乏 Agent 相关任务记忆 |
OpenViking 的解决方案
OpenViking 创新性地采用**"文件系统范式"**来统一组织 Agent 所需的记忆、资源和技能:
1. 文件系统管理范式 → 解决碎片化
基于文件系统范式统一上下文管理,将记忆、资源、技能映射到 viking:// 协议下的虚拟目录:
viking://
├── resources/ # 资源:项目文档、代码仓库、网页等
│ ├── my_project/
│ │ ├── docs/
│ │ └── src/
│ └── ...
├── user/ # 用户:个人偏好、习惯等
│ └── memories/
│ ├── preferences/
│ └── ...
└── agent/ # Agent:技能、指令、任务记忆等
├── skills/
├── memories/
└── instructions/2. 分层上下文加载 → 降低 Token 消耗
自动将上下文处理为三层结构:
- L0 (摘要):一句话总结,用于快速检索识别
- L1 (概览):包含核心信息和使用场景,Agent 规划阶段决策使用
- L2 (详情):完整原始数据,Agent 深度阅读时按需加载
3. 目录递归检索 → 提升检索效果
采用创新的目录递归检索策略:
- 意图分析:生成多个检索条件
- 初定位:使用向量检索快速定位高分目录
- 精细探索:在该目录内进行二次检索
- 递归深入:如存在子目录,逐层递归重复检索
- 结果聚合:获取最相关的上下文返回
4. 可视化检索轨迹 → 可观测上下文
所有上下文以统一格式集成,每个条目对应唯一 URI,检索过程的目录浏览和文件定位轨迹完整保留,便于问题定位。
5. 自动会话管理 → 上下文自我迭代
内置记忆自迭代循环,会话结束时触发记忆提取机制:
- 用户记忆更新:更新用户偏好相关记忆
- Agent 经验积累:提取操作技巧、工具使用经验等核心内容
技术栈
- Python - 核心开发语言(3.10+)
- Rust - CLI 工具和高性能索引存储
- C++ - 扩展模块(高性能索引和存储)
安装指南
Python 包安装
pip install openvikingRust CLI 安装(可选)
curl -fsSL https://raw.githubusercontent.com/volcengine/OpenViking/main/crates/ov_cli/install.sh | bash或从源码构建:
cargo install --git https://github.com/volcengine/OpenViking ov_cli快速开始
1. 模型准备
OpenViking 需要以下模型能力:
- VLM 模型:用于图像和内容理解
- Embedding 模型:用于向量化和语义检索
支持的 VLM 提供商
| 提供商 | 模型 | 获取 API Key |
|---|---|---|
volcengine | doubao | 火山引擎控制台 |
openai | gpt | OpenAI Platform |
anthropic | claude | Anthropic Console |
deepseek | deepseek | DeepSeek Platform |
gemini | gemini | Google AI Studio |
moonshot | kimi | Moonshot Platform |
zhipu | glm | 智谱开放平台 |
dashscope | qwen | DashScope 控制台 |
minimax | minimax | MiniMax Platform |
openrouter | (任意模型) | OpenRouter |
vllm | (本地模型) | — |
2. 环境配置
创建配置文件 ~/.openviking/ov.conf:
{
"embedding": {
"dense": {
"api_base": "https://ark.cn-beijing.volces.com/api/v3",
"api_key": "your-api-key",
"provider": "volcengine",
"dimension": 1024,
"model": "doubao-embedding-vision-250615"
}
},
"vlm": {
"api_base": "https://ark.cn-beijing.volces.com/api/v3",
"api_key": "your-api-key",
"provider": "volcengine",
"model": "doubao-seed-1-8-251228"
}
}设置环境变量:
export OPENVIKING_CONFIG_FILE=~/.openviking/ov.conf3. 运行示例
import openviking as ov
# 初始化 OpenViking 客户端
client = ov.SyncOpenViking(path="./data")
try:
# 初始化客户端
client.initialize()
# 添加资源(支持 URL、文件或目录)
add_result = client.add_resource(
path="https://raw.githubusercontent.com/volcengine/OpenViking/refs/heads/main/README.md"
)
root_uri = add_result['root_uri']
# 浏览资源树结构
ls_result = client.ls(root_uri)
print(f"目录结构:\n{ls_result}\n")
# 使用 glob 查找 markdown 文件
glob_result = client.glob(pattern="**/*.md", uri=root_uri)
if glob_result['matches']:
content = client.read(glob_result['matches'][0])
print(f"内容预览: {content[:200]}...\n")
# 等待语义处理完成
print("等待语义处理...")
client.wait_processed()
# 获取资源摘要和概览
abstract = client.abstract(root_uri)
overview = client.overview(root_uri)
print(f"摘要:\n{abstract}\n\n概览:\n{overview}\n")
# 执行语义搜索
results = client.find("what is openviking", target_uri=root_uri)
print("搜索结果:")
for r in results.resources:
print(f" {r.uri} (score: {r.score:.4f})")
# 关闭客户端
client.close()
except Exception as e:
print(f"错误: {e}")项目架构
OpenViking/
├── openviking/ # 核心源代码目录
│ ├── core/ # 核心模块:客户端、引擎、文件系统等
│ ├── models/ # 模型集成:VLM 和 Embedding 模型封装
│ ├── parse/ # 资源解析:文件解析、检测、OVPack 处理
│ ├── retrieve/ # 检索模块:语义检索、目录递归检索
│ ├── storage/ # 存储层:向量数据库、文件系统队列、观察者
│ ├── session/ # 会话管理:历史、记忆提取
│ ├── message/ # 消息处理:格式化、转换
│ ├── prompts/ # Prompt 模板
│ ├── utils/ # 工具函数
│ └── bin/ # 命令行工具
├── docs/ # 项目文档
├── examples/ # 使用示例
├── tests/ # 测试用例
├── src/ # C++ 扩展(高性能索引和存储)
└── third_party/ # 第三方依赖服务器部署
生产环境建议将 OpenViking 作为独立的 HTTP 服务运行,为 AI Agent 提供持久、高性能的上下文支持。
推荐使用**火山引擎弹性计算服务(ECS)**配合 veLinux 操作系统部署,以获得最佳存储性能和数据安全。
与 VikingDB 的关系
OpenViking 由字节跳动火山引擎 Viking 团队开发和维护:
- 2019:VikingDB 向量数据库支持字节跳动全业务大规模使用
- 2023:VikingDB 在火山引擎公有云上线
- 2024:推出开发者产品矩阵:VikingDB、Viking KnowledgeBase、Viking MemoryBase
- 2025:打造 AI Search、Vaka 知识助手等上层应用产品
- 2025年10月:开源 MineContext,探索主动式 AI 应用
- 2026年1月:开源 OpenViking,为 AI Agent 提供底层上下文数据库支持
社区与支持
- GitHub 仓库:github.com/volcengine/OpenViking
- 官方网站:www.openviking.ai
- 官方文档:www.openviking.ai/docs
- Discord:加入 Discord 服务器
- X (Twitter):@openvikingai
总结
OpenViking 是一个创新的 AI Agent 上下文数据库,通过文件系统范式解决了传统 RAG 的碎片化、检索效果差、不可观测等问题。它让开发者能够像管理本地文件一样构建 Agent 的大脑,实现分层上下文加载、目录递归检索和自动记忆迭代。
对于正在构建 AI Agent 的开发者来说,OpenViking 提供了一个强大而优雅的上下文管理解决方案,值得深入探索和使用。