关于 cypher
cypher 是供 OpenClaw 使用的技能,可通过 Cypher 查询 Neo4j 图数据库,操作节点与关系并遍历图结构。适合处理图数据,不面向关系型数据查询。
主要功能
- 01执行 MATCH、CREATE、MERGE、DELETE
- 02路径表达式与图遍历
- 03图数据聚合查询
- 04PageRank 与社区检测
- 05连接 Neo4j 节点和关系
适用场景
- 01查询社交网络中的关系
- 02遍历推荐系统图数据
- 03查找图中的最短路径
- 04对图数据进行聚合分析
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill cypher安装后在 Claude Code 中输入/cypher确认已加载。
详细介绍
用途
此技能允许 OpenClaw 执行 Cypher 查询,以便与图数据库交互,特别是 Neo4j,并支持节点匹配、创建关系和图遍历等操作。
何时使用
处理图结构数据(例如社交网络或推荐系统)时使用此技能。例如,查询用户图中的关系,或在知识库上执行 BFS。对于关系型数据,请避免使用此技能,改用基于 SQL 的技能。
主要功能
- 执行核心 Cypher 子句:MATCH、CREATE、MERGE、DELETE。
- 处理遍历路径表达式(例如,最短路径)。
- 通过 shortestPath() 等算法支持 BFS/DFS 遍历。
- 对图数据执行聚合(例如,COUNT、SUM)。
- 运行 PageRank 或社区检测等图算法。
- 集成 Neo4j,以查询节点和关系。
使用模式
要执行 Cypher 查询,请使用 cypher-shell 或 Python neo4j 驱动。Neo4j Community Edition 默认在 bolt://localhost:7687 上运行,且无需身份验证。
示例 1:匹配所有节点并返回其标签。
MATCH (n) RETURN labels(n), count(n) LIMIT 10;
通过 CLI:cypher-shell -a bolt://localhost:7687 --format plain "MATCH (n) RETURN labels(n), count(n) LIMIT 10"
示例 2:在两个节点之间创建关系。
MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'})
CREATE (a)-[:KNOWS]->(b);
常用命令/API
使用 cypher-shell 执行交互式查询,或使用 Python neo4j 驱动以编程方式访问:
# CLI query
cypher-shell -a bolt://localhost:7687 --format plain "MATCH (n:Skill) RETURN n.name LIMIT 10"
# Python neo4j driver
from neo4j import GraphDatabase
driver = GraphDatabase.driver("bolt://localhost:7687")
with driver.session() as session:
result = session.run("MATCH (n:Skill) RETURN n.name LIMIT 10")
for record in result:
print(record["n.name"])
driver.close()
配置:通过 bolt://localhost:7687 连接,无需身份验证。使用 MERGE 执行 upsert 操作:MERGE (n:Person {name: 'Alice'})。
集成说明
要在 OpenClaw 中集成此技能,请确保 Neo4j 正在运行(macOS 上运行 brew services start neo4j,Linux 上运行 systemctl start neo4j)。连接默认使用 bolt://localhost:7687,且无需身份验证。如有需要,可通过 NEO4J_URI 环境变量覆盖。
错误处理
常见错误包括语法问题(例如,缺少分号)或连接失败。先验证查询,以检查是否存在 "Neo4jError: Invalid input"。如果连接失败,请确认 Neo4j 正在运行。在代码中,使用 try-catch 块包装查询:
from neo4j import GraphDatabase
from neo4j.exceptions import ServiceUnavailable, CypherSyntaxError
driver = GraphDatabase.driver("bolt://localhost:7687")
try:
with driver.session() as session:
result = session.run("MATCH (n) RETURN n LIMIT 5")
records = list(result)
except ServiceUnavailable:
print("Error: Neo4j is not running. Start with: brew services start neo4j")
except CypherSyntaxError as e:
print(f"Cypher syntax error: {e}")
finally:
driver.close()
对于缺少节点等图相关错误,请使用 OPTIONAL MATCH。始终记录错误详情以便调试。
图关系
- 节点:Person、Movie、Organization。
- 关系:(:Person)-[:KNOWS]-(:Person)、(:Person)-[:ACTED_IN]-(:Movie)、(:Organization)-[:EMPLOYS]-(:Person)。
- 路径示例:通过 shortestPath((:Person {name: 'Alice'})-[:KNOWS*]-(:Person {name: 'Bob'})) 查找最短路径。
- 聚合:对关系使用聚合,例如 RETURN COUNT((:Person)-[:KNOWS]-()) AS connections。