OpenViking:为AI智能体打造的开源上下文数据库
在人工智能快速发展的今天,我们正迎来智能体(Agent)应用的爆发。然而,随着智能体承担越来越复杂的任务,一个根本性的挑战逐渐浮现:如何高效地管理、检索和利用海量的上下文信息?无论是个人助手、代码生成工具还是自动化决策系统,它们都需要在运行时访问大量的记忆、资源和技能。传统的解决方案往往导致上下文碎片化、检索效果不佳、成本高昂且难以调试。今天,我们介绍一个专为AI智能体设计的开源项目——OpenViking,它通过创新的“文件系统范式”重新定义了上下文管理,让开发者能够像管理本地文件一样构建智能体的大脑。

智能体开发:被忽视的“上下文危机”
当你构建一个AI智能体时,你可能会遇到以下棘手问题:
-
上下文碎片化:记忆片段散落在代码中,知识文档存储在向量数据库里,工具函数写在不同的模块中。智能体需要同时处理这些异构信息,导致逻辑复杂且难以维护。 -
上下文需求激增:一个智能体可能需要运行数小时甚至数天,每次交互都会产生新的上下文。简单的截断或压缩会导致重要信息丢失,影响任务连贯性。 -
检索效果不佳:传统RAG(检索增强生成)系统采用扁平化的向量存储,只关注语义相似性,却忽略了信息之间的结构关联。这就像从一本书中随机抽取句子,而不知道它们属于哪个章节。 -
上下文不可观察:检索过程是一个黑盒。当智能体给出错误答案时,你很难判断是模型理解问题,还是检索到的上下文不准确。 -
记忆迭代有限:大多数系统将记忆简单地定义为用户对话历史,缺乏对任务执行过程的提炼和长期学习能力。
这些问题的根源在于:我们缺乏一个专门为智能体设计的、结构化的上下文管理基础设施。这正是OpenViking试图填补的空白。
OpenViking:重新定义上下文数据库
OpenViking是一个开源的上下文数据库,专门为AI智能体设计。它的核心思想是:将智能体所需的所有上下文——无论是长期记忆、外部知识库还是可调用的技能——统一组织成一个虚拟的文件系统。开发者可以通过标准的文件操作命令(如ls、find、grep)来访问和管理这些上下文,让智能体拥有结构化、可观察、可迭代的“大脑”。
主要设计目标
-
统一管理:用一致的抽象(虚拟文件系统)替代碎片化的存储。 -
成本优化:通过分层存储和按需加载,大幅降低大语言模型(LLM)调用的token消耗。 -
精准检索:结合目录结构和语义搜索,实现“先定位目录,再深入内容”的递归检索策略。 -
完全可观察:记录每一次检索的路径,让开发者可以追溯智能体的决策依据。 -
自我进化:自动从会话中提取长期记忆,让智能体越用越聪明。
核心概念:文件系统范式如何解决智能体难题
OpenViking的设计围绕五个核心概念展开,它们一一对应我们在前面提到的挑战。
1. 文件系统管理范式 → 解决碎片化
OpenViking将所有上下文映射到viking://协议下的虚拟目录中。每个上下文条目都有一个唯一的URI,就像文件路径一样。例如:
viking://
├── resources/ # 外部资源:文档、代码库、网页等
│ ├── my_project/
│ │ ├── docs/
│ │ └── src/
├── user/ # 用户相关的记忆
│ └── memories/
│ ├── preferences/
│ └── habits/
└── agent/ # 智能体自身的技能和经验
├── skills/
├── memories/
└── instructions/
这种结构让智能体能够以确定性的方式定位信息:想要查找项目文档,就去viking://resources/my_project/docs/;想要回忆用户的编程偏好,就去viking://user/memories/preferences/coding_style。开发者也可以通过熟悉的命令来操作这些上下文:
ov ls viking://resources/ # 列出所有资源
ov tree viking://resources/my_project -L 2 # 以树形结构查看目录
ov cat viking://user/memories/preferences # 查看某个文件内容
这解决了碎片化问题:记忆、资源和技能不再是孤立的,而是统一在一个可导航的文件系统中。
2. 分层上下文加载 → 降低 Token 消耗
为了在检索时避免一次性加载大量冗余信息,OpenViking在写入上下文时自动生成三个层次的内容:
-
L0(摘要):一句话摘要,用于快速筛选和相关性判断。例如一个文档的L0可能是“OpenViking安装指南”。 -
L1(概览):包含核心信息和使用场景,约2K token左右。智能体在规划阶段读取L1来决定是否需要深入。 -
L2(详情):完整的原始数据,包括全部文本、代码或图像。只有在智能体明确需要执行具体操作时才会加载L2。
这种分层结构存储在同一个虚拟目录中,通过特殊的隐藏文件(如.abstract、.overview)表示。智能体可以根据任务需求逐层深入,避免为每一次查询都支付加载全文的token成本。
3. 目录递归检索 → 提升检索效果
传统的向量检索擅长找到语义相似的片段,但往往忽略了这些片段所在的上下文结构。OpenViking设计了一种目录递归检索策略,模拟人类查找信息的过程:先确定哪个目录可能包含所需信息,再深入目录内部探索。
检索流程如下:
-
意图分析:解析用户查询,生成多个检索条件(如关键词、实体)。 -
初始定位:使用向量检索快速找到最相关的几个“切片”(chunks),并定位它们所属的高分目录。 -
精细探索:在这些目录内进行二次检索,并将高分结果加入候选集。 -
递归深入:如果目录包含子目录,则对子目录重复二次检索,逐层深入。 -
结果聚合:最终汇总最相关的上下文返回给智能体。
这种方法不仅找到语义匹配的内容,还确保了信息在整体结构中的完整性。例如,当智能体询问“如何配置OpenViking的Embedding模型”时,系统可能会先定位到viking://resources/openviking/docs/configuration/目录,然后在该目录内检索“embedding”相关的内容,最终返回整个配置章节,而不是零散的句子。
4. 可视化检索轨迹 → 可观察上下文
由于检索过程是基于目录递归的,每一次检索的路径(例如:从viking://resources/到viking://resources/openviking/docs/再到具体文件)都会被记录下来。开发者可以通过API或CLI查看这次检索的“轨迹”,了解智能体是如何一步步定位信息的。当智能体给出错误答案时,可以清晰地区分是检索路径错了,还是模型理解错了。这种可观察性极大地简化了调试过程。
5. 自动会话管理 → 上下文自迭代
OpenViking内置了记忆自迭代循环。在每个会话结束时,开发者可以触发记忆提取机制。系统会异步分析本次会话中的用户反馈、任务执行结果、工具调用等信息,并自动更新到用户和智能体记忆目录中:
-
用户记忆更新:例如提取用户偏好的写作风格、常用的代码库等,使智能体在后续交互中更贴合用户习惯。 -
智能体经验积累:从成功或失败的任务中提取操作技巧,形成技能记忆,辅助未来决策。
这意味着智能体不再是一次性的,它可以通过与世界的交互持续学习和进化。
快速开始:十分钟搭建你的第一个上下文数据库
现在让我们实际操作一下,感受OpenViking的核心功能。我们将从安装、配置到运行一个完整的示例。
前置条件
-
Python 3.10+ -
Go 1.22+(如果需要从源码构建AGFS组件) -
C++17兼容的编译器(GCC 9+或Clang 11+) -
操作系统:Linux、macOS或Windows -
稳定的网络连接(用于下载依赖和访问模型服务)
1. 安装OpenViking
最简单的安装方式是通过pip:
pip install openviking --upgrade
如果你还想安装命令行工具ov(可选),可以使用Rust包管理器cargo安装:
cargo install --git https://github.com/volcengine/OpenViking ov_cli
或者通过一键安装脚本:
curl -fsSL https://raw.githubusercontent.com/volcengine/OpenViking/main/crates/ov_cli/install.sh | bash
2. 模型准备
OpenViking需要两类模型能力:
-
VLM模型:用于理解图像和文本内容(如视觉问答、文档解析)。 -
Embedding模型:用于生成向量表示,实现语义检索。
支持的VLM提供商
OpenViking支持三种VLM提供商,你可以根据需求选择:
| 提供商 | 描述 | 典型模型 |
|---|---|---|
volcengine |
火山引擎豆包模型 | doubao-seed-2-0-pro-260215 |
openai |
OpenAI官方API | gpt-4-vision-preview, gpt-4o |
litellm |
统一调用多种第三方模型(Anthropic, DeepSeek, Gemini, vLLM, Ollama等) | claude-3-5-sonnet-20240620, deepseek-chat, gemini-pro, ollama/llama3.1 |
注意:
litellm支持通过统一接口调用多种模型,model字段需遵循LiteLLM格式规范。系统会自动检测常见模型(如claude-*、deepseek-*等),其他模型需按LiteLLM格式填写完整前缀。
支持的Embedding提供商
| 提供商 | 典型模型 | 维度 |
|---|---|---|
volcengine |
doubao-embedding-vision-250615 |
1024 |
openai |
text-embedding-3-large |
3072 |
jina |
待定 | 待定 |
3. 环境配置
创建服务器配置文件 ~/.openviking/ov.conf
下面是一个使用火山引擎豆包模型的完整配置示例(请根据实际情况替换API Key和端点):
{
"storage": {
"workspace": "/home/your-name/openviking_workspace"
},
"log": {
"level": "INFO",
"output": "stdout"
},
"embedding": {
"dense": {
"api_base": "https://ark.cn-beijing.volces.com/api/v3",
"api_key": "your-volcengine-api-key",
"provider": "volcengine",
"dimension": 1024,
"model": "doubao-embedding-vision-250615"
},
"max_concurrent": 10
},
"vlm": {
"api_base": "https://ark.cn-beijing.volces.com/api/v3",
"api_key": "your-volcengine-api-key",
"provider": "volcengine",
"model": "doubao-seed-2-0-pro-260215",
"max_concurrent": 100
}
}
如果你想使用OpenAI,配置文件类似:
{
"embedding": {
"dense": {
"api_base": "https://api.openai.com/v1",
"api_key": "your-openai-api-key",
"provider": "openai",
"dimension": 3072,
"model": "text-embedding-3-large"
}
},
"vlm": {
"api_base": "https://api.openai.com/v1",
"api_key": "your-openai-api-key",
"provider": "openai",
"model": "gpt-4-vision-preview"
}
}
设置环境变量
在Linux/macOS上:
export OPENVIKING_CONFIG_FILE=~/.openviking/ov.conf
在Windows PowerShell上:
$env:OPENVIKING_CONFIG_FILE = "$HOME/.openviking/ov.conf"
4. 运行你的第一个示例
首先启动OpenViking服务器:
openviking-server
服务器会在默认端口1933上监听。如果你想在后台运行:
nohup openviking-server > /data/log/openviking.log 2>&1 &
接着,打开另一个终端,配置CLI客户端。创建~/.openviking/ovcli.conf:
{
"url": "http://localhost:1933",
"timeout": 60.0,
"output": "table"
}
并设置环境变量(可选,默认会读取该路径):
export OPENVIKING_CLI_CONFIG_FILE=~/.openviking/ovcli.conf
现在你可以执行一些基本操作了:
# 查看服务器状态
ov status
# 添加一个外部资源(例如OpenViking的GitHub仓库)
ov add-resource https://github.com/volcengine/OpenViking --wait
# 列出已添加的资源
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/zh
恭喜!你已经成功使用OpenViking管理了一个外部GitHub仓库的上下文。
5. 尝试VikingBot(可选)
VikingBot是一个构建在OpenViking之上的轻量级智能体框架,可以快速开启交互式对话。安装方式:
pip install "openviking[bot]"
启动服务器并同时启动Bot:
openviking-server --with-bot
然后在另一个终端启动交互式聊天:
ov chat
现在你可以与智能体对话,它会自动利用OpenViking中存储的上下文来回答问题。
深入配置:模型提供商详解
OpenViking的灵活性在于支持多种模型提供商。下面我们详细说明每种提供商的配置要点。
Volcengine(豆包)
火山引擎的豆包模型在中文场景下表现出色。配置时,你可以使用模型名称或端点ID:
{
"vlm": {
"provider": "volcengine",
"model": "doubao-seed-2-0-pro-260215",
"api_key": "your-api-key",
"api_base": "https://ark.cn-beijing.volces.com/api/v3"
}
}
如果你在火山引擎ARK控制台创建了推理端点,也可以使用端点ID作为model:
{
"vlm": {
"provider": "volcengine",
"model": "ep-20241220174930-xxxxx",
"api_key": "your-api-key",
"api_base": "https://ark.cn-beijing.volces.com/api/v3"
}
}
OpenAI
使用OpenAI官方API,支持gpt-4o、gpt-4-vision-preview等模型:
{
"vlm": {
"provider": "openai",
"model": "gpt-4o",
"api_key": "your-api-key",
"api_base": "https://api.openai.com/v1"
}
}
你也可以使用自定义的OpenAI兼容端点(例如通过代理或本地部署的vLLM)。
LiteLLM
LiteLLM是一个强大的统一客户端,支持数十种模型提供商。以下是几个典型配置:
Anthropic Claude
{
"vlm": {
"provider": "litellm",
"model": "claude-3-5-sonnet-20240620",
"api_key": "your-anthropic-api-key"
}
}
DeepSeek
{
"vlm": {
"provider": "litellm",
"model": "deepseek-chat",
"api_key": "your-deepseek-api-key"
}
}
Qwen(通义千问)
{
"vlm": {
"provider": "litellm",
"model": "dashscope/qwen-turbo",
"api_key": "your-dashscope-api-key",
"api_base": "https://dashscope.aliyuncs.com/compatible-mode/v1"
}
}
对于国内区域,使用api_base:https://dashscope.aliyuncs.com/compatible-mode/v1;国际区域使用https://dashscope-intl.aliyuncs.com/compatible-mode/v1。
本地模型(Ollama)
{
"vlm": {
"provider": "litellm",
"model": "ollama/llama3.1",
"api_base": "http://localhost:11434"
}
}
本地模型(vLLM)
{
"vlm": {
"provider": "litellm",
"model": "hosted_vllm/llama-3.1-8b",
"api_base": "http://your-vllm-server:8000"
}
}
生产环境部署建议
对于生产环境,建议将OpenViking作为独立的HTTP服务运行,以确保稳定性和性能。推荐在火山引擎弹性计算服务(ECS)上使用veLinux操作系统进行部署。你可以参考官方文档中的服务器部署与ECS设置指南进行详细操作。
性能与评测:OpenClaw记忆插件
OpenViking不仅是一个理论框架,其实用性已经通过实际插件验证。团队在OpenClaw项目中集成了OpenViking作为记忆插件,并在LoCoMo长程对话数据集上进行了评测。以下是关键数据(使用seed-2.0-code模型):
| 实验组 | 任务完成率 | 输入token总计 |
|---|---|---|
| OpenClaw(memory-core) | 35.65% | 24,611,530 |
| OpenClaw + LanceDB (-memory-core) | 44.55% | 51,574,530 |
| OpenClaw + OpenViking Plugin (-memory-core) | 52.08% | 4,264,396 |
| OpenClaw + OpenViking Plugin (+memory-core) | 51.23% | 2,099,622 |
结论:结合OpenViking后,若关闭原生记忆,任务完成率从35.65%提升至52.08%(提升46%),输入token成本降低83%;即使开启原生记忆,token成本也降低了91%,同时完成率提升43%。这充分证明了OpenViking在提升智能体性能的同时显著降低成本的潜力。
常见问题解答
OpenViking与传统RAG有何不同?
传统RAG通常将文档切分为扁平化的向量片段,检索时只考虑语义相似度,忽略文档结构。OpenViking采用文件系统范式,将上下文组织成目录树,检索时先定位目录再深入内容,同时保留检索路径的可观察性。这种结构化的方法更符合人类信息查找的习惯,也更容易调试和优化。
OpenViking支持哪些语言模型?
OpenViking本身不提供语言模型,而是通过适配器支持多种第三方模型。目前支持Volcengine、OpenAI和LiteLLM(后者可调用Anthropic、DeepSeek、Gemini、Qwen、本地模型等)。未来会持续增加更多提供商。
如何为OpenViking贡献代码?
我们欢迎任何形式的贡献!你可以访问GitHub仓库(https://github.com/volcengine/OpenViking),提交Issue或Pull Request。详细的贡献指南请参阅文档中的贡献者指南。
OpenViking适合个人开发者还是企业?
两者皆可。个人开发者可以用它来管理个人知识库或构建个人助手;企业可以用它作为智能体应用的基础设施,统一管理组织内部的知识资产和技能库。其开源特性使得定制和集成非常灵活。
是否需要GPU才能运行?
OpenViking服务器本身不需要GPU,它主要负责上下文的管理和检索。但VLM和Embedding模型通常需要GPU或云服务支持。你可以选择使用云端的模型API(如火山引擎、OpenAI),这样本地不需要GPU。如果你想在本地运行模型(通过LiteLLM调用Ollama或vLLM),则需要一定的GPU资源。
社区与参与
OpenViking仍处于早期阶段,我们真诚邀请每一位对AI智能体技术感兴趣的开发者加入我们:
-
官网:https://www.openviking.ai -
GitHub:https://github.com/volcengine/OpenViking -
问题反馈:GitHub Issues -
文档:https://www.openviking.ai/docs -
社区交流: -
飞书群(二维码见文档) -
微信群(添加助手入群) -
Discord -
X (Twitter)
-
如果你喜欢这个项目,不妨给我们一个Star,这是对我们最大的鼓励!
许可证
OpenViking采用Apache License 2.0许可证,你可以自由使用、修改和分发,但需保留版权声明和许可证副本。详细条款请见LICENSE文件。
OpenViking的旅程已经开始,期待你的参与,一起定义AI智能体上下文管理的未来。

