
概述官网字节跳动火山引擎Volcengine开源GitHub32.9K Star2.5K Fork、使用PythonRust实现、专为AI Agent设计的上下文数据库。核心概念三种上下文类型Resource用户添加的知识与文档、Memory用户/Agent 的记忆、Skill可调用的能力统一用 Viking URI 组织存储架构VikingFS 做 URI 抽象底层 AGFS 存内容L0/L1/L2 文件Vector Index 存向量与元数据二者分离便于扩展检索流程支持find()单查询向量检索和search()意图分析 → 分层检索 → Rerank结果按 URI 返回可区分 memories/resources/skills核心亮点1、文件系统管理范式→终结碎片化。把记忆、资源、技能全部统一到一个虚拟文件系统里记忆可以存在不同的文件夹资源文件就像你的Word、Excel技能就是可执行的程序模块同时支持目录层级结构想怎么组织就怎么组织2、分层上下文按需加载→大幅降低Token消耗。L0/L1/L2三层结构设计L0最核心、最常用的信息常驻内存L1次重要的信息按需加载L2大量历史信息用时再读取3、目录递归检索→精准定位上下文。传统RAG只会简单的语义匹配OpenViking实现目录定位语义搜索的组合拳目录路径定位递归查找语义融合精准召回这种方式既有文件系统的精准定位又有语义搜索的灵活性检索效果直接提升了好几个档次4、可视化检索轨迹→彻底告别黑盒子。OpenViking 支持可视化目录检索轨迹Agent 从哪个目录开始递归进入了哪些子路径为什么加载某个资源检索链路如何展开5、会话自动管理→Agent越用越聪明。自动压缩会话历史包括对话内容、工具调用、资源引用、冗余信息并会提取长期记忆。用过的知识、解决过的问题自动沉淀下来。下次遇到类似场景直接调取沉淀经验适用场景问题OpenViking 的做法上下文碎片化用文件系统范式统一管理记忆、资源、技能都映射到viking://虚拟目录像管理文件一样管理上下文Token 消耗大L0/L1/L2 分层L0 摘要约 100 token 做检索L1 概览约 2k token 做决策L2 按需加载全文显著节省成本检索效果差目录递归检索先向量定位到高分区目录再在目录内递归细化结合语义与层级结构提升准确率检索不可观测检索路径对应明确 URI支持可视化检索轨迹便于调试和优化记忆难以迭代自动会话管理对话结束后自动压缩、归档并用 LLM 抽取长期记忆写入user/memories、agent/memories越用越准源码目录openviking/核心源代码目录core/核心模块客户端、引擎、文件系统等核心功能models/模型集成VLM 和 Embedding 模型的封装parse/资源解析文件解析、资源检测、0VPack 格式处理retrieve/检索模块语义检索、目录递归检索等storage/存储层向量数据库、文件系统队列、观察者模式session/会对话历史、记忆提取等message/消息处理消息格式化、转换等prompts/提示词模板各类任务的提示词模板utils/工具函数配置管理、辅助工具等bin/命令行工具部署多种方式pippip install openviking命令行curl -fsSL https://raw.githubusercontent.com/volcengine/OpenViking/main/crates/ov_cli/install.sh | bashDocker需配置2种模型VLM模型用于图像和内容理解Embedding模型用于向量化和语义检索不同的提供商有不同的配置方式需要创建配置文件~/.openviking/ov.conf{embedding:{dense:{api_base:api-endpoint,// API 服务端点地址api_key:your-api-key,// 模型服务的 API 密钥provider:provider-type,// 提供商类型volcengine 或 openaidimension: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 或 openaimodel:model-name// VLM 模型名称如 doubao-seed-1-8-251228 或 gpt-4-vision-preview}}用本地模型vllm serve meta-llama/Llama-3.1-8B-Instruct--port8000创建示例脚本example.pyimportopenvikingasov# Initialize OpenViking client with data directoryclientov.SyncOpenViking(path./data)try:# Initialize the clientclient.initialize()# Add resource (supports URL, file, or directory)add_resultclient.add_resource(pathhttps://raw.githubusercontent.com/volcengine/OpenViking/refs/heads/main/README.md)root_uriadd_result[root_uri]# Explore the resource tree structurels_resultclient.ls(root_uri)print(fDirectory structure:\n{ls_result}\n)# Use glob to find markdown filesglob_resultclient.glob(pattern**/*.md,uriroot_uri)ifglob_result[matches]:contentclient.read(glob_result[matches][0])print(fContent preview:{content[:200]}...\n)# Wait for semantic processing to completeprint(Wait for semantic processing...)client.wait_processed()# Get abstract and overview of the resourceabstractclient.abstract(root_uri)overviewclient.overview(root_uri)print(fAbstract:\n{abstract}\n\nOverview:\n{overview}\n)# Perform semantic searchresultsclient.find(what is openviking,target_uriroot_uri)print(Search results:)forrinresults.resources:print(f{r.uri}(score:{r.score:.4f}))# Close the clientclient.close()exceptExceptionase:print(fError:{e})mkdir-popenviking/datachmod-R777openviking# 生成 ROOT_API_KEYopenssl rand-hex32exportOPENAI_API_KEYsk-xxxexportOPENAI_API_BASEhttps://llmapi.xxx.com/v1exportROOT_API_KEY上面生成Keycatopenviking/ov.confEOF { server: { host: 0.0.0.0, port: 1933, root_api_key: $ROOT_API_KEY, cors_origins: [*] }, storage: { workspace: /app/data, vectordb: { name: context, backend: local }, agfs: { backend: local, port: 1833, log_level: warn } }, embedding: { max_concurrent: 10, dense: { provider: openai, api_key: $OPENAI_API_KEY, api_base: $OPENAI_API_BASE, model: text-embedding-v4, dimension: 1024, input: text, batch_size: 32 } }, vlm: { provider: openai, api_key: $OPENAI_API_KEY, api_base: $OPENAI_API_BASE, model: qwen3.5-plus, temperature: 0.0, max_retries: 2, max_concurrent: 100 }, log: { level: INFO, output: stdout } } EOFembedding 配置用于向量化vlm 配置用于摘要、L0/L1、记忆抽取图像和内容理解。这里没有配置 rerank 模型。# 运行OpenViking容器nerdctl run-d\--nameopenviking\--restartalways\-p1933:1933\-v$(pwd)/openviking/data:/app/data\-v$(pwd)/openviking/ov.conf:/app/ov.conf\ghcr.io/volcengine/openviking:v0.2.9# 删除OpenViking容器nerdctlrm-fopenviking# 验证OpenViking服务是否正常curlhttp://127.0.0.1:1933/healthCLI用户管理设置环境变量export OPENVIKING_BASE_URLhttp://10.10.10.10:1933列出 accountscurl -fsS -H X-API-Key: $ROOT_API_KEY ${OPENVIKING_BASE_URL%/}/api/v1/admin/accounts创建 accountcurl-fsS-XPOST${OPENVIKING_BASE_URL%/}/api/v1/admin/accounts\-HContent-Type: application/json\-HX-API-Key:$ROOT_API_KEY\-d{account_id:my-team,admin_user_id:my-admin}新建 user需要提供 account 下的 admin user keyexportADMIN_USER_KEY上面生成curl-fsS-XPOST${OPENVIKING_BASE_URL%/}/api/v1/admin/accounts/my-team/users\-HContent-Type: application/json\-HX-API-Key:$ADMIN_USER_KEY\-d{user_id:my-user,role:user}列出 account 下的 userscurl-fsS-HX-API-Key:$ADMIN_USER_KEY\${OPENVIKING_BASE_URL%/}/api/v1/admin/accounts/my-team/users修改 user 角色curl-fsS-XPUT${OPENVIKING_BASE_URL%/}/api/v1/admin/accounts/my-team/users/my-user/role\-HContent-Type: application/json\-HX-API-Key:$ROOT_API_KEY\-d{role:admin}重新生成用户 Key旧 Key 立刻失效用 Root 或 Admin User Keycurl-fsS-XPOST${OPENVIKING_BASE_URL%/}/api/v1/admin/accounts/my-team/users/my-user/key\-HContent-Type: application/json\-HX-API-Key:$ADMIN_USER_KEY\-d{}删除用户curl-fsS-XDELETE${OPENVIKING_BASE_URL%/}/api/v1/admin/accounts/my-team/users/my-user\-HX-API-Key:$ADMIN_USER_KEY删除整个 accountcurl-fsS-XDELETE${OPENVIKING_BASE_URL%/}/api/v1/admin/accounts/my-team\-HX-API-Key:$ROOT_API_KEY建目录curl-fsS-XPOST$OPENVIKING_BASE_URL/api/v1/fs/mkdir\-HContent-Type: application/json\-HX-API-Key:$USER_KEY\-d{uri:viking://resources/lifecycle-demo/}上传到临时目录exportFILE_PATH/tmp/ov-lifecycle.mdechoHello OpenViking lifecycle$FILE_PATHcurl-fsS-XPOST$OPENVIKING_BASE_URL/api/v1/resources/temp_upload\-HX-API-Key:$USER_KEY\-Ffile$FILE_PATH入库到上一步建的目录exportTEMP_PATH/app/data/temp/upload/upload_3c5f30d789b9439e91f16da9b22555cc.mdcurl-fsS-XPOST$OPENVIKING_BASE_URL/api/v1/resources\-HContent-Type: application/json\-HX-API-Key:$USER_KEY\-d{\temp_path\:\$TEMP_PATH\,\parent\:\viking://resources/lifecycle-demo/\,\wait\: false,\reason\:\curl lifecycle\}列目录curl-fsS-G\-HX-API-Key:$USER_KEY\--data-urlencodeuriviking://resources/lifecycle-demo/\--data-urlencoderecursivetrue\$OPENVIKING_BASE_URL/api/v1/fs/ls读全文exportFILE_URIviking://resources/lifecycle-demo/upload_3c5f30d789b9439e91f16da9b22555cc/upload_3c5f30d789b9439e91f16da9b22555cc.mdcurl-fsS-G\-HX-API-Key:$USER_KEY\--data-urlencodeuri$FILE_URI\$OPENVIKING_BASE_URL/api/v1/content/read看元信息exportFILE_URIviking://resources/lifecycle-demo/upload_3c5f30d789b9439e91f16da9b22555cc/upload_3c5f30d789b9439e91f16da9b22555cc.mdcurl-fsS-G\-HX-API-Key:$USER_KEY\--data-urlencodeuri$FILE_URI\$OPENVIKING_BASE_URL/api/v1/fs/statfind语义检索可配置rerank模型curl-fsS-XPOST$OPENVIKING_BASE_URL/api/v1/search/find\-HContent-Type: application/json\-HX-API-Key:$USER_KEY\-d{ query: Hello, target_uri: viking://resources/lifecycle-demo/, limit: 5 }grep 文本匹配curl-fsS-XPOST$OPENVIKING_BASE_URL/api/v1/search/grep\-HContent-Type: application/json\-HX-API-Key:$USER_KEY\-d{uri:viking://resources/lifecycle-demo/,pattern:Hello}search 语义、意图检索可选带 session。curl-fsS-XPOST$OPENVIKING_BASE_URL/api/v1/sessions\-HContent-Type: application/json\-HX-API-Key:$USER_KEY\-d{}# 带sessionexportSESSION_IDd46e0160-1ebc-483d-971f-32d60bb1de9acurl-fsS-XPOST$OPENVIKING_BASE_URL/api/v1/search\-HContent-Type: application/json\-HX-API-Key:$USER_KEY\-d{ query: Hello, session_id: $SESSION_ID, limit: 5 }删文件curl-fsS-XDELETE\-HX-API-Key:$USER_KEY\--get$OPENVIKING_BASE_URL/api/v1/fs\--data-urlencodeuri$FILE_URI删目录curl-fsS-XDELETE\-HX-API-Key:$USER_KEY\$OPENVIKING_BASE_URL/api/v1/fs?uriviking://resources/lifecycle-demo/recursivetrue检查目录curl-fsS-G\-HX-API-Key:$USER_KEY\--data-urlencodeuriviking://resources/\$OPENVIKING_BASE_URL/api/v1/fs/ls集成OpenClaw进入OpenClaw容器nerdctlexec-itopenclawbash关闭默认记忆后端openclaw configsetagents.defaults.memorySearch.enabledfalse--jsonopenclaw configsetmemory.qmd.includeDefaultMemoryfalse--jsonopenclaw configsethooks.internal.entries.session-memory.enabledfalse--jsonopenclaw configsetagents.defaults.compaction.memoryFlush.enabledfalse--json安装配置向导npminstall-gopenclaw-openviking-setup-helper开始配置ov-install选择 remote填写 OpenViking 服务地址和 USER_KEY。启用插件openclaw configsetplugins.slots.memory openviking重启OpenClawopenclaw gateway restart查看插件配置openclaw config get plugins.entries.openviking.config查看插件状态nodeopenclaw.mjs status|grepMemory验证集成是否成功尝试与OpenClaw对话可看到OpenViking创建相关记忆的日志nerdctl logs openviking -f 2026-03-24 10:20:59,392 - openviking.session.memory_extractor - INFO - uri viking://user/my-user/memories/events/mem_372fc569-f140-4a31-a266-6a795bf49af0.md abstract: 正在学习参考 LVM 日常运维文章作为速查手册将其作为运维工作的速查手册使用。文章内容涵盖物理卷PV、卷组VG、逻辑卷LV的管理命令以及 RAID 逻辑卷配置、扩容缩容操作等实用内容。