现在的 AI Agent 开发,真的是越来越卷了。
前有 OpenClaw 2天狂揽10万Star,后有港大开源的 ClawWork 让 AI 自己赚钱养活自己。
看起来 AI Agent 的赛道已经足够热闹,但有一个核心问题,却始终没有得到很好的解决:
上下文管理。
这不是什么新问题,但绝对是个让人头疼的大问题。当你的 Agent 需要长期运行,需要记住用户偏好、调用历史、处理复杂任务时,上下文就会像滚雪球一样越滚越大。
塞进去吧,token费用吓死人;截断吧,重要信息说丢就丢。
怎么办?传统RAG表示:我尽力了。
就在最近,字节跳动火山引擎(Volcengine) 低调开源了一个名为OpenViking的重磅项目。
![]()
一个专为 AI Agent 设计的上下文数据库,它把这个问题用了很好的处理思路给解决了。
这个项目没有走传统RAG的老路,而是用了一个非常巧妙的思路:文件系统范式。
目前已在 GitHub 收获2.9K收藏量!
![]()
一、项目背景
在说 OpenViking 之前,得先搞清楚传统方案到底哪里出了问题。
- 碎片化:记忆写在代码里,资源存在向量数据库中,技能分散在各个模块。
- 成本高:Agent运行久了,上下文越来越多。简单粗暴地截断或压缩?不好意思,重要信息全丢了。全部塞进去?抱歉,token费用了解一下。
- 检索差:传统RAG用扁平存储,没有全局视图,想精准找到需要的上下文,比登天还难。
- 黑盒子:整个检索链路完全不可观测,出了Bug你都不知道去哪找问题。
- 不迭代:现有记忆只记录用户对话,根本没有Agent任务相关的记忆沉淀,用过就忘。
这些问题叠加在一起,AI Agent 的上下文管理简直就是一个"地狱级"副本。
而OpenViking的出现,就是为了打破这个困局。
二、项目简介
OpenViking是字节火山引擎开源的一款专为 AI Agent 设计的上下文数据库。
![]()
它的核心思路非常巧妙:用文件系统范式来管理上下文。
简单来说,就是让开发者像管理本地文件一样来管理Agent的:
- 记忆(Memory)
- 资源(Resources)
- 技能(Skills)
不用再学习复杂的向量数据库操作,不用再去理解各种抽象概念。建文件夹、拖文件、搜索——一切都是那么熟悉,它有层级、有路径、有语义组织。
这就是OpenViking定义的"极简上下文交互范式"。
三、五大核心亮点
1、文件系统管理范式 → 终结碎片化
把记忆、资源、技能全部统一到一个虚拟文件系统里。
- 记忆可以存在不同的文件夹
- 资源文件就像你的Word、Excel
- 技能就是可执行的程序模块
- 同时支持目录层级结构,想怎么组织就怎么组织
2、分层上下文按需加载 → 大幅降低Token消耗
L0/L1/L2三层结构设计:
L0:最核心、最常用的信息,常驻内存。
L1:次重要的信息,按需加载。
L2:大量历史信息,用时再读取。
这种设计太重要了——以前不管有用没用,所有上下文都得塞进Prompt里,token成本蹭蹭涨。现在好了,真正需要的才加载,大幅节省了成本。
3、目录递归检索 → 精准定位上下文
传统RAG只会简单的语义匹配,OpenViking直接玩起了"目录定位+语义搜索"的组合拳:
- 目录路径定位
- 递归查找
- 语义融合
- 精准召回
这种方式既有文件系统的精准定位,又有语义搜索的灵活性,检索效果直接提升了好几个档次!
4、可视化检索轨迹 → 彻底告别黑盒子
这一点是很多 RAG 系统没有的。
OpenViking 支持可视化目录检索轨迹。
你可以看到:
- Agent 从哪个目录开始
- 递归进入了哪些子路径
- 为什么加载某个资源
- 检索链路如何展开
5、会话自动管理 → Agent越用越聪明
OpenViking 还做了一件更高级的事:自动压缩会话历史。
包括:对话内容、工具调用、资源引用、冗余信息。
并会提取长期记忆。
用过的知识、解决过的问题,自动沉淀下来。下次遇到类似场景,直接调取沉淀经验!
四、快速上手
第一步:OpenViking 安装
OpenViking 有两种安装方式,推荐用Python包安装:
pip install openviking如果你想试试Rust CLI(可选),也可以这样装:
curl -fsSL https://raw.githubusercontent.com/volcengine/OpenViking/main/crates/ov_cli/install.sh | bash第二步:模型准备
OpenViking需要两种模型能力:
- VLM模型:用于图像和内容理解
- Embedding模型:用于向量化和语义检索
好消息是,OpenViking支持超多模型提供商,你想用哪个就用哪个:
提供商
模型
获取API Key的地方
火山引擎
doubao
Volcengine Console
OpenAI
gpt
OpenAI Platform
Anthropic
claude
Anthropic Console
DeepSeek
deepseek
DeepSeek Platform
gemini
Google AI Studio
月之暗面
kimi
Moonshot Platform
智谱AI
glm
BigModel
通义千问
qwen
DashScope Console
MiniMax
minimax
MiniMax Platform
OpenRouter
任意模型
OpenRouter
vLLM
本地模型
最贴心的是,OpenViking用了Provider Registry来统一管理模型访问,系统会根据模型名字自动检测提供商,切换起来超级丝滑!
第三步:配置模型
不同的提供商有不同的配置方式,需要创建配置文件 ~/.openviking/ov.conf。
{"embedding": {"dense": {"api_base" : "", // API 服务端点地址"api_key" : "", // 模型服务的 API 密钥"provider" : "", // 提供商类型(volcengine 或 openai)"dimension": 1024, // 向量维度"model" : "" // Embedding 模型名称(如 doubao-embedding-vision-250615 或 text-embedding-3-large)},"vlm": {"api_base" : "", // API 服务端点地址"api_key" : "", // 模型服务的 API 密钥"provider" : "", // 提供商类型(volcengine 或 openai)"model" : "" // VLM 模型名称(如 doubao-seed-1-8-251228 或 gpt-4-vision-preview)}给大家举几个常用的例子:
火山引擎(豆包)配置:
{"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"},"vlm": {"api_base" : "https://ark.cn-beijing.volces.com/api/v3","api_key" : "your-volcengine-api-key","provider" : "volcengine","model" : "doubao-seed-1-8-251228"}如果你想用本地模型也没问题,通过vLLM就能跑:
# 启动vLLM服务器vllm serve meta-llama/Llama-3.1-8B-Instruct --port 8000然后这样配置:
{"vlm": {"provider": "vllm","model": "meta-llama/Llama-3.1-8B-Instruct","api_base": "http://localhost:8000/v1"}第四步:开始使用
创建示例脚本example.py:
import openviking as ov# Initialize OpenViking client with data directoryclient = ov.SyncOpenViking(path="./data")try:# Initialize the clientclient.initialize()# Add resource (supports URL, file, or directory)add_result = client.add_resource(path="https://raw.githubusercontent.com/volcengine/OpenViking/refs/heads/main/README.md"root_uri = add_result['root_uri']# Explore the resource tree structurels_result = client.ls(root_uri)print(f"Directory structure:\n{ls_result}\n")# Use glob to find markdown filesglob_result = client.glob(pattern="**/*.md", uri=root_uri)if glob_result['matches']:content = client.read(glob_result['matches'][0])print(f"Content preview: {content[:200]}...\n")# Wait for semantic processing to completeprint("Wait for semantic processing...")client.wait_processed()# Get abstract and overview of the resourceabstract = client.abstract(root_uri)overview = client.overview(root_uri)print(f"Abstract:\n{abstract}\n\nOverview:\n{overview}\n")# Perform semantic searchresults = client.find("what is openviking", target_uri=root_uri)print("Search results:")for r in results.resources:print(f" {r.uri} (score: {r.score:.4f})")# Close the clientclient.close()except Exception as e:print(f"Error: {e}")然后运行脚本:
python example.py看到如下输出,就说明运行成功了!
Directory structure:Content preview: ...Wait for semantic processing...Abstract:Overview:Search results:viking://resources/... (score: 0.8523)...当然如果嫌本地麻烦,火山引擎也提供了云端部署方式,将 OpenViking 作为独立 HTTP 服务运行,以便为你的 AI Agent 提供持久化、高性能的上下文支持。
详细部署方式可参考这个文档:https://github.com/volcengine/OpenViking/blob/main/docs/zh/getting-started/03-quickstart-server.md五、写在最后
OpenViking这个项目真的很有创意,它用一个大家最熟悉的文件系统范式,就把AI Agent上下文管理的所有痛点都解决了。
就像当年 Linux 用一切皆文件的理念改变了操作系统一样,OpenViking 用一切皆文件的理念重新定义了 AI Agent 的上下文管理。
如果你正在做 AI Agent 开发,或者被上下文管理的问题搞得头疼,OpenViking 非常值得体验!
GitHub:
https://github.com/volcengine/OpenViking
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.