我选了 Oxigraph 做 AI 的大脑,然后整个系统开挂了

我选了 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 展开后的结构一模一样。

举个栗子:

json 复制代码
{
  "@id": "skill:python-analysis",
  "@type": "skill:AtomicSkill",
  "skill:name": "Python 数据分析"
}

JSON-LD 引擎把它展开后,会变成三条三元组:

xml 复制代码
<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-analysisskill: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:

sparql 复制代码
SELECT ?dep WHERE {
  skill:rust-jwt-auth skill:requiresDirect ?dep .
}

更重要的是,可以利用属性路径做递归遍历,比如"这个 Skill 依赖的所有 Skill(不限深度)":

sparql 复制代码
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 带来的三个质变

  1. 从"数据孤岛"到"数据联邦":所有数据都有 IRI,都能通过 SPARQL 互相查询。Skill 能"发现"自己需要什么前置技能,Agent 能"回忆"起历史上类似的任务是怎么做的。
  2. 从"全量注入"到"按需加载":LLM 上下文里只放摘要和 IRI,细节在 Oxigraph 里随时可取。Token 消耗从 O(n) 变成 O(1)。
  3. 从"事后查证"到"实时可审计":任何决策、任何产出都有 IRI,顺着图就能看到整个推理链。当系统出问题,不再是"不知道哪一步错了",而是"秒级定位"。

六、最后说句人话

选 Oxigraph,不是因为它最流行,而是因为它和 JSON-LD 天生一对,能用 Rust 一行代码嵌入,能让 Agent 的记忆像人脑一样工作。

如果你也在做 AI Agent,或者对知识图谱感兴趣,记住这句话:"让你的数据有地址,让你的 Agent 有记忆,让你的系统有脑子。"

我这套系统叫 Gliding Horse(流马) ,所有代码都在 GitHub 上:github.com/doiito/glid...

之前还写过为什么选 JSON-LD 以及为什么抄 CPU 缓存架构,感兴趣可以去翻翻。今天这篇是"Oxigraph 封神之路",希望能帮你少走点弯路。

相关推荐
能不能静下心来看8 分钟前
从 RAG 到 Agent:跑通两个 Demo 后,我终于分清了这两个词
agent
ZGi.ai15 分钟前
知识库权限变了,怎样避免答错?
agent·权限管理·知识库·工作流·zgi·客服运营
大模型真好玩37 分钟前
DeepSeek Harness 入门很简单(四)——DeepSeek Harness接入插件
人工智能·agent·deepseek
掰头战士1 小时前
MCP、Skill、Plugin,都是给agent拓展能力,到底有何区别?
typescript·llm·agent
嘟嘟嘟95272 小时前
AI Agent 的边缘困境
人工智能·架构·agent
HYDtomako2 小时前
Agent checkpoint设计
ai·agent·checkpoint·claude code
梦在远山后3 小时前
从需求到架构:我的企业研发 Agent 整体设计
langchain·agent
DigitalOcean3 小时前
Kimi K3 + Claude:AI Agent 多模型路由实战
llm·agent
掰头战士3 小时前
聊聊 Function Calling,你的模型是否答非所问?
前端·typescript·agent
十正4 小时前
把表变成模型够得着的句柄
人工智能·ai·agent