文件系统范式
文件系统范式如何组织知识?
- 提出者: 字节跳动火山引擎开源的 OpenViking,提出独立于“扁平向量碎片”和“图谱节点”的第三种哲学;
- 核心做法: 把所有上下文——记忆、资源、技能——映射为虚拟文件系统中的目录和文件,每个条目拥有唯一 URI;
- 目录示例:
viking://
├── resources/ # 外部知识:文档、代码库、网页
├── user/memories/ # 用户记忆:偏好、习惯
└── agent/ # Agent 自身:技能、经验
├── skills/
└── memories/
- 虚拟 URI:
viking://形式上类似http://或file://,但不指向具体物理位置; - 解析: Agent 通过该地址访问知识,框架在背后决定从内存、磁盘还是远程加载;
L0/L1/L2 三层上下文如何按需加载?
| 层 | 体量 | 内容 | 用途 |
|---|---|---|---|
| L0(摘要) | 约 100 tokens | 一句话概述 | 快速判断目录相关性 |
| L1(概览) | 约 2,000 tokens | 核心信息与使用场景 | 供 Agent 规划决策 |
| L2(全文) | 完整原始内容 | 原文 | 仅在需要深入时按需加载 |
- 自动生成: 资源写入时系统自动提炼三个抽象层次,每个目录下生成
.abstract(L0)与.overview(L1)文件,形成从根到叶的层次化摘要结构; - 剪枝: 若在 L0 层即判定无关,则无需加载 L1 与 L2;大部分查询加载到 L1 即可完成决策,Token 消耗因此大幅降低;
- 类似机制: 与第二章的 Skills 渐进式披露(progressive disclosure)同构——先只暴露轻量元信息,确有需要时再逐层拉取完整内容;
为什么用 Markdown 纯文本而不是专用数据库?
- 可读可改: 用户可以直接阅读、编辑和修正 Agent 的知识;
- 可版本化: 可通过 Git 做版本控制与回滚;
- 可写入: Agent 拥有
write_file能力后,可在工作分支上自主记录和组织知识,再经审核流程合入主库; - 会话收尾: 系统可以提议把用户偏好更新写入
user/memories/,把操作记录写入agent/memories/; - 边界: 前者属于用户知识管理;后者只有经过结果评价、跨轨迹归纳和后续验证,才会成为第九章所说的经验学习,而不是把任意一次操作直接当成可靠经验;
文件系统范式的前提是什么?
- 前提: 文件之间必须建立起链接与索引;
- 纵向 vs 横向:
.abstract/.overview解决纵向的层次摘要,还需要横向的关联; - 反面: 只把知识拆成一堆彼此独立的文本文件平铺在目录里,除逐个全文扫描或向量检索外,Agent 几乎无从在相关条目间导航;知识越多,零散文件越难检索;
- 正确做法: 把知识库组织得像 Wikipedia——每个条目提及其他条目时以链接指向它,再辅以入口页与索引页,让 Agent 能顺着链接从一个概念走到相关概念;
- 等价能力: 这相当于用轻量文件链接实现了 GraphRAG 实体关系图谱的一部分导航能力,见 结构化索引;
- 模型差异: 能力强的模型写入新知识时会自发回指已有条目、顺手维护索引,不少模型只会孤立追加文件;
- 提示词要求: 必须明确要求“每新增一个条目,都要先检索并链接到相关的已有条目,并更新所在目录的索引页”,形成双向可达的引用网络,而不是任由知识退化成互不相连的孤岛;