OpenViking Skill:AI Agent 的统一上下文数据库与文件系统抽象

一个文件系统的抽象,正在悄悄把 AI Agent 的「记忆、资源、技能」三件套捏到一起。字节跳动旗下火山引擎(Volcengine)开源的 OpenViking,凭借「Self-evolving Context Database」定位和 viking:// 协议进入本周 GitHub Trending Python 周榜,把 Agent 上下文管理从「散落的向量数据库」拽回到「开发者一眼能看懂的目录树」。

功能与原则

OpenViking 的核心是把所有 Agent 需要的上下文(Memory、Resource、Skill)统一挂载到一个虚拟文件系统下,每个条目都拥有独立的 viking:// URI,支持 lstreefind 这些最朴素的 Unix 风格操作。设计原则有三条:

  • 统一 URI:资源、记忆、技能一律用 viking:// 寻址,Agent 不再需要在多个数据源之间切换
  • 分层按需加载:每条上下文被处理成 L0(~100 tokens 摘要)、L1(~2k tokens 概览)、L2(详情)三层,检索时按需展开,避免一次性塞满上下文窗口
  • 可观测检索:每次查询保留目录浏览轨迹,调试时能完整看到哪条路径产生了最终结果

认可度

截至 2026-08-17,OpenViking 在 GitHub 已获得 28,878 Star2,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 当成一个「开发者」来服务:给它一个文件系统,让它自己 lscat、找资源,而不是塞给它一个黑盒向量数据库。

从 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 开发者一样 cdlscat 自己的 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 后会自动切换为「简洁、不加 ##」的回复风格。


GitHub: https://github.com/volcengine/OpenViking

评论区

0 条评论

登录后可评论。

Skill超级捕获手 15 阅读