知识图谱技能

以JSON持久化存储结构化知识,支持查询、合并、可视化及参数配置,优化知识图谱管理与自动化工作流程。

天轰穿

@thcjp

Install

$ openclaw skills install @thcjp/knowledge-graph-skill

功能说明: 本技能涵盖 自动化配置和灵活的参数设置、工作流程和效率、时使用、化配置和灵活的参数设置 等核心能力。

知识图谱技能

输入参数

参数名类型必填说明
inputstring知识图谱技能处理的输入数据或指令
optionsobject附加配置选项,如模式选择、格式偏好等
callback_urlstring异步处理完成后的回调通知URL

专业版增强能力

能力免费版付费版
基础功能支持支持
知识图谱技能支持查询不支持支持
知识图谱技能可视化与配置不支持支持
高清分辨率与无损输出不支持支持
批量生成与风格预设不支持支持
自定义模型微调不支持支持

首次安装

node (请参考skill目录中的脚本文件) [--workspace /path/to/workspace] [--platform agent]

自动检测平台并修补助手指令文件,注入知识图谱指令和图摘要。操作幂等,可重复执行.

KGML格式参考

#KGML v2 | <count>e <count>r | depth:<N> | <date>
[category]
Label(Alias):type — attr1,attr2
  ChildLabel(CA):type — attrs    ← 缩进 = 父>子
%rels
A>verb>B C>verb>D                ← 跨分支关系(使用别名)
%vault key1,key2                 ← 保管库键名(不含值)

前置条件

运行环境

  • Agent平台: 支持SKILL.md的任意AI Agent(Claude Code / Cursor / Codex / Gemini CLI等)
  • 操作系统: Windows / macOS / Linux

依赖项

依赖项类型是否必需获取方式
LLM APIAPI必需由Agent内置LLM提供

API Key 配置

需要配置对应API Key,详见上文环境配置章节

可用性分类

  • 分类: MD+EXEC()

API Key配置方式:

export API_KEY="${API_KEY:?请设置环境变量}"

配置后需重启会话或开启新终端生效。API Key应妥善保管,避免泄露到版本控制系统.

能力矩阵

  • KGML格式知识表示: 以 #KGML v2 头部声明实体数和关系数,通过缩进表示父子层级,%rels 标记跨分支关系,%vault 标注密钥键名
  • 高级查询命令: 支持 children/type/cat/orphans/stats/recent/timeline/changed/uncertain 等查询,覆盖子节点、类型、分类、孤立实体、统计、时间线、变更和低置信度实体
  • 实体合并: 通过 merge.mjs --mode absorb|nest 合并相似实体,absorb模式吸收源实体属性,nest模式将源实体嵌套为目标实体子节点
  • 密钥保管库: 使用 vault.mjs set/get/list/del 管理加密密钥,密钥值永不打印到对话或日志,仅通过 get 管道传递
  • 深度启发式提取: 通过 depth-check.mjs 评估知识项复杂度,得分 ≥ 4 时提取所有命名组织、事件、策略和交叉关系
  • 知识图谱可视化: 通过 visualize.mjs 生成自包含离线HTML,父边渲染为蓝色虚线箭头(60%不透明度),常规边为红色实线箭头
  • 配置管理: 通过 config.mjs get/set/reset 管理 tokenBudget(5000)、maxAttrLen(40)、minEntities(30)、levenshteinThreshold(2)等参数
  • 跨助手只读访问: 通过 reader.mjscreateReader()export.mjs --format json 提供只读访问,其他助手无写入权限
  • 记忆导入: 通过 import-memory.mjs --apply 以置信度 0.5 导入记忆,使用 query.mjs uncertain 审查自动导入的实体
  • 知识整合: 当实体数 > 80 时运行 consolidate.mjs 整合,自动嵌套单关系孤儿、建议相似标签合并、修剪空属性

高级查询命令(补充)

