乐于分享
好东西不私藏

OpenClaw 进阶实战:用 Ontology 构建知识关系图谱

OpenClaw 进阶实战:用 Ontology 构建知识关系图谱
上一期我们聊了本地知识库的搭建,很多人问:文档存进去了,信息也能搜到了,但如果我想知道谁和谁有关联、哪个任务卡住了哪个项目、整个工作网的依赖关系是什么——光靠搜索和列表,还真不够。

今天就来解决这个问题。

我们要用 OpenClaw 的Ontology 技能,把零散的知识连成一张关系图谱。

一、为什么需要知识关系图谱?

传统知识库(文档、笔记、搜索)解决的是"存"和"查"的问题。但现实中的知识是网状的,不是线性的。

举个例子:

>项目 A 由张三负责,项目 B 依赖项目 A 的数据,李四在项目 B 上有一个待办任务,而李四下周要请假——项目 B 会不会延期?
这个问题涉及人、项目、任务、时间四种实体和它们之间的关系。用普通笔记记下来,你得一页一页翻;用搜索,关键词匹配不上;用知识图谱——一个查询就搞定。

二、Ontology 是什么?

Ontology 是 OpenClaw 的一个技能,它的核心思路很简单:

>万物皆实体,实体之间有关系。

三个核心概念:

概念

说明

举例

实体(Entity)
任何你想记录的对象
人、项目、任务、事件、文档 
属性(Properties)
实体的特征
姓名、状态、截止日期
关系(Relation)
实体之间的连接
"负责"、"依赖"、"属于"

用图来理解:

[张三] --负责--> [项目A] --依赖--> [项目B] --有任务--> [任务1]

[李四] --承担--> [任务1]                              截止:4月20日

有了这个图,你可以回答:

  • 项目 A 被谁负责?→ 张三
  • 项目 B 依赖什么?→ 项目 A
  • 李四在做什么?→ 任务 1(属于项目 B)
  • 任务 1 的截止日期?→ 4 月 20 日

这就是知识图谱的力量:从"信息孤岛"到"关系网络"。

三、五分钟上手:创建你的第一个图谱

第一步:初始化存储

在 OpenClaw 工作区创建 Ontology 存储目录:

mkdir-pmemory/ontology
Ontology 的数据存储在`memory/ontology/graph.jsonl`,每条记录代表一次操作(创建实体、建立关系等),采用追加写入方式,不会覆盖历史数据。

第二步:创建实体

对 AI 说:

>"创建一个 Person 实体,名字叫张三,邮箱 zhangsan@example.com"

AI 会在后台执行类似这样的操作:

{"op":"create","entity":{"id":"p_001","type":"Person","properties":{"name":"张三","email":"zhangsan@example.com"}}}

再创建一个项目:

>"创建一个 Project 实体,名字叫数据平台重构,状态 active"
{"op":"create","entity":{"id":"proj_001","type":"Project","properties":{"name":"数据平台重构","status":"active"}}}

第三步:建立关系

>"把张三和项目数据平台重构关联起来,关系是'负责'"
{"op":"relate","from":"p_001","rel":"has_owner","to":"proj_001"}

第四步:查询图谱

>"查询数据平台重构项目的负责人"
AI 遍历关系图,找到`proj_001`的`has_owner`关系指向`p_001`(张三),回答:
>数据平台重构项目的负责人是张三(zhangsan@example.com)。

四、核心类型一览

Ontology 内置了丰富的实体类型,覆盖日常场景:

👤 人员与组织

类型 

必填属性

用途

Person

 name 

记录联系人

Organization 

 name 

记录单位、部门

💼 工作管理

类型

必填属性

用途 

Project

name, status 

项目管理

 Task

 title, status

任务跟踪 

Goal

description

目标设定

📅 时间与地点

类型 

 必填属性

用途

Event 

title, start

日程安排

 Location

name 

地点记录 

📄 信息资源

类型 

必填属性

用途 

Document

title

文档管理

Note 

content

笔记记录 

🔐 安全提醒

特别注意Credential 类型——它禁止直接存储密码或密钥,只允许存储"密钥引用"(secret_ref),实际密钥应放在环境变量或密钥管理器中。

schema.yaml 中的安全约束

Credential:

required: [service,secret_ref]
forbidden_properties: [password,secret,token] 强制间接引用

五、实战案例:检察院项目管理图谱

以实际工作场景为例,构建一个数据项目管理图谱。

场景描述

  • 需要查询到全省 186 家单位的距离
  • 项目涉及多个任务、多个人员
  • 需要追踪任务依赖和完成状态

第一步:创建人员和组织

对 AI 说:

>"创建以下实体:
>1.Person:张三,郑州办公室
>2.Person:王组长,负责数据审核
>3.Organization:郑州市"

第二步:创建项目和任务

>"创建以下实体:
>1.Project:距离查询,状态 active
>2.Task:配置百度地图 API,状态 done
>3.Task:编写查询脚本,状态 done
>4.Task:生成 Excel 报告,状态 done
>5.Task:数据审核,状态 in_progress"

第三步:建立关系

