huaweicloud/huawei-cloud-ges-graph

Fournit un guide d'accès pour le service de base de données graphiques GES de Huawei Cloud. Couvre les requêtes Cypher, les requêtes GQL, la gestion des schémas/étiquettes, les requêtes d'informations récapitulatives, la modification des données graphiques, etc. Utilisez cette compétence lorsque les utilisateurs souhaitent opérer le service de base de données graphiques GES de Huawei Cloud via le terminal.

Qu'est-ce que huawei-cloud-ges-graph ?

Cette compétence fournit un guide d'accès complet pour le service de base de données graphiques GES (Graph Engine Service) de Huawei Cloud, permettant aux agents IA d'interagir avec les instances de graphes GES via le terminal. Elle couvre un large éventail d'opérations, notamment les requêtes Cypher et GQL, la gestion des schémas et des étiquettes, l'ajout, la mise à jour et la suppression de nœuds et d'arêtes, ainsi que les tâches d'import/export de données par lots. La compétence applique des mesures de sécurité strictes, comme le blocage des suppressions en masse non qualifiées via une fonction `validateCypher()` intégrée, et exige une confirmation explicite de l'utilisateur pour les opérations à haut risque comme l'effacement complet du graphe. Elle prend en charge les environnements d'exécution Python (version 3.8+) et Node.js (version 14+) et s'appuie sur des scripts locaux (`scripts/ges_graph_skill.py` ou `scripts/ges_graph_skill.js`) pour exécuter les opérations de manière sécurisée et cohérente. La configuration est assurée via des variables d'environnement ou un fichier CSV, avec une priorité donnée aux variables d'environnement.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/huaweicloud/huaweicloud-skills/tree/HEAD/skills/ai/ges/huawei-cloud-ges-graph

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

⚠️ Méthode d'exécution (À lire impérativement) : Cette compétence exécute les requêtes via des scripts Python ou Node.js locaux sous scripts/. L'utilisation d'appels API directs est interdite.

  • Les scripts de requête se trouvent dans le répertoire de la compétence scripts/ (par exemple, scripts/ges_graph_skill.py)
  • Tous les scripts et scripts de vérification d'environnement sont dans le package de la compétence. Vous devez utiliser skill action=exec pour les exécuter ; ne les exécutez pas directement dans le shell
  • Privilégiez l'exécution en ligne (python -c ou node -e) plutôt que la création de fichiers de script temporaires. Voir la section "Exécution en ligne (Pas de fichiers temporaires)" ci-dessous.
  • Tous les chemins sont relatifs au répertoire de la compétence, qui est le répertoire où se trouve ce SKILL.md

Guide d'accès aux graphes GES

Présentation

Capacité atomique de l'édition persistante du service de moteur graphique Huawei Cloud (GES), fournissant un guide d'accès pour les opérations de base de données graphiques. Couvre les requêtes Cypher, les requêtes GQL, la gestion des schémas/étiquettes, les requêtes d'informations récapitulatives, la modification des données graphiques et d'autres capacités essentielles.

Structure du répertoire

Les conventions de répertoire sont les suivantes (tous les chemins sont relatifs au répertoire de la compétence) :

  1. scripts/ - Contient les scripts d'exécution Python et Node.js
    • ges_graph_skill.py - SDK Python pour les opérations de graphes GES
    • ges_graph_skill.js - SDK Node.js pour les opérations de graphes GES
  2. references/ - Contient la documentation et les exemples de configuration
    • ges_env.csv.example - Modèle de configuration d'environnement
    • cypher-gql-guide.md - Guide d'utilisation complet Cypher/GQL (exemples, tableaux, exécution en ligne)
    • cli-installation-guide.md - Guide d'installation et de configuration de l'environnement d'exécution (Python/Node.js)
    • iam-policies.md - Politiques de permissions IAM minimales pour GES/OBS
    • verification-method.md - Étapes de vérification et liste de contrôle
    • acceptance-criteria.md - Critères d'acceptation (seuils de réussite/échec)
    • user-guide-authentication.md - Méthodes de jeton IAM et authentification par jeton API GitCode
    • chaining-protocol.md - Enveloppe de résultat uniforme et contrat d'appel chaîné

Prérequis

Avant d'utiliser cette compétence, assurez-vous que les conditions suivantes sont remplies :

1. Environnement d'exécution

Prend en charge les environnements d'exécution Python ou Node.js. Nécessite Python 3.8+ ou Node.js 14+.

