用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/ffsshhttiikk/opencode-agents-skills --skill neo4j命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | neo4j |
| description | Neo4j graph database, Cypher queries, and relationship-based data modeling |
| category | databases |
I am a native graph database designed for connected data. I represent and store data as nodes (entities) and relationships (connections) with properties on both. I excel at traversing complex relationships, social network analysis, recommendation engines, fraud detection, and knowledge graphs. My query language, Cypher, provides an intuitive pattern-matching syntax for expressing graph traversals and queries.
from neo4j import GraphDatabase
from neo4j.exceptions import ConstraintError
driver = GraphDatabase.driver(
"bolt://localhost:7687",
auth=("neo4j", "password"),
max_connection_lifetime=3600
)
def create_user(name, email, **kwargs):
with driver.session() as session:
result = session.run("""
CREATE (u:User {name: $name, email: $email, created_at: datetime()})
SET u += $kwargs
RETURN u
""", name=name, email=email, kwargs=kwargs)
return result.single()
def get_user_by_email(email):
with driver.session() as session:
result = session.run("""
MATCH (u:User {email: $email})
RETURN u
""", email=email)
return result.single()
def get_user_with_friends(user_email):
with driver.session() as session:
result = session.run("""
MATCH (user:User {email: $email})-[:FRIEND*1..2]-(friend:User)
WHERE user.email <> friend.email
WITH DISTINCT friend
OPTIONAL MATCH (friend)-[:PURCHASED]->(product:Product)
RETURN friend, collect(product) as products
""", email=email)
return [dict(record) for record in result]
def update_user_properties(email, **updates):
with driver.session() as session:
result = session.run("""
MATCH (u:User {email: $email})
SET u += $updates
RETURN u
""", email=email, updates=updates)
result.single()
():
driver.session() session:
result = session.run(, email=email)
result.single()[] >
def create_friendship(user1_email, user2_email):
with driver.session() as session:
result = session.run("""
MATCH (a:User {email: $email1}), (b:User {email: $email2})
WHERE a <> b
MERGE (a)-[:FRIEND {since: datetime()}]-(b)
RETURN a, b
""", email1=user1_email, email2=user2_email)
return result.single()
def get_mutual_friends(user1_email, user2_email):
with driver.session() as session:
result = session.run("""
MATCH (a:User {email: $email1})-[:FRIEND]-(mutual)-[:FRIEND]-(b:User {email: $email2})
WHERE a <> b
RETURN collect(mutual) as mutual_friends, count(mutual) as count
""", email1=user1_email, email2=user2_email)
return result.single()
def get_friends_of_friends(user_email, limit=50):
with driver.session() as session:
result = session.run("""
MATCH (user:User {email: $email})-[:FRIEND]->()-[:FRIEND]-(friend:User)
WHERE user <> friend AND NOT (user)-[:FRIEND]-(friend)
WITH friend, count(*) as common_friends
ORDER BY common_friends DESC
LIMIT $limit
RETURN friend, common_friends
""", email=user_email, limit=limit)
return [(dict(record["friend"]), record["common_friends"]) for record in result]
def record_purchase(user_email, product_sku, quantity=1):
with driver.session() as session:
result = session.run("""
MATCH (user:User {email: $email}), (product:Product {SKU: $sku})
MERGE (user)-[:PURCHASED {quantity: $quantity, at: datetime()}]->(product)
RETURN user, product
""", email=user_email, sku=product_sku, quantity=quantity)
result.single()
():
driver.session() session:
result = session.run(, email=user_email, limit=limit)
[(record) record result]
def find_shortest_path(start_email, end_email):
with driver.session() as session:
result = session.run("""
MATCH (start:User {email: $start}), (end:User {email: $end})
MATCH path = shortestPath((start)-[:FRIEND*..15]-(end))
RETURN nodes(path) as users, length(path) as distance
""", start=start_email, end=end_email)
return result.single()
def find_all_shortest_paths(start_email, end_email):
with driver.session() as session:
result = session.run("""
MATCH (start:User {email: $start}), (end:User {email: $end})
MATCH paths = allShortestPaths((start)-[:FRIEND*..10]-(end))
RETURN paths, length(paths) as hops
""", start=start_email, end=end_email)
return [dict(record) for record in result]
def get_influencers(limit=10):
with driver.session() as session:
result = session.run("""
MATCH (user:User)
WITH user, size((user)<-[:FRIEND]-()) as follower_count
ORDER BY follower_count DESC
LIMIT $limit
RETURN user.name, follower_count
""", limit=limit)
return [dict(record) for record in result]
def find_communities():
with driver.session() as session:
result = session.run("""
CALL gds.louvain.stream('user-graph', {relationshipTypes: ['FRIEND']})
YIELD nodeId, communityId
MATCH (u:User) WHERE id(u) = nodeId
RETURN communityId, collect(u.name) as members, count(*) as size
ORDER BY size DESC
""")
[(record) record result]
():
driver.session() session:
result = session.run()
[(record) record result]
def recommend_products_to_user(user_email, limit=10):
with driver.session() as session:
result = session.run("""
MATCH (user:User {email: $email})-[:PURCHASED]->(p1:Product)-[:PURCHASED]-()-[:PURCHASED]->(recommendation:Product)
WHERE NOT (user)-[:PURCHASED]->(recommendation) AND p1 <> recommendation
WITH recommendation, count(*) as score
ORDER BY score DESC
LIMIT $limit
RETURN recommendation, score
""", email=user_email, limit=limit)
return [(dict(record["recommendation"]), record["score"]) for record in result]
def recommend_friends(user_email, limit=10):
with driver.session() as session:
result = session.run("""
MATCH (user:User {email: $email})-[:FRIEND]->(friend:User)-[:FRIEND]->(suggestion:User)
WHERE user <> suggestion AND NOT (user)-[:FRIEND]-(suggestion)
WITH suggestion, count(*) as common_friends
ORDER BY common_friends DESC
LIMIT $limit
RETURN suggestion, common_friends
""", email=user_email, limit=limit)
return [(dict(record["suggestion"]), record["common_friends"]) for record in result]
def get_trending_products(timeframe="30d"):
with driver.session() as session:
result = session.run("""
MATCH (product:Product)<-[:PURCHASED]-(order:Order)
WHERE order.purchased_at >= datetime() - duration({days: 30})
WITH product, count(*) as purchase_count
ORDER BY purchase_count DESC
RETURN product.name, purchase_count
LIMIT 20
""")
[(record) record result]
():
driver.session() session:
result = session.run(, email=user_email, limit=limit)
[(record) record result]
def create_company_hierarchy():
with driver.session() as session:
result = session.run("""
MATCH (ceo:Employee {title: 'CEO'})
OPTIONAL MATCH (ceo)-[:MANAGES*]->(report:Employee)
WITH ceo, collect(report) as all_reports
RETURN ceo.name as ceo, size(all_reports) as total_reports
""")
return result.single()
def find_employees_by_department(department_name):
with driver.session() as session:
result = session.run("""
MATCH (dept:Department {name: $dept})-[:HAS_MEMBER]->(emp:Employee)
RETURN emp.name, emp.title, emp.email
""", dept=department_name)
return [dict(record) for record in result]
def analyze_supply_chain():
with driver.session() as session:
result = session.run("""
MATCH path = (supplier:Supplier)-[:SUPPLIES*]->(manufacturer:Manufacturer)-[:PRODUCES]->(product:Product)
WITH supplier, product, length(path) as chain_length
RETURN supplier.name, collect(product.name) as products, chain_length
ORDER BY chain_length DESC
""")
return [dict(record) for record in result]
def detect_fraud_patterns():
with driver.session() as session:
result = session.run("""
MATCH (user:User)-[:PURCHASED]->(order:Order)
WITH user, count(order) as order_count, sum(order.total) as total_spent
WHERE order_count > 10 AND total_spent < 100
RETURN user.name, user.email, order_count, total_spent
LIMIT 50
""")
return [dict(record) record result]
():
driver.session() session:
result = session.run()
[(record) record result]