huaweicloud/huaweicloud-skills

huawei-cloud-ges-graph

Provides access guide for Huawei Cloud Graph Database GES service.

Ver código fuente
Documento original del Skill

Contenido del repositorio de origen con títulos, ejemplos, código, tablas, enlaces e imágenes preservados.

⚠️ Execution Method (Must Read): This skill executes queries via local Python or Node.js scripts under `scripts/`. Using direct API calls is prohibited. - Query scripts are located under the skill directory scripts/ (e.g., scripts/ges_graph_skill.py) - All scripts and environment check scripts are inside the skill package. You must use `skill action=exec` to execute them; do not run them directly in the shell - Prefer inline execution (python -c or node -e) over creating temporary script files. See "Inline Execution (No Temp Files)" section below. - All paths are relative to the skill directory, which is the directory where this SKILL.md resides

GES Graph Access Guidance

Overview

Huawei Cloud Graph Engine Service (GES) persistent edition atomic capability, providing access guide for graph database operations. Covers Cypher queries, GQL queries, schema/label management, summary info queries, graph data editing and other core capabilities.

Directory Structure

The directory conventions are as follows (all paths are relative to the skill directory):

  1. scripts/ - Contains the Python and Node.js execution scripts
  • ges_graph_skill.py - Python SDK for GES graph operations
  • ges_graph_skill.js - Node.js SDK for GES graph operations
  1. references/ - Contains documentation and configuration examples
  • ges_env.csv.example - Environment configuration template

Prerequisites

Before using this skill, ensure the following conditions are met:

1. Runtime Environment

Supports Python or Node.js runtime. Requires Python 3.8+ or Node.js 14+.

2. Graph Instance Configuration

This skill supports both environment variables and configuration files. Environment variables take precedence over configuration files.

Environment Variables and Parameters

Environment VariableDescriptionRequired
GES_GRAPH_IPGES service IPYes
GES_GRAPH_PORTGES service portYes
GES_PROJECT_IDProject IDYes
GES_GRAPH_NAMEGraph nameYes
GES_IAM_URLIAM service URLYes
GES_REGIONRegionYes
HUAWEI_CLOUD_AKAccess KeyYes*
HUAWEI_CLOUD_SKSecret KeyYes*
GES_USERNAMEUsernameConditional**
GES_PASSWORDPasswordConditional**
GES_DOMAIN_NAMEDomain nameConditional**
GES_TOKENToken (highest priority)Optional
AK/SK required for AKSK authentication. Username/password conditionally required* when AKSK is not available.

Configuration File (`.env/ges_env.csv`)

Config file path: .env/ges_env.csv

Config ItemDescriptionRequiredExample Value
graph_ipGES service IPYes100.95.xxx.xxx
graph_portGES service portYes80
project_idProject IDYesyourprojectid
graph_nameGraph nameYesyourgraphname
iam_urlIAM service URLYes(see region table below)
access_keyAccess KeyYes*youraccesskey
secret_keySecret KeyYes*yoursecretkey
usernameUsernameConditional**your_username
passwordPasswordConditional**your_password
domain_nameDomain nameConditional**yourdomainname
regionRegionYescn-north-4
access_key/secret_key required for AKSK authentication. username/password/domain_name conditionally required* when AKSK is not available.

IAM URLs by Region

RegionURLprotocol
cn-north-4iam.cn-north-4.myhuaweicloud.com/v3/auth/tokensHTTPS
ap-southeast-1iam.ap-southeast-1.myhuaweicloud.com/v3/auth/tokensHTTPS

Three methods are supported (priority from high to low):

  1. Environment variable GES_TOKEN
  2. AKSK method (HUAWEI_CLOUD_AK + HUAWEI_CLOUD_SK or access_key + secret_key)
  3. Password method (username + password + domain_name)

⛔ Prohibited Operations (Safety Guardrail)

This skill prohibits the following operations:
Prohibited OperationDescriptionReason
❌ Printing sensitive credentialsPrinting AK/SK, password, token, or other sensitive informationRisk of sensitive information leakage
The following high-risk operations require explicit agent confirmation before execution:
High-Risk OperationDescriptionConfirmation Prompt
⚠️ Clearing all graph dataclear_graph() or similar clear operations"Are you sure you want to clear all data in the graph? This operation is irreversible."
⚠️ Batch deleting nodes/edgesUnconditional bulk deletion of all nodes or edges"Are you sure you want to batch delete all nodes/edges? This operation is irreversible."
If a user requests any of the above high-risk operations, explicit confirmation must be obtained: "This is a high-risk operation and requires your explicit confirmation. Please reply with 'confirm' to proceed."

