OpenViking Service 将 Agent 的上下文管理,从“扁平知识召回”升级为“可导航、可追溯、可演化的上下文文件系统”。
说明
OpenViking Service 的目标是把 Agent 所需要的知识、经验和能力统一组织为一套可读、可管、可检索的文件系统。
这篇文档主要回答以下三个问题:
传统 RAG 更像一个扁平的“知识碎片仓库”:文档被切分、向量化、召回,但其原有层级、目录关系、来源边界和演化过程往往被弱化。对于 AI Agent 来说,这会带来几个明显问题:
OpenViking Service 的核心思路是把上下文当作文件系统来管理,这意味着:
OpenViking Service 通过构建一套严谨的文件系统组织规范,实现了上下文的“统一治理”与“语义保留”。 该系统采用标准的 URI 定位符作为核心逻辑架构:
viking://{scope}/{path}
在 Scope(顶层命名空间) 层面,为不同生命周期的信息划分了明确的边界,如承载外部知识的 resources、记录用户画像的 user、存储工具技能的 agent 以及管理当前对话流的 session,这种划分确保了资源、记忆与技能在逻辑上的高度有序:
viking:// ├── resources/ # 外部知识与规则 ├── user/ # 用户相关的长期认知 ├── agent/ # Agent 的技能与经验 └── session/ # 会话过程中的临时与归档上下文
在 Path(具体路径) 层面,借鉴本地文件系统的特征,将路径视为稳定的上下文标识,将目录作为语义边界,将文件定义为具体的内容或能力单元,并引入包含元数据的特殊文件实现低成本感知,配合标准化的文件操作实现自动接入。OpenViking Service 通过保留项目、模块与用户偏好之间的层级关系而非将其抹平,Agent 能够像在本地磁盘操作一样,沿着目录树进行逐层推理、按需定位与精准调用,从而在推理过程中获得信息透明度与掌控力。
抽象对象 | 在 OpenViking Service 中的含义 | 对 Agent 的价值 |
|---|---|---|
路径 | 上下文的稳定标识 | 可引用、可追溯、可缓存 |
目录 | 语义边界和组织单元 | 便于逐层定位与导航 |
文件 | 具体内容或能力定义 | 便于按需读取详情 |
特殊文件 | 摘要、概览、关系、元数据 | 便于低成本理解上下文 |
文件操作 | 增删改查、移动、搜索 | 便于标准化接入与自动化处理 |
OpenViking Service 中,一个资源目录可以表示一个项目、一套文档或一个主题:
viking://resources/payments/ ├── .abstract.md ├── .overview.md ├── .relations.json ├── prd/ ├── api/ └── faq/
这里的 payments/prd; payments/api 目录本身携带了明确的业务语义,当 Agent 当检索命中某个子文件时,能知道它在整体路径中的明确位置,通过对 L1 的快速阅读,判断是否值得展开读取。当目录之间存在关联关系时,系统可以据此递归扩展相关上下文:
L0 / .abstract.md:用一句话到一小段话回答“这是什么”L1 / .overview.md:回答“里面大概有什么、重点是什么、建议先看哪里”L2 / 原始文件和子目录:提供完整详情,供真正需要时再深入读取普通文件夹中,Agent 实际上只能“看到文件名”,很难快速理解这个目录的主题、重点和阅读路径。例如:
users/ payments/ ├── prd_v3_final.md ├── openapi.yaml ├── refund_rule.md └── faq.md
因此,普通文件夹解决的只是“文件放在哪里”,而 OpenViking Service 的虚拟文件系统解决的是“这个目录在说什么,以及应该怎么读”。
文件系统范式除了能够管理静态知识,也适合承载会不断变化的动态上下文。OpenViking Service 的“自迭代”意味着当目录下的内容发生变化时(例如新增文档、补充记忆、沉淀技能经验),该目录对应的语义层也会随之自动更新:
L0 / .abstract.md:目录的最新摘要L1 / .overview.md:目录的结构概览和阅读路径新增资源内容进入系统后,OpenViking Service 会优先按照目录语义把它放到对应位置,例如:
用户上传支付相关文档前 viking://resources/payments/ ├── .abstract.md ├── .overview.md ├── prd/ └── api/
如果这时用户又上传了一份《退款处理手册》,系统会把它组织到合适的目录中,例如:
用户上传支付相关文档后 viking://resources/payments/ ├── .abstract.md ├── .overview.md ├── prd/ ├── api/ └── refund/ └── refund-handbook.md
此时, payments/ 这个目录的整体语义发生了更新:除了“支付需求和接口”目录,现在还包含“退款处理”新的主题,因此该目录的摘要、概览、阅读路径都应该同步变化,这也是 OpenViking Service 支持“自迭代”的关键特征:
新增退款手册之前,payments/.abstract.md 是:
# payments 这是一个支付系统知识目录,包含支付产品需求和接口定义。
新增 refund/refund-handbook.md 之后,目录级 L0 会自动更新为更符合当前内容状态的摘要:
# payments 这是一个支付系统知识目录,包含支付产品需求、接口定义以及退款处理相关说明。
同样,payments/.overview.md 也会随之更新。更新前它只描述 prd/ 和 api/:
# Payments Overview ## 主要内容 - `prd/`:支付流程和业务需求 - `api/`:支付相关接口定义
更新后,它会把新加入的目录和新的阅读路径一起纳入:
# Payments Overview ## 主要内容 - `prd/`:支付流程和业务需求 - `api/`:支付相关接口定义 - `refund/`:退款处理流程、规则和异常说明 ## 建议阅读路径 - 如果问题与支付接口有关,优先查看 `api/` - 如果问题与退款规则有关,优先查看 `refund/`
目录对应的 L0/L1 会自动重算,使目录本身也同步获得新的语义表达。
例如,用户最开始只有一条编码偏好:
viking://user/memories/preferences/ ├── .abstract.md ├── .overview.md └── coding-style.md
后续 Agent 又从会话中提取出“回复偏好”“语言偏好”两类新记忆后,目录会继续增长:
viking://user/memories/preferences/ ├── .abstract.md ├── .overview.md ├── coding-style.md ├── response-style.md └── language-preference.md
这时更新的不只是目录中文件数量,preferences/ 目录对应的语义层也会发生变化:
L0 会从“用户有编码风格偏好”变成“用户有编码、回复和语言偏好”L1 会开始体现这些偏好的分类和重点,帮助 Agent 在回答前快速知道应该优先遵循哪些偏好因此,OpenViking Service 的“自迭代”是持续地生长在一套可遍历、可检索、可管理,并且会自动更新语义层的上下文树上。
在 OpenViking Service 中,所有上下文被统一抽象为三种基本类型:Resource、Memory 和 Skill。这种分类方式旨在映射人类的认知模式,并为 Agent 提供结构化的信息输入。
类型 | 主要用途 | 生命周期 | 主动性 |
|---|---|---|---|
Resource (资源) | 外部知识与规则 | 长期,相对静态 | 由用户主动添加 |
Memory (记忆) | Agent 的个性化认知与经验 | 长期,动态更新 | 由 Agent 自动记录/学习 |
Skill (技能) | 可被 Agent 调用的能力 | 长期,相对静态 | 由 Agent 按需调用 |
资源是您为 Agent 提供或引用的外部知识,例如 API 文档、代码仓库、产品手册等。它们是 Agent 回答特定领域问题的知识基础。
支持的格式
格式 | 扩展名 | 处理方式 |
|---|---|---|
| 文本和图像提取 | |
Markdown |
| 原生支持 |
HTML |
| 清洗后文本提取 |
纯文本 |
| 直接导入 |
JSON/YAML |
| 结构化解析 |
代码 |
| 语法感知解析 |
图像 |
| VLM 描述 |
文档 |
| 文本提取 |
飞书/Lark | URL( | 云端文档解析( |
记忆是 Agent 在与你或环境的交互中学习并沉淀下来的知识,它塑造了 Agent 的“个性”和“经验”。记忆分为用户记忆和 Agent 自身记忆,并进一步细分为 8 种具体类别,使其具备更精细化的管理能力。
记忆分类 | 归属 | 说明 | 存储位置 (URI) |
|---|---|---|---|
| User | 用户的核心身份属性,如职业、角色。 |
|
| User | 用户的偏好设定,如沟通风格、代码格式。 |
|
| User | 与用户相关的实体,如人物、项目、概念。 |
|
| User | 用户经历的关键事件、决策或里程碑。 |
|
| Agent | Agent 学习到的具体“问题-解决方案”案例。 |
|
| Agent | Agent 总结的可复用流程或方法论。 |
|
| Agent | Agent 对某个工具的使用经验与最佳实践。 |
|
| Agent | Agent 对某个技能的执行经验与工作流策略。 |
|
memories 目录,并查看不同类别的记忆文件。技能是 Agent 可以调用的、用于完成特定任务的能力封装,例如一个用于“查询天气”的 API 调用或一个用于“代码评审”的脚本。
Memory 中,可被 Agent 主动决策和调用。skills 目录,查看已注册的所有技能。为了在信息完整性与调用成本之间取得最佳平衡,OpenViking Service 将所有上下文信息自动处理为三个层级:L0 (摘要)、L1 (概览) 和 L2 (详情)。这使得 Agent 可以按需、渐进式地加载信息。
层级 | 名称 | 典型 Token 规模 | 核心用途 |
|---|---|---|---|
L0 | 摘要 (Abstract) | ~100 tokens | 用于向量搜索和快速相关性判断。 |
L1 | 概览 (Overview) | ~1k-2k tokens | 用于 Rerank 精排和内容导航,帮助 Agent 理解上下文结构。 |
L2 | 详情 (Details) | 无限制 | 包含了完整的原始内容,供 Agent 在确有必要时深入读取。 |
在实际应用中,Agent 应遵循以下策略来高效利用分层上下文:
场景 | 推荐读取层级 | 理由 |
|---|---|---|
初步探索与筛选 | L0 | 使用极低的 Token 成本,通过向量检索快速从海量信息中筛选出高度相关的候选项。 |
决策与规划 | L1 | 读取候选项的 L1 概览,理解其内部结构和核心要点,判断是否需要深入,并规划下一步行动。 |
执行与内容生成 | L2 | 仅在确认需要完整信息时,才加载 L2 的原始详情,以完成最终任务,如代码生成、报告撰写。 |
通过这种“先看摘要、再读概览、最后查详情”的渐进式信息获取模式,Agent 可以在严格的 Token 预算内,实现信息利用效率的最大化。