☰
OpenClaw Ontology 技能学习笔记:从 config.toml 骨架到知识图谱落地
2026/9/27 17:43:55 网站建设 项目流程

1. 为什么 Agent 需要 Ontology 技能:从“聊完就忘”到本地知识图谱

OpenClaw 的 Ontology 技能,本质上是给 Agent 装一套本地结构化记忆系统。它要解决的核心问题很具体:普通对话式 Agent 在会话结束后就丢失上下文,跨会话记不住人物、项目、任务之间的关系;信息以自然语言散落在历史记录里,无法做实体关联推理;你问“上次那个负责登录模块的人现在手上还有什么任务”,它只能靠模糊检索猜,答不准。

Ontology 技能的做法是把这些信息抽成实体和关系,落到本地文件里。它适合三类开发者:一是想让 Agent 长期记住项目成员、任务归属、事件安排的团队协作场景;二是需要基于历史信息做关联问答的客服或知识助手;三是想研究 Agent 记忆机制、自己动手改 schema 的开发者。整个技能没有后台常驻进程,走的是“指令触发 → 规则校验 → 文件读写 → 结果返回”的按需调用链路,对资源占用很友好。

它的触发机制依赖MEMORY.md里的规则描述,Agent 匹配到关键词后自动调用;规则约束来自memory/ontology/schema.yaml,限定哪些实体、属性、关系可以被记录;数据则写入memory/ontology/graph.jsonl。这三个文件构成技能的最小闭环,路径错一个,技能就静默失效。下面从配置骨架开始,一步步把它跑通。

2. TaoToken 前置:统一 Key 与 API 通道

在配置 OpenClaw 之前,先把模型调用通道准备好。TaoToken 提供统一的 Key 和 API 入口,OpenClaw 里所有需要调用大模型的地方都走这个通道,省去在多个供应商之间切换配置的麻烦。

你需要先拿到一个 API Key。登录官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,进入控制台后创建密钥。控制台地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,密钥管理页在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。创建后复制那串以sk-开头的 Key,后面写进 OpenClaw 的配置里。

API 的基础地址是 https://taotoken.net/api ,注意这个地址不带任何查询参数,直接作为 base_url 使用。如果你用的是兼容 OpenAI 接口的客户端,把 base_url 指向它、把 Key 填进去即可。想先验证 Key 是否可用,可以打开模型对话页面 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 发一条消息,能正常返回就说明通道没问题。

对于长期跑编码任务或 Agent 工作流的场景,可以了解 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,它在调用额度和稳定性上更适合持续性的自动化任务。接入细节和参数说明统一看文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有各语言 SDK 的示例。

3. 可复制配置:config.toml 骨架与技能文件

OpenClaw 的主配置是config.toml,模型通道和技能开关都在这里声明。先确认工作区路径,默认是~/.openclaw/workspace,如果你改过,后面所有相对路径都要跟着调整。

3.1 config.toml 模型通道骨架

在 OpenClaw 配置目录下编辑config.toml,加入模型 provider 段落。下面这段可以直接复制,把sk-你的密钥替换成上一步拿到的 Key:

[provider.taotoken] type = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "sk-你的密钥" default_model = "gpt-4o-mini" [agent] workspace = "~/.openclaw/workspace" memory_file = "MEMORY.md" [skills.ontology] enabled = true schema_path = "memory/ontology/schema.yaml" graph_path = "memory/ontology/graph.jsonl"

type用openai-compatible是因为 TaoToken 的接口兼容 OpenAI 规范,大多数客户端不用改代码。default_model按你实际可用的模型名填,不确定就先在模型对话页面确认。[skills.ontology]段落把技能打开,并显式指定 schema 和 graph 的路径,避免 Agent 去猜。

3.2 创建技能目录与 schema.yaml

进入工作区,建目录、建空数据文件、写 schema:

cd ~/.openclaw/workspace mkdir -p memory/ontology touch memory/ontology/graph.jsonl

然后生成schema.yaml。这个文件定义可记录的实体类型、必填/可选属性以及实体间关系,是技能唯一认可的规则文件:

types: person: required: ["name"] optional: ["role", "contact"] project: required: ["name"] optional: ["status", "deadline", "owner"] task: required: ["title", "status"] optional: ["assignee", "deadline", "project"] event: required: ["title", "date"] optional: ["location", "participants"] document: required: ["title"] optional: ["author", "tags"] relations: belongs_to: ["task", "project"] created_by: ["task", "person"] related_to: ["*"] deadline_for: ["task", "event"]

required里的字段缺失时,这条实体不会被写入,这是防止脏数据的第一道闸。relations定义关系两端允许的实体类型,related_to用*表示任意类型之间都能建这条关系。

3.3 MEMORY.md 触发规则

