知识图谱技能
以JSON持久化存储结构化知识,支持查询、合并、可视化及参数配置,优化知识图谱管理与自动化工作流程。
天轰穿
@thcjp
Install
$ openclaw skills install @thcjp/knowledge-graph-skill功能说明: 本技能涵盖 自动化配置和灵活的参数设置、工作流程和效率、时使用、化配置和灵活的参数设置 等核心能力。
知识图谱技能
输入参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| input | string | 是 | 知识图谱技能处理的输入数据或指令 |
| options | object | 否 | 附加配置选项,如模式选择、格式偏好等 |
| callback_url | string | 否 | 异步处理完成后的回调通知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 API | API | 必需 | 由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.mjs的createReader()或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
可用设置
| 区块 | 键 | 默认值 | 说明 |
|---|---|---|---|
| summary | tokenBudget | 5000 | kg-summary.md最大token数 |
maxAttrLen | 40 | 属性值最大字符数 | |
maxPerRoot | 4 | 每个根子树显示的最大关系数 | |
compactThreshold | 400 | 紧凑模式实体数阈值 | |
mediumThreshold | 200 | 中等深度实体数阈值 | |
| validation | minEntities | 30 | 提取PASS的最小实体数 |
minRelationRatio | 0.5 | 每实体关系比 | |
minDepth | 3 | PASS的最小层级深度 | |
minEvents | 3 | PASS的最小事件节点数 | |
| consolidation | autoNest | true | 自动嵌套单关系孤儿 |
mergeSuggestions | true | 建议相似标签合并 | |
levenshteinThreshold | 2 | 合并建议最大编辑距离 | |
| visualization | repulsion | 5000 | 物理排斥力 |
edgeRestLength | 160 | 默认边静止长度 | |
simulationSteps | 500 | 物理模拟迭代次数 |
配置文件: 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, #til | source, field, summary | "大语言模型每token约4字符" |
| 研究/论文 | #paper, #research | source, field, summary, author | AI对齐论文发现 |
| 想法 | #idea | summary, status | "构建知识图谱查询CLI" |
| 操作流程 | #howto, #procedure | steps, context, summary | "如何在树莓派部署" |
| 心智模型 | #mental-model, #framework | steps, context, summary | "调试网络: ping→DNS→防火墙" |
| 工作流 | #workflow | steps, context, summary | "代码审查: 先测试再实现" |
程序性知识属性:
steps: 有序流程字符串(使用→或编号:"1. 检查日志 → 2. 复现 → 3. 修复 → 4. 测试")context: 何时/何地应用此知识(如"网络断开时","代码审查期间")summary: 知识内容的简短描述
整合
每周或实体数 > 80 时运行 node (请参考skill目录中的脚本文件)。然后运行 summarize.mjs.
使用说明
- 执行
node (请参考skill目录中的脚本文件)安装并修补助手指令文件 - 使用
node (请参考skill目录中的脚本文件)评估知识项复杂度,得分 ≥ 4 时提取完整层级 - 添加知识实体,使用属性和标签区分声明性/程序性知识
- 通过
node (请参考skill目录中的脚本文件)查询图谱(children/type/cat/orphans/stats/recent/uncertain) - 使用
node (请参考skill目录中的脚本文件) --mode absorb|nest合并相似实体 - 通过
node (请参考skill目录中的脚本文件)管理加密密钥,永不在对话中暴露密钥值 - 使用
node (请参考skill目录中的脚本文件)生成自包含可视化HTML - 通过
node (请参考skill目录中的脚本文件) set调整tokenBudget、minEntities、levenshteinThreshold等参数 - 实体数 > 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.mjs 的 autoNest 错误嵌套了不应合并的实体 | 整合前备份 data/kg-config.json,设置 autoNest: false 禁用自动嵌套,手动审查合并建议 |
| token预算超限 | kg-summary.md超过 tokenBudget(5000) | 调整 config.mjs set summary.tokenBudget 8000,或减小 maxAttrLen 和 maxPerRoot 压缩摘要 |
热门问题
Q1: 如何选择 absorb 和 nest 合并模式?
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.mjs 的 createReader() 函数只读访问,支持 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的复杂度评估基于启发式规则,可能对某些领域内容判断不准确- 可视化的物理模拟在实体数过多时可能不收敛,需调整
repulsion和simulationSteps参数
创新特色
效率提升量化分析
| 操作步骤 | 手动耗时 | 自动化耗时 | 时间节约 | 准确率提升 |
|---|---|---|---|---|
| 知识图谱构建 | 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% |
安全守则
- 知识图谱数据安全:确保知识图谱数据不泄露,防止敏感信息被非法访问。
- 用户权限管理:严格管理用户权限,防止未授权用户访问敏感功能。
- 数据加密传输:在数据传输过程中进行加密,防止数据被截获和篡改。
- 系统安全防护:定期进行系统安全检查,防止系统被恶意攻击。
- 日志审计:记录系统操作日志,以便于追踪和审计。
用户常见咨询
Q1: 知识图谱技能支持哪些输入格式?
A1: 嵌入式知识图谱,持久化存储结构化知识,支持查询、合并、可视化与配置。嵌入式知识图谱,以JSON存储持久化结构化知识,通过CLI脚本查询,生成KGML摘要供会话上。支持文本指令和结构化参数输入,具体格式参考使用流程章节。
Q2: 需要配置API Key吗?
A2: 是的,部分功能需要配置对应平台的API Key。请在依赖说明章节查看具体要求,并通过环境变量安全配置。
Q3: 命令行执行失败怎么办?
A3: 检查命令参数是否正确,确认运行环境支持exec能力。如遇权限问题,请参照错误处理章节排查。
知识图谱技能通用排查步骤
- 检查输入参数: 确认所有必填参数已提供且格式正确
- 查看日志输出: 定位具体错误行和异常类型
- 验证环境配置: 确认依赖库版本和运行环境满足要求
- 逐步调试: 缩小问题范围,隔离故障模块
使用场景
- 团队协作: 统一团队工作方式,减少重复劳动和沟通成本
- 接口集成: 对接第三方API服务,实现数据自动获取和处理
- 内容生成: 自动生成文档、代码或结构化数据
- 文件批处理: 批量处理文件内容,支持多格式转换和解析
- 环境管理: 批量管理开发环境和部署流程
- 信息检索: 快速搜索和过滤目标数据
- 数据管道: 构建ETL流程,实现数据自动化流转
Top skills in this category
Self-Improving + Proactive Agent
@ivangdavilaSelf-reflection + Self-criticism + Self-learning + Self-organizing memory. Agent evaluates its own work, catches mistakes, and improves permanently. Use when...
ontology
@oswalpalashTyped knowledge graph for structured agent memory and composable skills. Use when creating/querying entities (Person, Project, Task, Event, Document), linkin...
Humanizer
@biostartechnologyRemove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.
Obsidian
@steipeteWork with Obsidian vaults (plain Markdown notes) and automate via obsidian-cli.
YouTube Watcher
@michaelgatharaFetch and read transcripts from YouTube videos. Use when you need to summarize a video, answer questions about its content, or extract information from it.