Cypher and GQL Query Languages

GES supports two query languages: Cypher (Neo4j-compatible) and GQL (international standard graph query language).

Cypher Usage

Python:

python
# Execute a Cypher query
result = skill.execute_query("MATCH (n) RETURN n LIMIT 10")

# Create a node (_ID_ is used only during creation to set a custom ID)
result = skill.execute_query(
    "CREATE (n:Person {_ID_: 'p001', name: '张三'}) RETURN n"
)

# Match query
result = skill.execute_query(
    "MATCH (n:Person)-[:KNOWS]->(m) WHERE n.name = '张三' RETURN m"
)

# Update a node (match via id() function)
result = skill.execute_query(
    "MATCH (n) WHERE id(n) = 123 SET n.name = '李四' RETURN n"
)

# Delete a node
result = skill.execute_query(
    "MATCH (n) WHERE id(n) = 123 DETACH DELETE n"
)

# Aggregate query
result = skill.execute_query(
    "MATCH (n:Person) RETURN n.city, count(*) as cnt ORDER BY cnt DESC"
)

Node.js:

javascript
const { GESGraphSkill } = require('./ges_graph_skill.js');
const skill = new GESGraphSkill();

// Execute a Cypher query
const result = await skill.executeQuery("MATCH (n) RETURN n LIMIT 10");

// Create a node (_ID_ is used only during creation to set a custom ID)
const result = await skill.executeQuery(
    "CREATE (n:Person {_ID_: 'p001', name: '张三'}) RETURN n"
);

// Match query
const result = await skill.executeQuery(
    "MATCH (n:Person)-[:KNOWS]->(m) WHERE n.name = '张三' RETURN m"
);

// Update a node
const result = await skill.executeQuery(
    "MATCH (n) WHERE id(n) = 123 SET n.name = '李四' RETURN n"
);

// Delete a node
const result = await skill.executeQuery(
    "MATCH (n) WHERE id(n) = 123 DETACH DELETE n"
);

// Aggregate query
const result = await skill.executeQuery(
    "MATCH (n:Person) RETURN n.city, count(*) as cnt ORDER BY cnt DESC"
);

// Path query
const result = await skill.executeQuery(
    "MATCH p=(n:Person)-[*1..3]->(m) WHERE n.name = '张三' RETURN p"
);

Inline Execution (No Temp Files)

Execute Cypher queries directly via skill action=exec without creating any script files.

Note: When running via skill action=exec, the working directory is the project root. The installed skill is located under .agents/skills/huawei-cloud-ges-graph, not under skills/ai/ges/.

Python:

bash
skill exec py -c "
import sys, os; cwd=os.getcwd()
skill_dir = os.path.join(cwd, '.agents', 'skills', 'huawei-cloud-ges-graph')
sys.path.insert(0, os.path.join(skill_dir, 'scripts'))
from ges_graph_skill import get_skill
import json
r = get_skill().execute_query('MATCH (n) RETURN n LIMIT 5')
print(json.dumps(r, ensure_ascii=False, indent=2))
"

Node.js:

bash
skill exec node -e "
const path = require('path');
const cwd = process.cwd();
const scriptPath = path.join(cwd, '.agents', 'skills', 'huawei-cloud-ges-graph', 'scripts', 'ges_graph_skill.js');
const { GESGraphSkill } = require(scriptPath);
(async () => {
    const r = await new GESGraphSkill().executeQuery('MATCH (n) RETURN n LIMIT 5');
    console.log(JSON.stringify(r, null, 2));
})();
"

Common Cypher Statements

CategoryStatementDescription
Schemacall db.schema()Get graph schema information
Indexescall db.indexes()View all indexes
Kill querycall dbms.killQuery('queryId')Terminate a running query
Running queriescall dbms.listQueries()View current queries
System parameterscall dbms.parameter('needNodeIndex', false)Remove index constraint (large graph scenarios)

GQL Usage (Supported by this Skill)

GQL is the ISO/IEC 39075 standardized graph query language. GES invokes it via action_id=execute-gql-query.

python
# GQL requires the underlying _request method
client = GESClient()
result = client._request('POST', '/action?action_id=execute-gql-query', json={
    "statements": [{
        "statement": "INSERT (n:Person{_ID_:'p001', firstName:'Eywa'}) RETURN n",
        "parameters": {},
        "resultDataContents": ["row"]
    }]
})