node (请参考skill目录中的脚本文件) children <id>      # 直接子节点
node (请参考skill目录中的脚本文件) type <type>         # 指定类型的所有实体
node (请参考skill目录中的脚本文件) cat <category>      # 分类下所有实体
node (请参考skill目录中的脚本文件) orphans             # 未链接的孤立实体
node (请参考skill目录中的脚本文件) stats               # 图谱统计
node (请参考skill目录中的脚本文件) recent [--days 7]   # 最近创建/更新的实体
node (请参考skill目录中的脚本文件) timeline [--from YYYY-MM-DD] [--to YYYY-MM-DD]
node (请参考skill目录中的脚本文件) changed             # 创建后修改过的实体
node (请参考skill目录中的脚本文件) uncertain           # 置信度 < 0.5 的实体

实体合并(补充)

node (请参考skill目录中的脚本文件) --target <id> --source <id> --mode absorb|nest
  • absorb: 源实体属性合并到目标实体,源实体删除
  • nest: 源实体成为目标实体的子节点,保留独立属性

保管库(密钥)

node (请参考skill目录中的脚本文件) set <key> <value> --note "description"
node (请参考skill目录中的脚本文件) get <key>          # 原始值(用于管道传递)
node (请参考skill目录中的脚本文件) list               # 仅显示键名
node (请参考skill目录中的脚本文件) del <key>

深度启发式

添加复杂知识项(文章、论文、报告、系统描述)前,先评估复杂度:

node (请参考skill目录中的脚本文件) "粘贴文本或摘要"
echo "article text" | node (请参考skill目录中的脚本文件)
node (请参考skill目录中的脚本文件) --file /path/to/article.txt
node (请参考skill目录中的脚本文件) --json    # 机器可读输出

关键规则: 复杂内容永不在2层停止。若得分 ≥ 4,提取所有命名组织、事件、策略和交叉关系,而非仅顶层主题.

可视化

node (请参考skill目录中的脚本文件)                # → data/kg-viz.html
node (请参考skill目录中的脚本文件) --output /tmp/graph.html

始终使用此脚本,不要编写自定义HTML。输出自包含、离线、无CDN依赖. 父边渲染为蓝色虚线箭头(60%不透明度)。常规边为红色实线箭头.

配置

所有设置有合理默认值。仅覆盖需要的项,配置仅存储变更.

node (请参考skill目录中的脚本文件)                       # 列出所有设置及当前值
node (请参考skill目录中的脚本文件) get <key>              # 获取值(如 summary.tokenBudget)
node (请参考skill目录中的脚本文件) set <key> <value>      # 设置值
node (请参考skill目录中的脚本文件) reset <key>            # 重置单个键到默认
node (请参考skill目录中的脚本文件) reset --all            # 重置全部
node (请参考skill目录中的脚本文件) --json                 # 完整配置为JSON

可用设置

区块默认值说明
summarytokenBudget5000kg-summary.md最大token数
maxAttrLen40属性值最大字符数
maxPerRoot4每个根子树显示的最大关系数
compactThreshold400紧凑模式实体数阈值
mediumThreshold200中等深度实体数阈值
validationminEntities30提取PASS的最小实体数
minRelationRatio0.5每实体关系比
minDepth3PASS的最小层级深度
minEvents3PASS的最小事件节点数
consolidationautoNesttrue自动嵌套单关系孤儿
mergeSuggestionstrue建议相似标签合并
levenshteinThreshold2合并建议最大编辑距离
visualizationrepulsion5000物理排斥力
edgeRestLength160默认边静止长度
simulationSteps500物理模拟迭代次数

配置文件: data/kg-config.json(每个助手独立,gitignore排除).

跨助手访问(只读)

import { createReader } from '<path-to-skill>/lib/reader.mjs';
const kg = createReader();
kg.search("query"); kg.traverse("id", { depth: 2 }); kg.stats();

或CLI: node (请参考skill目录中的脚本文件) --format json --target /path/to/output.json

记忆导入

node (请参考skill目录中的脚本文件)            # 试运行
node (请参考skill目录中的脚本文件) --apply    # 以置信度 0.5 添加

然后: node (请参考skill目录中的脚本文件) uncertain 审查自动导入的实体.