MEMORY.md告诉 Agent 什么时候自动调用技能。没有规则就只能手动触发:

touch MEMORY.md cat >> MEMORY.md << 'EOF' ## Ontology 自动调用规则 当用户提及人物、项目、任务、事件、文档相关内容时,自动调用 Ontology 技能,记录实体信息及关联关系; 查询相关信息时,优先从 Ontology 知识图谱中检索数据,保证回答精准连贯。 EOF

规则写完后重启网关,配置才会加载:

openclaw gateway restart

4. 验证请求:技能加载与图谱查询是否生效

配置完不能只看文件在不在,要实际验证技能被加载、图谱能写入和查询。

4.1 确认文件结构

ls -l memory/ontology/

正常应看到schema.yaml和graph.jsonl两个文件。如果graph.jsonl不存在,技能写入时会报错,所以这一步别跳过。

4.2 手动触发技能

在 OpenClaw 对话里输入:

/skill ontology

如果技能已加载,会返回技能已激活或类似的确认信息。没有反应说明config.toml里enabled没生效,或者网关没重启。

4.3 写入一条实体并查询

用自然语言让 Agent 记录一条信息,比如:

帮我记一下:张三是后端负责人,正在做支付重构项目,这个项目 6 月底截止。

触发规则命中后,Agent 会调用 Ontology 技能,把person:张三、project:支付重构、以及belongs_to、deadline_for等关系写入graph.jsonl。写入后查看文件:

cat memory/ontology/graph.jsonl

每行应是一条 JSON 记录,包含实体类型、属性和关系。如果文件为空,说明触发规则没匹配上,检查MEMORY.md里的关键词描述是否覆盖了“记一下”这类表达。

再问一句关联查询:

支付重构项目是谁负责的,截止时间是什么时候?

Agent 应优先从图谱检索,返回“张三负责,6 月底截止”。如果它答不上来或答得含糊,说明查询路径没走图谱,回到MEMORY.md确认“查询相关信息时优先从图谱检索”这条规则是否被读取。

4.4 用 API 直接验证通道

想单独确认 TaoToken 通道是否正常,可以用 curl 发一条最小请求:

curl https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer sk-你的密钥" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "ping"}] }'

返回带choices的 JSON 就说明 Key 和 base_url 都对。这一步和 Ontology 技能无关,但能帮你把“模型通道问题”和“技能配置问题”分开定位。

5. 本篇常见错排查

技能不触发,graph.jsonl一直是空的。先看MEMORY.md是否在config.toml指定的memory_file路径下,再看规则描述里的关键词是否覆盖了你的说法。规则写得太窄,比如只写了“记录人物”,你说“记一下项目”就不会命中。

写入报 schema 校验失败。检查实体是否缺少required字段。比如task必须有title和status,只给标题不给状态会被拒。另外relations里定义的关系两端类型要对得上,belongs_to只允许task和project,拿person去连就会失败。

路径错误导致技能静默失效。schema_path和graph_path是相对工作区解析的,如果你在config.toml里写了绝对路径但工作区被移动过,就会读不到。统一用相对路径,并确认cd ~/.openclaw/workspace后memory/ontology/真实存在。

改了配置不生效。任何对config.toml、schema.yaml、MEMORY.md的修改,都要openclaw gateway restart之后才加载。只改文件不重启,Agent 用的还是旧规则。

模型调用报 401 或超时。这属于通道问题,不是技能问题。确认 Key 没有多余空格,base_url是https://taotoken.net/api而不是带路径的地址。如果持续超时,去接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 核对当前推荐的模型名和参数。

图谱越写越乱,查询命中率下降。这是 schema 设计问题。实体类型别贪多,先把person、project、task三类跑顺,关系只保留真正会查的几条。related_to用*虽然灵活,但会让图谱变得稀疏,查询时反而不好收敛。

6. 把通道和技能串起来:下一步怎么走

Ontology 技能跑通后,你的 Agent 就有了本地结构化记忆的底座。接下来可以做的几件事:把schema.yaml按自己的业务扩展实体类型,比如加customer、ticket;在MEMORY.md里补更细的触发规则,区分“记录”和“查询”两类意图;定期备份graph.jsonl,它是纯本地文件,丢了就没了。

通道侧,如果你要长期跑编码或 Agent 自动化任务,建议把 Key 和额度规划放到 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 里统一管理,避免频繁换 Key 打断工作流。需要新建或轮换密钥时,直接去 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 操作。所有接口参数和 SDK 用法以接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 为准,遇到报错先对照文档里的错误码说明,再回来查技能配置。

最后提醒一句:graph.jsonl是逐行追加的,写入频繁后文件会变大,查询变慢时可以按时间切分归档,但别直接删行,容易破坏关系引用。先把最小闭环跑稳,再谈扩展。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询