在 AI 时代,数据易得,但高质量的上下文却难求。构建 AI Agent 时,开发者经常遇到这些挑战:
OpenViking 是一个开源的、专为 AI Agent 设计的上下文数据库。
我们旨在为 Agent 定义一套极简的上下文交互范式,让开发者彻底告别上下文管理的烦恼。 OpenViking 摒弃了传统 RAG 的碎片化向量存储模式,创新性地采用 “文件系统范式”,将 Agent 所需的记忆、资源和技能进行统一的结构化组织。
通过 OpenViking,开发者可以像管理本地文件一样构建 Agent 的大脑:
在开始使用 OpenViking 之前,请确保您的环境满足以下要求:
pip install openviking
OpenViking 需要以下模型能力:
OpenViking 支持多种模型服务:
创建配置文件 ~/.openviking/ov.conf:
{
"embedding": {
"dense": {
"api_base" : "<api-endpoint>", // API 服务端点地址
"api_key" : "<your-api-key>", // 模型服务的 API 密钥
"provider" : "<provider-type>", // 提供商类型(volcengine 或 openai)
"dimension": 1024, // 向量维度
"model" : "<model-name>" // Embedding 模型名称(如 doubao-embedding-vision-250615 或 text-embedding-3-large)
}
},
"vlm": {
"api_base" : "<api-endpoint>", // API 服务端点地址
"api_key" : "<your-api-key>", // 模型服务的 API 密钥
"provider" : "<provider-type>", // 提供商类型(volcengine 或 openai)
"model" : "<model-name>" // 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"
}
}
{
"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"
命令提示符(cmd.exe):
set "OPENVIKING_CONFIG_FILE=%USERPROFILE%\.openviking\ov.conf"
💡 提示:你也可以将配置文件放在其他位置,只需在环境变量中指定正确的路径即可。
📝 前提:请确保已完成上一步的环境配置
现在让我们运行一个完整的示例,体验 OpenViking 的核心功能。
创建 example.py:
import openviking as ov
# Initialize OpenViking client with data directory
client = ov.SyncOpenViking(path="./data")
try:
# Initialize the client
client.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 structure
ls_result = client.ls(root_uri)
print(f"Directory structure:\n{ls_result}\n")
# Use glob to find markdown files
glob_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 complete
print("Wait for semantic processing...")
client.wait_processed()
# Get abstract and overview of the resource
abstract = client.abstract(root_uri)
overview = client.overview(root_uri)
print(f"Abstract:\n{abstract}\n\nOverview:\n{overview}\n")
# Perform semantic search
results = 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 client
client.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 🎉
在生产环境中,我们推荐将 OpenViking 作为独立 HTTP 服务运行,以便为您的 AI Agent 提供持久化、高性能的上下文支持。
🚀 云端部署OpenViking: 为了确保存储性能与数据安全,我们推荐使用 火山引擎云服务器 (ECS) 结合 veLinux 系统进行部署。我们准备了详细的测试教程,点击下方链接即可快速上手。
在成功运行第一个示例后,让我们深入了解 OpenViking 的设计理念。这五大核心理念与前面提到的解决方案一一对应,共同构建了一个完整的上下文管理体系:
我们不再将上下文视为扁平的文本切片,而是将其统一抽象并组织于一个虚拟文件系统中。无论是记忆、资源还是能力,都会被映射到 viking:// 协议下的虚拟目录,拥有唯一的 URI。
这种范式赋予了 Agent 前所未有的上下文操控能力,使其能像开发者一样,通过 ls、find 等标准指令来精确、确定性地定位、浏览和操作信息,让上下文的管理从模糊的语义匹配演变为直观、可追溯的"文件操作"。了解更多:Viking URI | 上下文类型
viking:// ├── resources/ # 资源:项目文档、代码库、网页等 │ ├── my_project/ │ │ ├── docs/ │ │ │ ├── api/ │ │ │ └── tutorials/ │ │ └── src/ │ └── ... ├── user/ # 用户:个人偏好、习惯等 │ └── memories/ │ ├── preferences/ │ │ ├── 写作风格 │ │ └── 编程习惯 │ └── ... └── agent/ # Agent:技能、指令、任务记忆等 ├── skills/ │ ├── search_code │ ├── analyze_data │ └── ... ├── memories/ └── instructions/
将海量上下文一次性塞入提示词,不仅成本高昂,更容易超出模型窗口并引入噪声。OpenViking 在上下文写入时便自动将其处理为三个层级:
了解更多:上下文分层
viking://resources/my_project/ ├── .abstract # L0 层:摘要(~100 tokens)- 快速判断相关性 ├── .overview # L1 层:概览(~2k tokens)- 了解结构和要点 ├── docs/ │ ├── .abstract # 每个目录都有对应的 L0/L1 层 │ ├── .overview │ ├── api/ │ │ ├── .abstract │ │ ├── .overview │ │ ├── auth.md # L2 层:完整内容 - 按需加载 │ │ └── endpoints.md │ └── ... └── src/ └── ...
单一的向量检索难以应对复杂的查询意图。OpenViking 设计了一套创新的目录递归检索策略,深度融合多种检索方式:
这种"先锁定高分目录、再精细探索内容"的策略,不仅能找到语义最匹配的片段,更能理解信息所在的完整语境,从而提升检索的全局性与准确性。了解更多:检索机制
OpenViking 的组织方式采用层次化虚拟文件系统结构,所有上下文均以统一格式整合且每个条目对应唯一 URI(如 viking:// 路径),打破传统扁平黑箱式管理模式,层次分明易于理解。
检索过程采用目录递归策略,每次检索的目录浏览、文件定位轨迹均被完整留存,能够清晰观测问题根源并指导检索逻辑优化。了解更多:检索机制
OpenViking 内置了记忆自迭代闭环。在每次会话结束时,开发者可以主动触发记忆提取机制,系统会异步分析任务执行结果与用户反馈,并自动更新至 User 和 Agent 的记忆目录下。
让 Agent 在与世界的交互中"越用越聪明",实现自我进化。了解更多:会话管理
OpenViking 项目采用清晰的模块化架构设计,主要目录结构如下:
OpenViking/ ├── openviking/ # 核心源代码目录 │ ├── core/ # 核心模块:客户端、引擎、文件系统等核心功能 │ ├── models/ # 模型集成:VLM 和 Embedding 模型的封装 │ ├── parse/ # 资源解析:文件解析、资源检测、OVPack 格式处理 │ ├── retrieve/ # 检索模块:语义检索、目录递归检索等 │ ├── storage/ # 存储层:向量数据库、文件系统队列、观察者模式 │ ├── session/ # 会话管理:对话历史、记忆提取等 │ ├── message/ # 消息处理:消息格式化、转换等 │ ├── prompts/ # 提示词模板:各类任务的提示词模板 │ ├── utils/ # 工具函数:配置管理、辅助工具等 │ └── bin/ # 命令行工具 ├── docs/ # 项目文档 │ ├── zh/ # 中文文档 │ ├── en/ # 英文文档 │ └── images/ # 文档图片资源 ├── examples/ # 使用示例 ├── tests/ # 测试用例 │ ├── client/ # 客户端测试 │ ├── engine/ # 引擎测试 │ ├── integration/ # 集成测试 │ ├── session/ # 会话测试 │ └── vectordb/ # 向量数据库测试 ├── src/ # C++ 扩展模块(高性能索引和存储) │ ├── common/ # 公共组件 │ ├── index/ # 索引实现 │ └── store/ # 存储实现 ├── third_party/ # 第三方依赖 ├── pyproject.toml # Python 项目配置文件 ├── setup.py # 安装脚本 ├── LICENSE # 开源协议 ├── CONTRIBUTING.md # 贡献指南 ├── AGENT.md # Agent 开发指南 └── README.md # 项目说明文档
如需了解更多详细信息,请访问我们的完整文档。
OpenViking 是由字节跳动火山引擎 Viking 团队发起并维护的开源项目。
Viking 团队专注于非结构化信息处理和智能检索领域,在上下文工程技术方面积累了丰富的商业化实践经验:
更多详细信息请查看:关于我们
OpenViking 目前还处于早期阶段,有许多需要完善和探索的地方。在此,我们诚挚地邀请每一位对 AI Agent 技术充满热情的开发者:
让我们一起,共同定义和构建 AI Agent 上下文管理的未来。旅程已经开始,期待您的加入!
本项目采用 Apache License 2.0 开源协议 - 详见 LICENSE