Common GQL Statements

CategoryStatementDescription
InsertINSERT (n:Person{_ID_:'p001', firstName:'Eywa'}) RETURN nInsert node
MatchMATCH (n:Person WHERE element_id(n)='p001') RETURN nConditional match
UpdateMATCH (n:Person WHERE element_id(n)='p001') SET n.lastName='Higgo' RETURN nUpdate properties
Remove propertyMATCH (n:Person WHERE element_id(n)='p001') REMOVE n.lastName RETURN nRemove property
Delete nodeMATCH (n:Person WHERE element_id(n)='p001') DELETE nDelete node
FilterMATCH (n:Person)-[:KNOWS]->(m) FILTER element_id(n)='7933' AND m.gender='male' RETURN mFilter results
FOR loopFOR a IN [1,2,3] RETURN aLoop statement
LET variableLET a = 1, b = 2 RETURN a, bVariable definition
UNION... UNION ALL ...Merge result sets

Cypher vs GQL Key Differences

FeatureCypherGQL
Internal IDid(n)element_id(n)
Custom ID (insert only)_ID_ property_ID_ property
Node matchingMATCH (n)MATCH (n WHERE ...)
SET statementSET n.prop = valueSET n.prop = value
Remove propertyREMOVE n.propREMOVE n.prop
LoopsNot supportedFOR x IN [...]
Variable definitionNot supportedLET x = value## Core Interfaces (Core Commands)

Cypher Query

python
# Execute a Cypher query
result = skill.execute_query("MATCH (n) RETURN n LIMIT 10")

# Execute a Cypher query with parameters
result = skill.execute_query(
    "MATCH (n) WHERE n.name = $name RETURN n",
    parameters={"name": "张三"}
)

Vertex Operations

python
# Add a node
result = skill.client.add_node(
    node_id="mem_001",
    labels=["Memory", "conversation"],
    properties={"content": "User said Hello", "timestamp": 1234567890}
)

# Batch add nodes
result = skill.client.add_nodes_batch([
    {"id": "mem_001", "labels": ["Memory"], "properties": {"content": "test1"}},
    {"id": "mem_002", "labels": ["Memory"], "properties": {"content": "test2"}}
])

# Get a node
result = skill.client.get_node("mem_001")

# Update a node
result = skill.client.update_node("mem_001", {"content": "New content"})

# Delete a node
result = skill.client.delete_node("mem_001")

Edge Operations

python
# Add an edge
result = skill.client.add_edge(
    start_node_id="mem_001",
    end_node_id="mem_002",
    edge_type="RELATED_TO",
    properties={"weight": 0.8}
)

# Delete an edge
result = skill.client.delete_edge("mem_001", "mem_002", "RELATED_TO")

# Get edges of a node
result = skill.client.get_edges("mem_001", direction="both")

Label Operations

python
# Add a label to a node
result = skill.client.add_label_to_node("mem_001", "important")

# Query nodes by label
result = skill.client.get_nodes_by_label("Memory", limit=100)

Graph Management

python
# Get schema information
result = skill.get_schema_info()

# Get graph statistics
result = skill.get_statistics()

# Clear all data in the graph (dangerous operation)
result = skill.clear_all_memories()

Import/Export

python
# Import graph data
job_id = skill.client.import_graph(
    schema_path="obs://bucket/schema.xml",
    vertex_path="obs://bucket/vertex",
    edge_path="obs://bucket/edge"
)

# Export graph data (access_key/secret_key are read from .env automatically)
job_id = skill.client.export_graph(
    export_path="obs://bucket/export",
    vertex_set_name="set_vertex",
    edge_set_name="set_edge"
)

GES Syntax Guide

Node ID Handling

GES uses the special _ID_ property to handle string-type node IDs:

  • Creating nodes uses the _ID_ property:
cypher
  CREATE (n:Memory{_ID_: 'mem_001', content: 'test'})
  • Other operations use the id() function:
cypher
  MATCH (n) WHERE id(n) = 'mem_001' RETURN n
  MATCH (n)-[r]->(m) WHERE id(n) = 'mem_001' RETURN r

Schema Requirements

GES requires that schema (Labels and Properties) be defined before corresponding nodes can be created. Schema can be defined through:

  1. Creating Labels and properties via the GES management console
  2. Importing data with schema through the import interface

Response Format

All Cypher interfaces return a unified JSON format:

json
{
  "results": [
    {
      "columns": ["column1", "column2"],
      "data": [
        {"row": ["value1", "value2"], "meta": [null, null]}
      ]
    }
  ],
  "errors": []
}

Error Handling

python
from ges_graph_skill import get_skill

skill = get_skill()
try:
    result = skill.execute_query("MATCH (n) RETURN n")
except Exception as e:
    print(f"Error: {e}")

Important Notes

  1. Token validity: Token is valid for 24 hours; the code refreshes automatically
  2. Schema constraint: Ensure Labels and Properties are defined before creating nodes
  3. Dangerous operations: clear_graph() deletes all data in the graph; use with caution
  4. Asynchronous operations: For large data import/export, asynchronous mode is recommended

Reference Documentation

  • Configuration file format: references/ges_env.csv.example — Environment configuration file template and field descriptions
  • Graph database format: https://support.huaweicloud.com/usermanual-ges/ges010153.html — Detailed GES graph data format documentation
  • How to access the business API: https://support.huaweicloud.com/api-ges/ges030112.html — GES business API access guide
del mismo repositorio

Más Skills

Todos los Skills
huaweicloud
Comunidad

huawei-cloud-publish-work-to-gallery

Publish user's work to the Huawei Cloud University Operations Platform (华为云高校运营平台/作品陈列馆). Use this skill whenever the user wants to publish, submit, or upload a project/work to the gallery or a training camp (训练营) on the platform — including casual phrasings like "把作品发布上去", "投稿到陈列馆", "传作品到平台", "提交作品/项目", "报名发布作品", as well as formal ones like "publish to work gallery", "submit to training camp", "upload work to the platform". Do NOT use for general dev questions, git push to GitCode alone, or platform browsing without publishing intent.

instalaciones
5
GitHub Stars
50
Actualizado
23 sept
huaweicloud
Comunidad

huawei-cloud-eip-cost-optimizer

Huawei Cloud EIP (Elastic IP) cost optimization skill using hcloud CLI (KooCLI). 1. List and query EIPs across regions with detailed status 2. Identify idle/unbound EIPs and generate cost optimization reports 3. Set up idle EIP monitoring with webhook/email alerts 4. Generate HTML/JSON cost analysis reports 5. Maintain operation audit logs for compliance Read-only analysis only - NO bandwidth adjustment, tag management, or EIP release/deletion. Triggers include: "EIP cost optimization", "idle EIP analysis", "EIP audit", "cost report", "EIP status query", "EIP list", "EIP monitoring", "EIP alert", "cost analysis", "idle monitoring", "operation audit", "EIP 成本优化", "闲置 EIP 分析", "EIP 审计", "成本报告", "EIP 状态查询", "EIP 查询", "EIP 列表", "EIP 监控", "EIP 告警", "成本分析", "闲置监控", "操作审计"

instalaciones
1
GitHub Stars
50
Actualizado
22 sept
huaweicloud
Comunidad

huawei-cloud-flexus-l-deploy-jiuwenswarm

One-click deployment of JiuwenSwarm multi-Agent collaboration platform on Huawei Cloud Flexus L instances. Usage scenarios: When users need to quickly deploy JiuwenSwarm/JiuwenClaw on Huawei Cloud Flexus L instances, when they need to automatically create cloud instances and deploy AI Agent platforms, when they need to configure model APIs and message channels (Xiaoyi/Feishu/DingTalk). Automatically create instances, deploy applications via COC, configure models and message channels. Trigger keywords: JiuwenSwarm deployment, JiuwenClaw deployment, 九问Swarm部署, 九问Claw部署, 一键部署JiuwenSwarm, AI智能体平台部署, 部署九问Swarm, 部署九问Claw,云服务器部署AI平台.

instalaciones
1
GitHub Stars
50
Actualizado
22 sept
huaweicloud
Comunidad

huawei-cloud-flexus-l-server-flexusagent-deployment

Deploy AI Agent development platform (Dify) on Huawei Cloud Flexus L instance, providing deployment operations, password management, MaaS model configuration, and workflow import capabilities. Trigger keywords: deploy flexusagent/一键部署Flexus AI Agent开发平台、change password/修改开发平台管理员密码、change dify password/修改dify平台密码、add maas provider/添加MaaS模型供应商、configure maas model/配置MaaS模型、view workflow/查看AI Agent工作流、import workflow/导入AI Agent工作流

instalaciones
1
GitHub Stars
50
Actualizado
22 sept