OpenViking Skill:AI Agent 的统一上下文数据库与文件系统抽象
一个文件系统的抽象,正在悄悄把 AI Agent 的「记忆、资源、技能」三件套捏到一起。字节跳动旗下火山引擎(Volcengine)开源的 OpenViking,凭借「Self-evolving Context Database」定位和 viking:// 协议进入本周 GitHub Trending Python 周榜,把 Agent 上下文管理从「散落的向量数据库」拽回到「开发者一眼能看懂的目录树」。
功能与原则
OpenViking 的核心是把所有 Agent 需要的上下文(Memory、Resource、Skill)统一挂载到一个虚拟文件系统下,每个条目都拥有独立的 viking:// URI,支持 ls、tree、find 这些最朴素的 Unix 风格操作。设计原则有三条:
- 统一 URI:资源、记忆、技能一律用
viking://寻址,Agent 不再需要在多个数据源之间切换 - 分层按需加载:每条上下文被处理成 L0(~100 tokens 摘要)、L1(~2k tokens 概览)、L2(详情)三层,检索时按需展开,避免一次性塞满上下文窗口
- 可观测检索:每次查询保留目录浏览轨迹,调试时能完整看到哪条路径产生了最终结果
认可度
截至 2026-08-17,OpenViking 在 GitHub 已获得 28,878 Star、2,275 Fork,最近一周新增 约 695 Star,登上 GitHub Trending Python 周榜。本周 Star 增速显著,是 Agent Context Engineering 方向近两个月最具讨论度的中文系开源项目之一。
链接
GitHub 仓库:https://github.com/volcengine/OpenViking
原作者
由 字节跳动旗下火山引擎(Volcengine) 团队开源维护,定位为面向 AI Agent 的「上下文数据库」,与同体系的 ark-cli、veADK 共同构成 Volcengine 的 Agent 工具链。
介绍
OpenViking 把 AI Agent 当成一个「开发者」来服务:给它一个文件系统,让它自己 ls、cat、找资源,而不是塞给它一个黑盒向量数据库。
从 README 提炼的三大能力:
- 一个文件系统管所有上下文。
viking://下分resources/(项目文档、代码仓、网页)、user/{user_id}/memories/(用户偏好、习惯)、user/{user_id}/skills/(用户私有技能)、agent/skills/(账号级共享技能)四个主目录。Skill 不再是散落各处的插件,而是一个能被定位、被检索、被版本管理的资源。 - 分层加载节省 token。每条数据写入时自动生成 L0/L1/L2 三层;目录本身也带 L0/L1,先判相关再下钻文件。官方 benchmark 显示 token 消耗可下降 34.3%–91.0%,查询延迟下降 58.45%–66.10%。
- 目录递归检索。先意图分析,再向量定位到高分目录,在目录里二次检索、聚合结果——比传统单轮 RAG 更准,也能保留上下文层级关系。
特点
- viking:// 协议:把上下文「地址化」,Agent 可以像 Linux 开发者一样
cd、ls、cat自己的 Skill 与 Memory - 三层按需加载:L0 摘要 + L1 概览 + L2 详情,避免长上下文浪费
- 目录递归检索:先定位高分目录,再下钻细节,结果带着目录上下文一起返回
- 会话即记忆:每次 Session 提交后异步提取用户偏好与 Agent 经验,沉淀为长期 Memory
- 多 Provider 友好:内置支持 Volcengine、OpenAI、Codex OAuth、Kimi、GLM、Ollama 模型,并提供
openviking-server init交互式向导
使用方法
安装与初始化(Python 3.10+):
pip install openviking --upgrade
openviking-server init # 交互式配置 provider 与模型
openviking-server doctor # 校验配置
openviking-server # 启动服务(后台:nohup openviking-server > openviking.log 2>&1 &)
最小调用示例(Python 客户端):
from openviking import OpenViking
client = OpenViking()
# 添加一个 GitHub 仓库作为资源
client.add_resource("https://github.com/volcengine/OpenViking")
# 浏览目录
print(client.ls("viking://resources/"))
print(client.tree("viking://resources/volcengine", depth=2))
# 语义搜索
results = client.find("user authentication")
# 按需读取:先抽象,再概览,再详情
print(client.abstract("viking://resources/volcengine/OpenViking"))
print(client.overview("viking://resources/volcengine/OpenViking"))
print(client.read("viking://resources/volcengine/OpenViking"))
也可以直接打开 OpenViking Studio 在线 Playground,免安装体验语义搜索与多 Agent 协作。
使用场景与人群
- 个人/小团队 Agent 开发者:想给 Agent 一个稳定的长期记忆层,又不想自己拼 Qdrant + RAG + Skills 注册表
- 企业内 Agent 平台:需要多租户隔离的 Memory/Skill 资源管理,希望按
user_id隔离数据 - 多 Agent 协作框架:希望 Agent 之间能共享 Skill 与 Resource,又保留各自 Memory
- 对 token 成本敏感的生产环境:分层加载 + 目录检索能直接压低 30%–90% 的输入开销
输入与输出案例
案例 1:在 OpenViking 里查询 Skill
输入:
python
client.find("code review")输出(节选):
[
{
"uri": "viking://agent/skills/code-review",
"score": 0.92,
"path": ["agent", "skills", "code-review"],
"abstract": "Run static analysis + style check on staged files.",
"tier": "L1"
},
{
"uri": "viking://user/u_1024/skills/review-pr",
"score": 0.81,
"path": ["user", "u_1024", "skills", "review-pr"],
"abstract": "Open a PR with a self-review checklist.",
"tier": "L1"
}
]
返回结果带有完整路径与摘要,Agent 可以直接选 Skill 来调用。
案例 2:长期用户偏好沉淀
输入:在 Agent 会话中连续说三次「回答简短一点,不要 markdown 标题」
输出(Session 提交后自动写入):
viking://user/u_1024/memories/preferences/response_style/
├── .abstract.md "User prefers terse responses without markdown headers."
├── .overview.md "Observed in 3 sessions; reinforced 2026-08-12."
└── history.md Full timestamps and prompt excerpts.
下次新会话开起时,Agent 检索到该 memory 后会自动切换为「简洁、不加 ##」的回复风格。
评论区
登录后可评论。