>"建立以下关系:
>1.张三 负责 距离查询项目
>2.查询项目 包含 配置API、编写脚本、生成报告、数据审核四个任务
>3.数据审核任务 依赖 生成报告任务
>4.王组长 负责 数据审核任务"

第四步:查询关系

现在你可以问各种关系型问题了:

>"距离查询项目还有哪些未完成的任务?"
AI 查询所有关联任务,过滤 status ≠ done,返回:数据审核(in_progress)
>"数据审核被谁负责?它依赖什么?"
AI 沿关系图追溯:王组长负责,依赖生成 Excel 报告任务
>"整个项目的进度如何?"
AI 统计:4 个任务中 3 个已完成,1 个进行中,完成率 75%

六、进阶:约束与验证

Ontology 不只是存数据,还能约束数据,保证图谱的质量。

定义约束规则

在`memory/ontology/schema.yaml`中添加规则:
types:
Task:
required: [title,status]
status_enum: [open,in_progress,blocked,done]
任务的状态只能是这四种之一
Event:
required: [title,start]
validate:"end >= start if end exists"
事件的结束时间不能早于开始时间
relations:
has_owner:
from_types: [Project,Task]
to_types: [Person]
cardinality:many_to_one
一个项目/任务只能有一个负责人
blocks:
from_types: [Task]
to_types: [Task]
acyclic:true
不允许循环依赖(A卡住B,B又卡住A)

运行验证

python3 scripts/ontology.py validate

如果有数据违反约束(比如任务状态写成了 "pending" 而不是 "in_progress"),验证会报错。

约束的价值

  • 防止脏数据污染图谱
  • 保证关系方向的正确性
  • 检测循环依赖(项目管理中的大忌)

七、图谱可视化(脑补版)

虽然 Ontology 目前没有内置的可视化界面,但你可以用简单的方式"看到"图谱:

方法一:文本导出

>"列出项目A的所有关联实体和关系"

AI 返回:

项目A (Project, active)

├─ has_owner → 张三 (Person)

├─ has_task → 任务1 (Task, done)

├─ has_task → 任务2 (Task, in_progress)

│    └─ has_owner → 李四 (Person)

│    └─ blocks → 任务3 (Task, open)

└─ has_task → 任务3 (Task, open)

方法二:导出为 Mermaid 格式

如果你想把图谱放到文档或网页中,可以让 AI 生成 Mermaid 图表代码:

graph LR

A[项目A] -->|has_owner| B[张三]

A -->|has_task| C[任务1]

A -->|has_task| D[任务2]

D -->|has_owner| E[李四]

D -->|blocks| F[任务3]

粘贴到支持 Mermaid 的编辑器(如 Typora、Obsidian、GitHub Markdown),就能看到可视化图谱。

八、与其他技能联动

Ontology 的真正威力在于跨技能协作。

🔗 与 Cron 联动:定期更新图谱

设置每天定时检查任务状态:

>"创建一个定时任务,每天下午6点检查所有 in_progress 状态的任务,提醒我哪些即将到期"

🔗 与百度搜索联动:补充外部信息

>"在图谱中创建一个技术趋势实体,用百度搜索最新的 AI Agent 发展动态,补充到实体属性中"

🔗 与 Memory 系统联动:同步长期记忆

>"把 MEMORY.md 中的项目信息同步到 Ontology 图谱中,建立人物和项目的关系"

九、最佳实践

✅ 推荐做法

  • 从小做起:先建 3-5 个核心实体,验证流程走通后再扩展
  • 统一命名:实体 ID 用有意义的格式(如 proj_001task_api_config
  • 定期验证:每周运行一次 validate,保持图谱健康
  • 追加不覆盖:修改实体时追加新记录,不删除旧记录,保留历史
  • 关系要双向:如果 A 依赖 B,考虑同时记录 B 被 A 依赖(方便反向查询)

❌ 避免踩坑

  • 不要在图谱中存储密码和密钥(用 secret_ref 间接引用)
  • 不要创建过于复杂的关系网络(单项目关系超过 20 条就该拆分)
  • 不要忽略约束验证(脏数据比没数据更危险)
  • 不要把图谱当数据库用(超大场景建议迁移到 SQLite)

十、总结

今天我们用 Ontology 技能把零散的知识连成了关系图谱

能力

传统笔记 

Ontology 图谱

存储信息 

✅ 

✅ 

 搜索信息

✅ 

✅ 

关系查询

❌ 

✅ 

依赖追踪

❌ 

✅ 

 约束验证 

❌ 

✅ 

循环检测

❌ 

✅ 

跨技能协作 

有限 

三步开始你的知识图谱:
1.`mkdir -p memory/ontology`—— 创建存储目录
2.创建你的第一批实体(人、项目)—— 告诉 AI 就行
3.用关系把它们连起来 —— 问 AI 任何关系型问题
从今天开始,你的知识不再是一堆散落的文档,而是一张有生命的网络。
下期预告:《OpenClaw 技能开发实战:从零发布你的第一个 ClawHub 技能》

觉得有用?关注公众号「私享斋」,更多实操文章持续更新。