Dépendances Python : requests (pip install requests). Optionnellement, huaweicloudsdkges peut être installé (pip install huaweicloudsdkges) pour les appels de niveau SDK (ISSUE-013) ; la compétence fonctionne sans cela via son client HTTP intégré. Pour Node.js, aucun package npm externe n'est nécessaire (utilise uniquement https/http de la bibliothèque standard).

2. Configuration de l'instance de graphe

Cette compétence prend en charge à la fois les variables d'environnement et les fichiers de configuration. Les variables d'environnement ont priorité sur les fichiers de configuration.

Variables d'environnement et paramètres

Variable d'environnementDescriptionRequis
GES_GRAPH_IPIP du service GESOui
GES_GRAPH_PORTPort du service GESOui
GES_PROJECT_IDID du projetOui
GES_GRAPH_NAMENom du grapheOui
GES_IAM_URLURL du service IAMOui
GES_REGIONRégionOui
HUAWEI_CLOUD_AKClé d'accèsOui*
HUAWEI_CLOUD_SKClé secrèteOui*
GES_USERNAMENom d'utilisateurConditionnel**
GES_PASSWORDMot de passeConditionnel**
GES_DOMAIN_NAMENom de domaineConditionnel**
GES_TOKENJeton (priorité la plus élevée)Facultatif
  • AK/SK requis pour l'authentification AKSK. ** Nom d'utilisateur/mot de passe conditionnellement requis lorsque AKSK n'est pas disponible.

Fichier de configuration (config/ges_env.csv)

Chemin du fichier de configuration : config/ges_env.csv

Élément de configurationDescriptionRequisExemple de valeur
graph_ipIP du service GESOui100.95.xxx.xxx
graph_portPort du service GESOui80
project_idID du projetOuivotre_id_projet
graph_nameNom du grapheOuivotre_nom_graphe
iam_urlURL du service IAMOui(voir le tableau des régions ci-dessous)
access_keyClé d'accèsOui*votre_clé_accès
secret_keyClé secrèteOui*votre_clé_secrète
usernameNom d'utilisateurConditionnel**votre_nom_utilisateur
passwordMot de passeConditionnel**votre_mot_de_passe
domain_nameNom de domaineConditionnel**votre_nom_domaine
regionRégionOuicn-north-4
  • access_key/secret_key requis pour l'authentification AKSK. ** username/password/domain_name conditionnellement requis lorsque AKSK n'est pas disponible.

URL IAM par région

RégionURLprotocole
cn-north-4iam.cn-north-4.myhuaweicloud.com/v3/auth/tokensHTTPS
ap-southeast-1iam.ap-southeast-1.myhuaweicloud.com/v3/auth/tokensHTTPS