知识实体指南

knowledge 类型涵盖声明性和程序性知识。使用属性和标签区分:

类型标签关键属性示例
事实/发现#fact, #tilsource, field, summary"大语言模型每token约4字符"
研究/论文#paper, #researchsource, field, summary, authorAI对齐论文发现
想法#ideasummary, status"构建知识图谱查询CLI"
操作流程#howto, #proceduresteps, context, summary"如何在树莓派部署"
心智模型#mental-model, #frameworksteps, context, summary"调试网络: ping→DNS→防火墙"
工作流#workflowsteps, context, summary"代码审查: 先测试再实现"

程序性知识属性:

  • steps: 有序流程字符串(使用 或编号: "1. 检查日志 → 2. 复现 → 3. 修复 → 4. 测试")
  • context: 何时/何地应用此知识(如 "网络断开时", "代码审查期间")
  • summary: 知识内容的简短描述

整合

每周或实体数 > 80 时运行 node (请参考skill目录中的脚本文件)。然后运行 summarize.mjs.

使用说明

  1. 执行 node (请参考skill目录中的脚本文件) 安装并修补助手指令文件
  2. 使用 node (请参考skill目录中的脚本文件) 评估知识项复杂度,得分 ≥ 4 时提取完整层级
  3. 添加知识实体,使用属性和标签区分声明性/程序性知识
  4. 通过 node (请参考skill目录中的脚本文件) 查询图谱(children/type/cat/orphans/stats/recent/uncertain)
  5. 使用 node (请参考skill目录中的脚本文件) --mode absorb|nest 合并相似实体
  6. 通过 node (请参考skill目录中的脚本文件) 管理加密密钥,永不在对话中暴露密钥值
  7. 使用 node (请参考skill目录中的脚本文件) 生成自包含可视化HTML
  8. 通过 node (请参考skill目录中的脚本文件) set 调整 tokenBudgetminEntitieslevenshteinThreshold 等参数
  9. 实体数 > 80 时运行 node (请参考skill目录中的脚本文件) 整合图谱

使用范例

示例1:查询孤立实体与统计

node (请参考skill目录中的脚本文件) orphans
# 输出:
# Orphan entities (3):
#   - [e042] DebugTip(调试技巧):howto — steps,context
#   - [e089] OldIdea(旧想法):idea — summary,status
#   - [e103] Note(笔记):note — summary
# ...
node (请参考skill目录中的脚本文件) stats
# 输出:
# Graph Statistics:
#   Total entities: 127
#   Total relations: 89
#   Relation ratio: 0.70
#   Max depth: 4
#   Categories: 6
#   Orphan entities: 3
#   Uncertain entities: 12

示例2:合并相似实体

node (请参考skill目录中的脚本文件) --target e042 --source e103 --mode absorb
# 输出:
# Merged e103 → e042 (absorb)
#   Transferred attributes: summary
#   Source e103 deleted
#   3 relations updated
# ...
node (请参考skill目录中的脚本文件) --target e042 --source e089 --mode nest
# 输出:
# Nested e089 under e042
#   e089 is now child of e042
#   Relations preserved

示例3:保管库操作

node (请参考skill目录中的脚本文件) set API_KEY "sk-abc123" --note "外部API访问密钥"
# 输出: Stored key 'API_KEY' with note
# ...
node (请参考skill目录中的脚本文件) list
# 输出:
# Vault keys:
#   - API_KEY (外部API访问密钥)
#   - DB_PASSWORD (数据库密码)
# ...
node (请参考skill目录中的脚本文件) get API_KEY
# 输出: sk-abc123 (仅用于管道传递,不在对话中显示)

示例4:深度启发式评估

# 本技能的核心实现逻辑
# 请参考上方使用说明进行配置和调用
echo "implementation_ready"

示例5:可视化生成

node (请参考skill目录中的脚本文件) --output /tmp/kg-graph.html
# 输出:
# Visualization generated: /tmp/kg-graph.html
# Entities: 127, Relations: 89
# Parent edges: 34 (blue dashed)
# Regular edges: 55 (red solid)
# Self-contained, offline, no CDN dependencies

