安爸-超级家庭

遇见OpenViking:一个开源的上下文数据库,为类似OpenClaw的人工智能代理系统提供基于文件系统的内存和检索功能。

安爸 97 阅读

OpenViking 是由 Volcengine 开发的开源 AI 代理上下文数据库。此项目围绕一个简单的架构概念构建:代理系统不应将上下文视为文本块的扁平集合。相反,OpenViking 通过文件系统范式组织上下文,旨在通过统一的分层结构来管理内存、资源和技能。在项目的自身框架中,这是对代理开发中五个反复出现的问题的回应:上下文碎片化、长时间运行任务期间上下文量的增加、扁平 RAG 管道中的检索质量弱、检索行为的可观察性差和有限的内存迭代(超出聊天记录)。

上下文管理的虚拟文件系统

设计的中心是一个在 viking:// 协议下暴露的虚拟文件系统。OpenViking 将不同的上下文类型映射到目录中,包括 资源用户代理。在这些顶级目录下,代理可以访问项目文件、用户偏好、任务记忆、技能和指令。这是一个从‘扁平文本片段’转向由 URI 识别的抽象文件系统对象的转变。预期的益处是,代理可以使用标准浏览式操作,如 lsfind,以更确定性的方式定位信息,而不仅仅依赖于扁平向量索引上的相似性搜索。

目录递归检索的工作方式

这一架构选择很重要,因为 OpenViking 并不想去除语义检索。它是试图约束和结构化它。项目的检索管道首先使用向量检索来识别一个高分的目录,然后在其中执行第二次检索,如果需要,递归地深入到子目录。README 中将这称为 目录递归检索。基本思想是检索应同时保留局部相关性和全局上下文结构:系统不仅应找到语义相似的片段,还应理解该片段所在的目录上下文。这对于跨越存储库、文档和累积记忆的代理工作负载,比标准的单次 RAG 更是一个更明确的检索模型。

分层上下文加载以减少令牌开销

OpenViking 还添加了一个用于 分层上下文加载的内置机制。当上下文被写入时,系统自动将其处理成三层。L0 是一个抽象的,描述为用于快速检索和识别的一句总结。L1 是一个概述,包含核心信息和用于计划的用例。L2 是原文的全内容,仅在必要时才进行深度阅读。README 文件中的示例显示了与目录相关联的 .abstract.overview 文件,而底层文档作为详细内容仍可用。此设计旨在通过让代理首先加载更高层次的摘要,并将完整上下文推迟到实际需要时,来减少提示膨胀。

检索可观察性和调试

第二个重要的系统特性是可观察性。OpenViking 存储检索期间目录浏览和文件定位的轨迹。README 文件将此描述为 可视化的检索轨迹。在实践中,这意味着开发人员可以检查系统是如何导航层次结构来检索上下文的。这很有用,因为许多代理故障并不是在狭义上的模型故障;它们是上下文路由故障。如果检索了错误的记忆、文档或技能,即使模型本身有能力,模型仍可能生成较差的回答。OpenViking 的方法使得检索路径可见,这为开发人员提供了一些具体的内容来调试,而不是将上下文选择作为一个黑盒。

会话记忆和自我迭代

该项目还将内存管理扩展到对话日志之外。OpenViking 包含 自动会话管理和一个内置的 记忆自我迭代循环。根据 README 文件,在会话结束时,开发人员可以触发记忆提取,系统将分析任务执行结果和用户反馈,然后更新用户和代理的内存目录。预期输出包括用户偏好记忆和代理端操作经验,如工具使用模式和执行提示。这使得 OpenViking 更接近于代理的持久上下文子层,而不仅仅是用于检索的标准向量数据库。

报告的 OpenClaw 评估结果

README 文件还包括一个针对位于 LoCoMo10 长距离对话数据集上的 OpenClaw 记忆插件的评估部分。设置在去除没有任何地面实值的分类 5 样本后使用 1,540 个案例,报告了 OpenViking 版本 0.1.18,并使用 seed-2.0-code 作为模型。在报告的结果中,OpenClaw(memory-core) 在 24,611,530 个输入令牌时达到 35.65% 的任务完成率,而 OpenClaw + OpenViking 插件(-memory-core) 在 4,264,396 个输入令牌时达到 52.08%,OpenClaw + OpenViking 插件(+memory-core) 在 2,099,622 个输入令牌时达到 51.23%。这些是项目报告的结果,而不是独立的第三方基准测试,但它们与系统的设计目标相符:在减少不必要的令牌使用的同时改进检索结构。

部署细节

文档中列出的先决条件是 Python 3.10+Go 1.22+GCC 9+ 或 Clang 11+,支持 Linux、macOS 和 Windows。通过 pip install openviking --upgrade --force-reinstall 可以进行安装,并且有一个名为 ov_cli 的可选 Rust 命令行界面,可以通过脚本来安装或使用 Cargo 来构建。OpenViking 实现需要两个模型能力:一个 VLM 模型 用于图像和内容理解,以及一个 嵌入模型 用于向量化和语义检索。支持的 VLM 访问路径包括 VolcengineOpenAILiteLLM,而示例服务器配置包括通过 text-embedding-3-large 的 OpenAI 嵌入和一个使用 gpt-4-vision-preview 的 OpenAI VLM 示例。

要点

  1. OpenViking 将代理上下文视为文件系统,在统一的分层结构下统一了 内存、资源和技能,而不是扁平的 RAG 风格存储。
  2. 其检索管道是递归和目录感知的,结合 目录定位和语义搜索 以提高上下文精度。
  3. 它使用 L0/L1/L2 分层上下文加载,因此代理可以首先阅读摘要,然后仅在实际需要时加载完整内容,以减少令牌使用。
  4. OpenViking 暴露检索轨迹,这使得上下文选择比标准的黑盒 RAG 工作流更易观察和调试。
  5. 它还支持基于会话的内存迭代,从对话、工具调用来和任务执行历史中提取长期记忆。
分享到:

扫描二维码,在手机上阅读
🤞 分享