我选了 Oxigraph 做 AI 的大脑,然后整个系统开挂了
先坦白:我选 Oxigraph,一开始是因为它太“Rust”了。Gliding Horse 整个系统都是用 Rust 写的。如果选 Neo4j,就得配 Java 环境;选 PostgreSQL 加 pgvector,又得多部署一个服务。Oxigraph 是 Rust 原生库,直接编译进二进制文件,一行全搞定。没有外部依赖,没有网络开销,没有“在我机器上能跑”的破事。但真正让我惊艳的,是它和JSON
我选了 Oxigraph 做 AI 的大脑,然后整个系统开挂了
你有没有遇到过这种绝望:
Agent 跑了两小时,聊了几十轮,突然就忘了最初的需求;一个 Skill 的参数名换了,所有调用它的 Agent 全部炸锅;想查“当初为什么选了 JWT 认证”,结果翻了半天聊天记录。
这些问题的根源都是:数据散落在各处,没有统一的大脑。
我的解决方案是——给 Agent 装一个叫 Oxigraph 的图数据库,然后让它和 JSON-LD 组成“统一地址总线”。这一装,整个系统的智商直接上了一个台阶。
今天就来聊聊这个“图数据库 + 语义总线”的邪门组合。
一、为什么是 Oxigraph 而不是 Neo4j、不是 PostgreSQL?
先坦白:我选 Oxigraph,一开始是因为它太“Rust”了。
Gliding Horse 整个系统都是用 Rust 写的。如果选 Neo4j,就得配 Java 环境;选 PostgreSQL 加 pgvector,又得多部署一个服务。Oxigraph 是 Rust 原生库,直接编译进二进制文件,一行 cargo build 全搞定。 没有外部依赖,没有网络开销,没有“在我机器上能跑”的破事。
但真正让我惊艳的,是它和 JSON-LD 的化学反应。
二、JSON-LD + Oxigraph = 天然绝配
JSON-LD 是什么?简单说,就是给 JSON 加上语义,每个字段、每个值都对应一个全球唯一的 IRI(类似网址)。
比如一个 Skill 的参数 input_file,在 JSON-LD 里会被映射成 https://agent-os.com/skill#sourceDataURI。这样一来,不管别的 Skill 叫 source_url 还是 data_path,只要它们都指向同一个 IRI,系统就知道它们是同一回事。
而 Oxigraph 是 RDF 图数据库,RDF 的底层就是“主语-谓语-宾语”三元组——和 JSON-LD 展开后的结构一模一样。
举个栗子:
{
"@id": "skill:python-analysis",
"@type": "skill:AtomicSkill",
"skill:name": "Python 数据分析"
}
JSON-LD 引擎把它展开后,会变成三条三元组:
<skill:python-analysis> <rdf:type> <skill:AtomicSkill>
<skill:python-analysis> <skill:name> "Python 数据分析"
然后 Oxigraph 直接吞下这三条三元组,存进图里。完全不需要任何中间转换层。
这种“零摩擦”的配合,让我可以把整个系统的所有数据——提示词、Skill 定义、对话记忆、任务元数据、审计日志——全部用 JSON-LD 建模,然后一股脑倒进 Oxigraph。
三、统一地址总线:给所有数据安个“家”
传统 AI 系统里,数据就像流浪猫:没有固定地址,靠代码里的变量名四处碰运气。
在我的系统里,任何数据生下来就有唯一的 IRI。比如:
- 一个任务:
task:sales-analysis-2026 - 一个 Skill:
skill:python-analysis - 一段对话记忆:
memory:session-042/block-017
这些 IRI 就是“地址总线”。Oxigraph 就是存储这些地址的门牌号数据库。
带来的第一个魔法:按需加载,Token 暴降。
LLM 的上下文窗口里,只需要存摘要和 IRI 引用。比如:
可用技能:[skill:python-analysis],[skill:forecasting]
当前任务:task:sales-analysis-2026
历史记忆摘要:我们决定用 JWT 认证,有效期 24 小时
当 LLM 需要某个细节时,直接用内置工具沿 IRI 去 Oxigraph 里查。相当于把 LLM 的“工作记忆”无限扩展了,而 Token 消耗几乎不变。
第二个魔法:多 Agent 共享黑板,绝不冲突。
多个 Agent 同时读写 L2 黑板,这个黑板就是 Oxigraph 的内存模式。Agent A 写入 task:001 status "done",Agent B 立刻就能读到。更骚的是,我还给每个节点加了 MESI 状态标记(对,就是 CPU 缓存一致性协议那套)。这样 Agent A 修改一个节点时,系统会自动通知其他 Agent“这个数据过期了,赶紧重读”。
第三个魔法:图查询比关系型快得多。
想查“某 Skill 的所有前置依赖”?在 SQL 里要 JOIN 好几次,在 Oxigraph 里就一行 SPARQL:
SELECT ?dep WHERE {
skill:rust-jwt-auth skill:requiresDirect ?dep .
}
更重要的是,可以利用属性路径做递归遍历,比如“这个 Skill 依赖的所有 Skill(不限深度)”:
SELECT ?dep WHERE {
skill:rust-jwt-auth skill:requiresDirect* ?dep .
}
这种递归查询在关系型数据库里几乎是噩梦,在 Oxigraph 里却轻描淡写。
四、记忆系统 + Oxigraph:让 Agent 拥有“海马体”
神经科学里,海马体负责把短期记忆转化为长期记忆。我的记忆系统里,Oxigraph 就是海马体。
- L1 短期记忆:LLM 上下文窗口里的摘要和 IRI 引用
- L2 工作记忆:Oxigraph 内存模式,存活跃任务的中间结果
- L3 记忆提取:用 SPARQL CONSTRUCT 从 L0 把相关记忆“投影”到 L2
- L0 长期记忆:Oxigraph 持久化模式,存所有历史数据和知识
这套设计的好处是:Agent 永远不会“失忆”。 哪怕上下文窗口只有 2K Token,它也能通过 L3 投影随时调出任何历史细节。
而且 Oxigraph 支持 Named Graphs(命名图),我可以把不同 Agent 的记忆、不同任务的产出、不同版本的 Skill 分开存储,互不干扰,又能联合查询。这为后面的多 Agent 联邦架构铺平了道路。
五、架构收益总结:图数据库给 AI 带来的三个质变
- 从“数据孤岛”到“数据联邦”:所有数据都有 IRI,都能通过 SPARQL 互相查询。Skill 能“发现”自己需要什么前置技能,Agent 能“回忆”起历史上类似的任务是怎么做的。
- 从“全量注入”到“按需加载”:LLM 上下文里只放摘要和 IRI,细节在 Oxigraph 里随时可取。Token 消耗从 O(n) 变成 O(1)。
- 从“事后查证”到“实时可审计”:任何决策、任何产出都有 IRI,顺着图就能看到整个推理链。当系统出问题,不再是“不知道哪一步错了”,而是“秒级定位”。
六、最后说句人话
选 Oxigraph,不是因为它最流行,而是因为它和 JSON-LD 天生一对,能用 Rust 一行代码嵌入,能让 Agent 的记忆像人脑一样工作。
如果你也在做 AI Agent,或者对知识图谱感兴趣,记住这句话:“让你的数据有地址,让你的 Agent 有记忆,让你的系统有脑子。”
我这套系统叫 Gliding Horse(流马),所有代码都在 GitHub 上:https://github.com/doiito/gliding_horse
之前还写过为什么选 JSON-LD 以及为什么抄 CPU 缓存架构,感兴趣可以去翻翻。今天这篇是“Oxigraph 封神之路”,希望能帮你少走点弯路。
更多推荐


所有评论(0)