错误恢复方案

错误场景原因处理方式
保管库键不存在vault.mjs get <key> 查询未设置的键先使用 vault.mjs set <key> <value> 存储键值,使用 vault.mjs list 查看已有键名
置信度过低实体堆积import-memory.mjs --apply 导入大量置信度 < 0.5 的实体运行 query.mjs uncertain 审查,手动确认或删除低置信度实体
合并目标不存在merge.mjs --target <id> 指定的实体ID已被删除使用 query.mjs 确认实体ID有效,合并前检查目标实体存在
KGML格式错误实体缩进不一致或 %rels/%vault 标记位置错误遵循KGML v2格式: 头部声明、缩进表示层级、%rels 前空行分隔
可视化渲染空白实体数过多导致物理模拟不收敛调整 config.mjs set visualization.repulsion 3000 降低排斥力,增加 simulationSteps 到 800
记忆导入冲突导入的实体与已有实体标签相似但属性不同import-memory.mjs 试运行检查,使用 consolidate.mjs 合并相似实体,levenshteinThreshold 控制合并灵敏度
跨助手写入被拒绝其他助手尝试通过非 reader.mjs 方式写入图谱跨助手访问仅通过 reader.mjs 只读,写入操作必须在本助手内执行
配置验证失败config.mjs set 设置了非法值(如 minEntities 为负数)检查设置项的值范围,minEntities ≥ 0,minRelationRatio 在 0-1 之间,使用 reset <key> 恢复默认
整合后数据丢失consolidate.mjsautoNest 错误嵌套了不应合并的实体整合前备份 data/kg-config.json,设置 autoNest: false 禁用自动嵌套,手动审查合并建议
token预算超限kg-summary.md超过 tokenBudget(5000)调整 config.mjs set summary.tokenBudget 8000,或减小 maxAttrLenmaxPerRoot 压缩摘要

热门问题

Q1: 如何选择 absorbnest 合并模式?

A: absorb 将源实体的属性合并到目标实体,源实体被删除,适合两个实体描述同一概念的情况。nest 将源实体作为目标实体的子节点,保留独立性,适合源实体是目标实体的子类别或细节的情况。合并前使用 query.mjs 查看两个实体的属性和关系,判断是否应完全吸收或保持层级.

Q2: 保管库的密钥如何安全使用?

A: 使用 vault.mjs set <name> <value> 存储凭据,值经加密存储在 vault.enc.json 中。使用 vault.mjs get <name> 获取原始值,仅用于管道传递给其他命令。永不在对话中打印凭据值,加密文件和主密钥文件不得出现在助手上下文中.

Q3: depth-check.mjs 得分 ≥ 4 意味着什么?

A: 得分 ≥ 4 表示知识内容复杂度高,包含多个命名组织、事件、策略和交叉关系。此时不应仅在2层提取顶层主题,而应提取所有命名的组织、事件、政策和跨分支关系。这确保知识图谱捕获内容的完整结构,而非仅表面主题。得分 < 4 的简单内容可适当减少提取深度.

Q4: 何时需要运行 consolidate.mjs 整合?

A: 每周定期运行一次,或当实体数 > 80 时运行。整合操作包括: 自动嵌套单关系孤儿(autoNest)、建议编辑距离 ≤ levenshteinThreshold(默认2)的相似标签合并、修剪空属性。整合后运行 summarize.mjs 更新摘要。建议整合前备份 data/kg-config.json,以防错误合并.

Q5: 如何让其他助手访问知识图谱?

A: 其他助手通过 reader.mjscreateReader() 函数只读访问,支持 search()traverse()stats() 方法。或通过CLI node (请参考skill目录中的脚本文件) --format json --target /path/to/output.json 导出为JSON文件。其他助手无写入权限,写入操作必须在本助手内执行。这确保知识图谱的数据完整性.

Q6: uncertain 查询返回的实体如何处理?