Trois méthodes sont prises en charge (priorité de la plus élevée à la plus faible) :

  1. Variable d'environnement GES_TOKEN
  2. Méthode AKSK (HUAWEI_CLOUD_AK + HUAWEI_CLOUD_SK ou access_key + secret_key)
  3. Méthode par mot de passe (nom d'utilisateur + mot de passe + nom de domaine)

⛔ Opérations interdites (Garde-fou de sécurité)

Cette compétence applique des garde-fous de sécurité au niveau du code (ISSUE-002), au-delà des contraintes documentaires :

  • validateCypher() dans scripts/ges_graph_skill.py / ges_graph_skill.js intercepte les instructions de suppression/vidage intégral non limitées (telles que MATCH (n) DETACH DELETE n, MATCH ()-[r]->() DELETE r, DROP ALL, etc.) ;
  • Les opérations ciblées d'ajout/suppression/modification (avec WHERE ... id(n)=... ou element_id(...)) ne sont pas affectées ;
  • Toutes les valeurs de propriétés doivent être des scalaires JSON (str/int/float/bool/None), les dict/list/bytes sont refusés ;
  • Si un vidage intégral est vraiment nécessaire, veuillez utiliser l'interface dédiée clear_graph() (ou clearGraph()), et obtenez d'abord une confirmation explicite de l'utilisateur, puis autorisez avec allow_destructive=True.
Opération interditeDescriptionRaison
❌ Affichage d'identifiants sensiblesAffichage d'AK/SK, mot de passe, jeton ou autres informations sensiblesRisque de fuite d'informations sensibles

Les opérations à haut risque suivantes nécessitent une confirmation explicite de l'agent avant exécution :

Opération à haut risqueDescriptionInvite de confirmation
⚠️ Effacement de toutes les données du grapheclear_graph() ou opérations d'effacement similaires"Êtes-vous sûr de vouloir effacer toutes les données du graphe ? Cette opération est irréversible."
⚠️ Suppression par lots de nœuds/arêtesSuppression en masse inconditionnelle de tous les nœuds ou arêtes"Êtes-vous sûr de vouloir supprimer par lots tous les nœuds/arêtes ? Cette opération est irréversible."

Si un utilisateur demande l'une des opérations à haut risque ci-dessus, une confirmation explicite doit être obtenue : "Il s'agit d'une opération à haut risque et nécessite votre confirmation explicite. Veuillez répondre par 'confirmer' pour continuer."

Langages de requête Cypher et GQL

GES prend en charge deux langages de requête : Cypher (compatible Neo4j) et GQL (langage de requête graphique standard international).

Le guide d'utilisation complet (exemples Python/Node.js, exécution en ligne skill action=exec, instructions Cypher/GQL courantes et le tableau des différences Cypher↔GQL) se trouve dans references/cypher-gql-guide.md.

Flux de travail

Tâche 1 : Interroger le graphe (lecture seule, l'agent peut s'exécuter automatiquement)

1. Choisissez un environnement d'exécution : Python (`ges_graph_skill.py`) ou Node.js (`ges_graph_skill.js`). Les deux exposent la même API.
2. Chargez la configuration (variables d'environnement > `references/ges_env.csv.example`) — exécutez les vérifications en ligne ci-dessous une fois par session.
3. Exécutez une requête Cypher ou GQL via `execute_query()` / `execute_gql()` (ou `executeCypher` / `executeGql` dans Node.js).
4. Retournez l'enveloppe JSON unifiée `{"results": [...], "errors": []}` à l'utilisateur.

Exécution en ligne (pas de fichiers temporaires) : privilégiez l'exécution en ligne plutôt que la création de fichiers de script temporaires. Par exemple, exécutez la requête Python depuis le répertoire de la compétence :

python3 - <<'PY'
import sys; sys.path.insert(0, "scripts")
from ges_graph_skill import get_skill
s = get_skill()
print(s.execute_query("MATCH (n) RETURN n LIMIT 10"))
PY

node -e 'const { GESGraphSkill } = require("./scripts/ges_graph_skill.js");
const s = new GESGraphSkill(); s.executeQuery("MATCH (n) RETURN n LIMIT 10").then(console.log);'

Voir references/cypher-gql-guide.md pour plus d'exemples d'exécution en ligne skill action=exec.

Tâche 2 : Modifier les données du graphe (ajouter/mettre à jour/supprimer des nœuds et des arêtes)

1. Validez que les valeurs des propriétés sont des scalaires JSON (chaîne/nombre/booléen/nul) — le code applique cette règle (ISSUE-002).
2. Appelez la méthode CRUD correspondante (`add_node`/`update_node`/`delete_node`, `add_edge`/`delete_edge`).
3. Pour les importations en masse, respectez la limite de 500 nœuds par appel (divisez en lots, ISSUE-010).
4. Retournez le résultat de l'opération (l'enveloppe unifiée ou un résumé `{id, ...}`).

Tâche 3 : Opérations à haut risque (nécessitent une confirmation explicite de l'utilisateur)

1. `clear_graph()` ou toute suppression en masse non qualifiée est BLOQUÉE au niveau Cypher par `validateCypher()`.
2. Pour effacer tout le graphe, appelez `clear_graph()` (ou `clearGraph()` dans Node.js) avec `allow_destructive=True`.
3. AVANT d'exécuter, demandez à l'utilisateur : "Il s'agit d'une opération à haut risque et nécessite votre confirmation explicite. Veuillez répondre par 'confirmer' pour continuer."
4. Après confirmation seulement, exécutez et retournez l'ID du travail / le résultat.

Tâche 4 : Importer / Exporter des données du graphe (travaux asynchrones)

1. Préparez les chemins OBS pour les fichiers de schéma/sommet/arête (`import_graph`) ou un chemin d'exportation (`export_graph`).
2. Soumettez le travail — un `{"jobId": ...}` est retourné immédiatement.
3. Interrogez `get_job_status(jobId)` jusqu'à ce que le travail atteigne un état terminal.
4. Signalez l'état et tout message d'erreur du travail à l'utilisateur.

Vérification et acceptation : les contrôles détaillés de réussite/échec se trouvent dans references/verification-method.md et references/acceptance-criteria.md.

Interfaces principales (Commandes principales)

Requête Cypher

# Exécute une requête Cypher
résultat = skill.execute_query("MATCH (n) RETURN n LIMIT 10")

# Exécute une requête Cypher avec paramètres
résultat = skill.execute_query(
    "MATCH (n) WHERE n.name = $name RETURN n",
    parameters={"name": "张三"}
)

Opérations sur les sommets

# Ajoute un nœud
résultat = skill.client.add_node(
    node_id="mem_001",
    labels=["Memory", "conversation"],
    properties={"content": "User said Hello", "timestamp": 1234567890}
)

# Ajoute un nœud de manière idempotente (upsert). Le nœud existe → met à jour les propriétés ; sinon → crée (ISSUE-004)
résultat = skill.client.add_node(
    node_id="mem_001",
    labels=["Memory"],
    properties={"content": "Updated content"},
    upsert=True
)

# Ajoute des nœuds par lots (max 500 par appel, garde-fou de limite ISSUE-010)
résultat = skill.client.add_nodes_batch([
    {"id": "mem_001", "labels": ["Memory"], "properties": {"content": "test1"}},
    {"id": "mem_002", "labels": ["Memory"], "properties": {"content": "test2"}}
])

# Récupère un nœud
résultat = skill.client.get_node("mem_001")

# Met à jour un nœud
résultat = skill.client.update_node("mem_001", {"content": "New content"})

# Supprime un nœud
résultat = skill.client.delete_node("mem_001")

Opérations sur les arêtes

# Ajoute une arête
résultat = skill.client.add_edge(
    start_node_id="mem_001",
    end_node_id="mem_002",
    edge_type="RELATED_TO",
    properties={"weight": 0.8}
)

# Supprime une arête
résultat = skill.client.delete_edge("mem_001", "mem_002", "RELATED_TO")

# Récupère les arêtes d'un nœud
résultat = skill.client.get_edges("mem_001", direction="both")

Opérations sur les étiquettes

# Ajoute une étiquette à un nœud
résultat = skill.client.add_label_to_node("mem_001", "important")

# Interroge les nœuds par étiquette
résultat = skill.client.get_nodes_by_label("Memory", limit=100)

Gestion du graphe

# Récupère les informations de schéma
résultat = skill.get_schema_info()

# Récupère les statistiques du graphe
résultat = skill.get_statistics()

# Efface toutes les données du graphe (opération dangereuse, nécessite la confirmation de l'utilisateur)
résultat = skill.client.clear_graph()

Import/Export

# Importe des données de graphe
job_id = skill.client.import_graph(
    schema_path="obs://bucket/schema.xml",
    vertex_path="obs://bucket/vertex",
    edge_path="obs://bucket/edge"
)

# Exporte des données de graphe (access_key/secret_key sont lus automatiquement depuis config/ges_env.csv)
job_id = skill.client.export_graph(
    export_path="obs://bucket/export",
    vertex_set_name="set_vertex",
    edge_set_name="set_edge"
)

Guide de syntaxe GES

Gestion des ID de nœuds

GES utilise la propriété spéciale _ID_ pour gérer les ID de nœuds de type chaîne :

  • La création de nœuds utilise la propriété _ID_ :

    CREATE (n:Memory{_ID_: 'mem_001', content: 'test'})
    
  • Les autres opérations utilisent la fonction id() :

    MATCH (n) WHERE id(n) = 'mem_001' RETURN n
    MATCH (n)-[r]->(m) WHERE id(n) = 'mem_001' RETURN r
    

Exigences de schéma

GES nécessite que le schéma (étiquettes et propriétés) soit défini avant que les nœuds correspondants puissent être créés. Le schéma peut être défini via :

  1. Création d'étiquettes et de propriétés via la console de gestion GES
  2. Importation de données avec schéma via l'interface d'importation

Confirmation des paramètres

Avant d'exécuter une tâche, les paramètres suivants doivent être confirmés avec l'utilisateur. Il est interdit de deviner.

ParamètreRequis/FacultatifDescriptionValeur par défaut
Instance de grapheRequisGES_GRAPH_IP / GES_GRAPH_PORT / GES_GRAPH_NAME / GES_PROJECT_ID — sur quelle instance GES opérerDepuis la configuration env/CSV
Instruction de requêteRequisInstruction Cypher ou GQL, plus un dictionnaire de paramètres scalaires JSON-
Propriétés de nœud/arêteRequis pour les écrituresSeuls les scalaires JSON (chaîne/nombre/booléen/nul) sont acceptés-
Périmètre de l'opérationRequis pour les opérations à haut risqueclear_graph / suppression en masse nécessitent une confirmation explicite de l'utilisateur-
Chemins d'import/exportRequisChemins OBS bucket/objet pour les fichiers de schéma/sommet/arête-

Remarque : les paramètres de connexion sont lus depuis l'environnement ou config/ges_env.csv (references/ges_env.csv.example) ; ils ne sont jamais nécessaires à passer par appel.

Format de réponse

Toutes les interfaces Cypher retournent un format JSON unifié :

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

Dépannage

Problèmes courants

  1. Erreur : "Name or service not known"

    • Vérifiez que GES_GRAPH_IP est accessible depuis l'environnement actuel. 100.95.x.x sont des IP privées et peuvent ne pas être accessibles.
  2. Erreur : "Invalid token"

    • Le jeton IAM a une durée de validité de 24h. Essayez de le régénérer.
  3. Erreur : "Label does not exist"

    • Le schéma (étiquette + propriétés) doit être créé avant les données. Créez d'abord le schéma via la console GES ou une importation de schéma.
  4. Erreur : "Only JSON scalar types allowed"

    • La valeur d'une propriété doit être un type scalaire JSON (chaîne, nombre, booléen, nul). Les dictionnaires, listes, bytes ne sont pas autorisés.
  5. Script : erreur locale "get_skill" non trouvé

    • Assurez-vous que scripts/ est dans sys.path (Python) ou que le chemin est correct (Node.js). Exécutez toujours depuis le répertoire racine de la compétence.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

huaweicloud/huawei-cloud-dws-io-diag

DWS cluster I/O overload root cause diagnosis skill, based on KooCLI v3.2.0+ and DWS Autopilot MCP Server. Automatically collects I/O metrics, analyzes root causes (customer-side / system-side) via three-stage decision tree, and outputs a standardized diagnosis report. Applicable to DWS cluster I/O usage too high, I/O alarms, disk I/O load anomaly scenarios. Trigger words: "I/O高", "I/O告警", "I/O诊断", "I/O过载", "IO高", "IO告警", "IO诊断", "IO过载", "磁盘IO负载异常", "util打满", "await高", "high I/O", "I/O alarm", "I/O diagnosis"

huaweicloud/huawei-cloud-ecs-manage

Use when managing Huawei Cloud ECS (Elastic Cloud Server / 弹性云服务器) instances — lifecycle management (create / start / stop / restart / delete), day-to-day change operations (resize / reinstall OS / reset password / replace keypair / bind & unbind EIP / change security group / add & remove NIC / attach & detach volume), instance querying, quota/flavor/image inspection, mandatory async-job polling after every write, and multi-step root-cause diagnosis of ECS instance creation failures (quota → flavor → image → network → keypair → disk). Provides 23 huawei_* actions: huawei_list_ecs_instances, huawei_get_ecs_instance, huawei_list_ecs_flavors, huawei_list_ecs_images, huawei_list_ecs_quotas, huawei_diagnose_ecs_create_failure, huawei_analyze_ecs_health, huawei_create_ecs_instance, huawei_start_ecs_instance, huawei_stop_ecs_instance, huawei_restart_ecs_instance, huawei_delete_ecs_instance, huawei_resize_ecs_instance, huawei_reinstall_ecs_os, huawei_reset_ecs_password, huawei_replace_ecs_keypair, huawei_bind_ecs_eip

huaweicloud/huawei-cloud-obs-upload

Upload a local file or directory to a specified Huawei Cloud OBS (Object Storage Service) bucket with obsutil, and set up a scheduled/periodic upload task (crontab) that syncs a local directory to an OBS bucket. Also lists OBS buckets with storage capacity and object count. Use this skill when the user wants to: (1) upload a specific local file or directory to a named OBS bucket, (2) set up a scheduled/periodic upload task that automatically syncs a local directory to a named OBS bucket, (3) list their OBS buckets and check capacity and object count. Triggers include: user mentions "upload to OBS bucket", "上传文件到OBS", "上传目录到OBS", "定时上传到OBS", "目录同步到OBS桶", "OBS scheduled upload", "OBS周期上传", "OBS bucket capacity check", "OBS桶容量查询". Generic phrases such as "object storage", "upload file" or "upload directory" alone are NOT sufficient to trigger this skill.

huaweicloud/huawei-cloud-obs-website-host

Configure Huawei Cloud OBS static website hosting with Python SDK and a custom domain. Use when the user needs to enable or repair OBS website hosting, set index or error pages, expose an existing bucket for public website access through a custom domain, or connect that domain through Huawei Cloud DNS when Huawei manages the zone. Triggers include OBS static website hosting, website endpoint, index page, error page, public-read bucket website access, custom domain CNAME, Huawei Cloud DNS, setBucketWebsite. 中文触发词包括:OBS 静态网站托管、网站托管、自定义域名解析。

Skills associés