mcpField
C
cypher

cypher

github.com/alphaonedev数据与数据库44 次安装
代码仓库

关于 cypher

cypher 是供 OpenClaw 使用的技能,可通过 Cypher 查询 Neo4j 图数据库,操作节点与关系并遍历图结构。适合处理图数据,不面向关系型数据查询。

主要功能

  1. 01执行 MATCH、CREATE、MERGE、DELETE
  2. 02路径表达式与图遍历
  3. 03图数据聚合查询
  4. 04PageRank 与社区检测
  5. 05连接 Neo4j 节点和关系

适用场景

  1. 01查询社交网络中的关系
  2. 02遍历推荐系统图数据
  3. 03查找图中的最短路径
  4. 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。

评论

支持 Markdown