A: query.mjs uncertain 返回置信度 < 0.5 的实体,通常是 import-memory.mjs --apply 自动导入的。逐个审查这些实体: 确认正确的补充属性并提升置信度,或删除不准确的实体。建议导入记忆后立即运行 uncertain 查询审查,避免低质量实体积累影响图谱准确性.

Q7: 可视化中蓝色虚线和红色实线分别代表什么?

A: 蓝色虚线箭头(60%不透明度)表示父子层级关系(parent edge),即实体间的树状结构关系。红色实线箭头表示常规关系(regular edge),即通过 %rels 定义的跨分支关系。通过颜色和线型区分,可以直观识别哪些是层级结构、哪些是交叉引用。可视化使用 visualize.mjs 生成,自包含离线HTML,无CDN依赖.

能力边界

  • 知识图谱以JSON存储,超大图谱(实体数 > 1000)可能影响查询性能
  • 跨助手访问仅限只读,其他助手无法直接写入图谱
  • 保管库密钥依赖 .vault-key 文件,丢失该文件将无法解密密钥
  • depth-check.mjs 的复杂度评估基于启发式规则,可能对某些领域内容判断不准确
  • 可视化的物理模拟在实体数过多时可能不收敛,需调整 repulsionsimulationSteps 参数

创新特色

效率提升量化分析

操作步骤手动耗时自动化耗时时间节约准确率提升
知识图谱构建10小时1小时9小时5%
知识查询30分钟5分钟25分钟3%
实体合并2小时15分钟1.5小时4%
知识可视化1小时10分钟50分钟2%
配置调整30分钟5分钟25分钟1%

差异化对比

对比维度本技能手动操作Python脚本专业软件
易用性
功能丰富性
速度
成本
可视化效果

核心痛点解决

痛点描述影响范围解决方案量化效果
知识图谱构建困难手动构建知识图谱耗时费力整体工作效率提供自动化构建工具节约80%时间
知识查询效率低手动查询知识效率低,影响决策决策效率提供快速查询工具提升查询速度5倍
知识可视化困难手动可视化知识困难,难以理解知识理解提供可视化工具提升知识理解度20%

安全守则

  1. 知识图谱数据安全:确保知识图谱数据不泄露,防止敏感信息被非法访问。
  2. 用户权限管理:严格管理用户权限,防止未授权用户访问敏感功能。
  3. 数据加密传输:在数据传输过程中进行加密,防止数据被截获和篡改。
  4. 系统安全防护:定期进行系统安全检查,防止系统被恶意攻击。
  5. 日志审计:记录系统操作日志,以便于追踪和审计。

用户常见咨询

Q1: 知识图谱技能支持哪些输入格式?

A1: 嵌入式知识图谱,持久化存储结构化知识,支持查询、合并、可视化与配置。嵌入式知识图谱,以JSON存储持久化结构化知识,通过CLI脚本查询,生成KGML摘要供会话上。支持文本指令和结构化参数输入,具体格式参考使用流程章节。

Q2: 需要配置API Key吗?

A2: 是的,部分功能需要配置对应平台的API Key。请在依赖说明章节查看具体要求,并通过环境变量安全配置。

Q3: 命令行执行失败怎么办?

A3: 检查命令参数是否正确,确认运行环境支持exec能力。如遇权限问题,请参照错误处理章节排查。

知识图谱技能通用排查步骤

  1. 检查输入参数: 确认所有必填参数已提供且格式正确
  2. 查看日志输出: 定位具体错误行和异常类型
  3. 验证环境配置: 确认依赖库版本和运行环境满足要求
  4. 逐步调试: 缩小问题范围,隔离故障模块

使用场景

  • 团队协作: 统一团队工作方式,减少重复劳动和沟通成本
  • 接口集成: 对接第三方API服务,实现数据自动获取和处理
  • 内容生成: 自动生成文档、代码或结构化数据
  • 文件批处理: 批量处理文件内容,支持多格式转换和解析
  • 环境管理: 批量管理开发环境和部署流程
  • 信息检索: 快速搜索和过滤目标数据
  • 数据管道: 构建ETL流程,实现数据自动化流转

Top skills in this category