CommunityProgramación y desarrollogithub.com

huaweicloud/huawei-cloud-ges-graph

Proporciona una guía de acceso para el servicio de base de datos de grafos GES de Huawei Cloud. Cubre consultas Cypher, consultas GQL, gestión de esquemas/etiquetas, consultas de información resumida, edición de datos de grafos y más. Use esta habilidad cuando los usuarios quieran operar el servicio de base de datos de grafos GES de Huawei Cloud a través del terminal.

¿Qué es huawei-cloud-ges-graph?

Esta habilidad para agentes de IA proporciona una guía completa para acceder y operar el servicio de base de datos de grafos GES (Graph Engine Service) de Huawei Cloud. Está diseñada para permitir que agentes de IA, como Claude Code, Cursor o Codex, ejecuten operaciones de grafos a través de la terminal. Con soporte tanto para los lenguajes de consulta Cypher (compatible con Neo4j) como GQL (estándar internacional), la habilidad cubre una amplia gama de capacidades: desde consultas simples de lectura, gestión de esquemas y etiquetas, hasta operaciones de edición de grafos (añadir, actualizar, eliminar nodos y aristas), importación/exportación asíncrona de datos, y verificación de metadatos del grafo. La habilidad se ejecuta mediante scripts locales de Python o Node.js (bajo `scripts/`), con una estricta política de seguridad que bloquea operaciones destructivas no calificadas y requiere confirmación explícita del usuario para acciones de alto riesgo. Además, proporciona un formato de respuesta JSON unificado para todas las interfaces, facilitando el encadenamiento de llamadas entre agentes. Es esencial para agentes que necesitan integrar y manipular datos en instancias de GES de Huawei Cloud, asegurando un acceso controlado y eficiente a la base de datos de grafos.

Compatible con✓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 Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

⚠️ Método de Ejecución (Lectura Obligatoria): Esta habilidad ejecuta consultas a través de scripts locales de Python o Node.js ubicados en scripts/. Está prohibido el uso de llamadas API directas.

  • Los scripts de consulta se encuentran bajo el directorio de la habilidad scripts/ (ej., scripts/ges_graph_skill.py)
  • Todos los scripts y scripts de verificación del entorno están dentro del paquete de la habilidad. Debe usar skill action=exec para ejecutarlos; no los ejecute directamente en el shell
  • Prefiera la ejecución inline (python -c o node -e) en lugar de crear archivos de script temporales. Consulte la sección "Ejecución Inline (Sin Archivos Temporales)" más abajo.
  • Todas las rutas son relativas al directorio de la habilidad, que es el directorio donde reside este SKILL.md

Guía de Acceso a Grafos GES

Resumen

Capacidad atómica de la edición persistente del Servicio de Motor de Grafos (GES) de Huawei Cloud, proporcionando una guía de acceso para operaciones de bases de datos de grafos. Cubre consultas Cypher, consultas GQL, gestión de esquemas/etiquetas, consultas de información resumida, edición de datos de grafos y otras capacidades principales.

Estructura de Directorios

Las convenciones de directorio son las siguientes (todas las rutas son relativas al directorio de la habilidad):

  1. scripts/ - Contiene los scripts de ejecución de Python y Node.js
    • ges_graph_skill.py - SDK de Python para operaciones de grafos GES
    • ges_graph_skill.js - SDK de Node.js para operaciones de grafos GES
  2. references/ - Contiene documentación y ejemplos de configuración
    • ges_env.csv.example - Plantilla de configuración de entorno
    • cypher-gql-guide.md - Guía completa de uso de Cypher/GQL (ejemplos, tablas, ejecución inline)
    • cli-installation-guide.md - Guía de instalación y configuración del runtime (Python/Node.js)
    • iam-policies.md - Políticas de permisos IAM mínimas para GES/OBS
    • verification-method.md - Pasos de verificación y lista de comprobación
    • acceptance-criteria.md - Criterios de aceptación (umbrales de aprobado/fallo)
    • user-guide-authentication.md - Métodos de token IAM y autenticación mediante Token API de GitCode
    • chaining-protocol.md - Envoltura de resultados uniforme y contrato de llamadas encadenadas

Requisitos Previos

Antes de usar esta habilidad, asegúrese de que se cumplan las siguientes condiciones:

1. Entorno de Ejecución

Soporta runtime de Python o Node.js. Requiere Python 3.8+ o Node.js 14+.

Dependencias de Python: requests (pip install requests). Opcionalmente, huaweicloudsdkges puede instalarse (pip install huaweicloudsdkges) para llamadas a nivel de SDK (ISSUE-013); la habilidad funciona sin él a través de su cliente HTTP integrado. Para Node.js, no se requieren paquetes npm externos (usa solo https/http de la biblioteca estándar).

2. Configuración de la Instancia de Grafo

Esta habilidad soporta tanto variables de entorno como archivos de configuración. Las variables de entorno tienen prioridad sobre los archivos de configuración.

Variables de Entorno y Parámetros

Variable de EntornoDescripciónRequerido
GES_GRAPH_IPIP del servicio GESSí
GES_GRAPH_PORTPuerto del servicio GESSí
GES_PROJECT_IDID del proyectoSí
GES_GRAPH_NAMENombre del grafoSí
GES_IAM_URLURL del servicio IAMSí
GES_REGIONRegiónSí
HUAWEI_CLOUD_AKClave de accesoSí*
HUAWEI_CLOUD_SKClave secretaSí*
GES_USERNAMENombre de usuarioCondicional**
GES_PASSWORDContraseñaCondicional**
GES_DOMAIN_NAMENombre de dominioCondicional**
GES_TOKENToken (máxima prioridad)Opcional
  • Se requiere AK/SK para autenticación AKSK. ** Nombre de usuario/contraseña condicionalmente requerido cuando AKSK no está disponible.

Archivo de Configuración (config/ges_env.csv)

Ruta del archivo de configuración: config/ges_env.csv

Elemento de ConfiguraciónDescripciónRequeridoValor de Ejemplo
graph_ipIP del servicio GESSí100.95.xxx.xxx
graph_portPuerto del servicio GESSí80
project_idID del proyectoSíyour_project_id
graph_nameNombre del grafoSíyour_graph_name
iam_urlURL del servicio IAMSí(ver tabla de regiones abajo)
access_keyClave de accesoSí*your_access_key
secret_keyClave secretaSí*your_secret_key
usernameNombre de usuarioCondicional**your_username
passwordContraseñaCondicional**your_password
domain_nameNombre de dominioCondicional**your_domain_name
regionRegiónSícn-north-4
  • access_key/secret_key requeridos para autenticación AKSK. ** username/password/domain_name condicionalmente requeridos cuando AKSK no está disponible.

URLs de IAM por Región

RegiónURLprotocolo
cn-north-4iam.cn-north-4.myhuaweicloud.com/v3/auth/tokensHTTPS
ap-southeast-1iam.ap-southeast-1.myhuaweicloud.com/v3/auth/tokensHTTPS

Se soportan tres métodos (prioridad de mayor a menor):

  1. Variable de entorno GES_TOKEN
  2. Método AKSK (HUAWEI_CLOUD_AK + HUAWEI_CLOUD_SK o access_key + secret_key)
  3. Método de contraseña (username + password + domain_name)

⛔ Operaciones Prohibidas (Barrera de Seguridad)

Esta habilidad impone una barrera de seguridad a nivel de código (ISSUE-002), más allá de las restricciones documentales:

  • validateCypher() en scripts/ges_graph_skill.py / ges_graph_skill.js intercepta sentencias de eliminación/vaciado total sin restricciones (como MATCH (n) DETACH DELETE n, MATCH ()-[r]->() DELETE r, DROP ALL, etc.);
  • Las inserciones, actualizaciones y eliminaciones dirigidas (con WHERE ... id(n)=... o element_id(...)) no se ven afectadas;
  • Todos los valores de propiedades solo permiten escalares JSON (str/int/float/bool/None), rechazando dict/list/bytes;
  • Si realmente se necesita un vaciado completo, use la interfaz dedicada clear_graph() (o clearGraph()), y primero obtenga la confirmación explícita del usuario, luego ejecute con allow_destructive=True.
Operación ProhibidaDescripciónRazón
❌ Imprimir credenciales sensiblesImprimir AK/SK, contraseña, token u otra información sensibleRiesgo de fuga de información sensible

Las siguientes operaciones de alto riesgo requieren confirmación explícita del agente antes de la ejecución:

Operación de Alto RiesgoDescripciónMensaje de Confirmación
⚠️ Limpiar todos los datos del grafoclear_graph() o operaciones de limpieza similares"¿Está seguro de que desea limpiar todos los datos en el grafo? Esta operación es irreversible."
⚠️ Eliminar nodos/aristas en loteEliminación masiva incondicional de todos los nodos o aristas"¿Está seguro de que desea eliminar en lote todos los nodos/aristas? Esta operación es irreversible."

Si un usuario solicita alguna de las operaciones de alto riesgo anteriores, se debe obtener confirmación explícita: "Esta es una operación de alto riesgo y requiere su confirmación explícita. Por favor, responda 'confirmar' para continuar."

Lenguajes de Consulta Cypher y GQL

GES soporta dos lenguajes de consulta: Cypher (compatible con Neo4j) y GQL (lenguaje de consulta de grafos estándar internacional).

La guía de uso completa (ejemplos de Python/Node.js, ejecución inline con skill action=exec, sentencias Cypher/GQL comunes y la tabla de diferencias Cypher↔GQL) se encuentra en references/cypher-gql-guide.md.

Flujo de Trabajo

Tarea 1: Consultar el Grafo (solo lectura, el agente puede ejecutarla automáticamente)

1. Elija un runtime: Python (`ges_graph_skill.py`) o Node.js (`ges_graph_skill.js`). Ambos exponen la misma API.
2. Cargue la configuración (vars de entorno > `references/ges_env.csv.example`) — ejecute las comprobaciones inline a continuación una vez por sesión.
3. Ejecute una consulta Cypher o GQL mediante `execute_query()` / `execute_gql()` (o `executeCypher` / `executeGql` en Node.js).
4. Devuelva la envoltura JSON unificada `{"results": [...], "errors": []}` al usuario.

Ejecución inline (sin archivos temporales): prefiera la ejecución inline en lugar de crear archivos de script temporales. Por ejemplo, ejecute la consulta Python desde el directorio de la habilidad:

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);'

Consulte references/cypher-gql-guide.md para más ejemplos de inline skill action=exec.

Tarea 2: Editar Datos del Grafo (añadir/actualizar/eliminar nodos y aristas)

1. Valide que los valores de las propiedades sean escalares JSON (cadena/número/booleano/nulo) — el código lo impone (ISSUE-002).
2. Llame al método CRUD correspondiente (`add_node`/`update_node`/`delete_node`, `add_edge`/`delete_edge`).
3. Para importaciones masivas, respete el límite de 500 nodos por llamada (divida en fragmentos, ISSUE-010).
4. Devuelva el resultado de la operación (la envoltura unificada o un resumen `{id, ...}`).

Tarea 3: Operaciones de Alto Riesgo (requieren confirmación explícita del usuario)

1. `clear_graph()` o cualquier eliminación masiva sin calificar es BLOQUEADA a nivel Cypher por `validateCypher()`.
2. Para limpiar todo el grafo, llame a `clear_graph()` (o `clearGraph()` en Node.js) con `allow_destructive=True`.
3. ANTES de ejecutar, pregunte al usuario: "Esta es una operación de alto riesgo y requiere su confirmación explícita. Por favor, responda 'confirmar' para continuar."
4. Solo después de la confirmación, ejecute y devuelva el id del trabajo / resultado.

Tarea 4: Importar / Exportar Datos del Grafo (trabajos asíncronos)

1. Prepare las rutas OBS para los archivos de esquema/vértice/arista (`import_graph`) o una ruta de exportación (`export_graph`).
2. Envíe el trabajo — se devuelve inmediatamente un `{"jobId": ...}`.
3. Consulte `get_job_status(jobId)` hasta que el trabajo alcance un estado terminal.
4. Informe al usuario sobre el estado y cualquier mensaje de error del trabajo.

Verificación y aceptación: las comprobaciones detalladas de aprobado/fallo están en references/verification-method.md y references/acceptance-criteria.md.

Interfaces Principales (Comandos Principales)

Consulta Cypher

# Ejecutar una consulta Cypher
resultado = skill.execute_query("MATCH (n) RETURN n LIMIT 10")

# Ejecutar una consulta Cypher con parámetros
resultado = skill.execute_query(
    "MATCH (n) WHERE n.name = $name RETURN n",
    parameters={"name": "张三"}
)

Operaciones con Vértices

# Añadir un nodo
resultado = skill.client.add_node(
    node_id="mem_001",
    labels=["Memory", "conversation"],
    properties={"content": "El usuario dijo Hola", "timestamp": 1234567890}
)

# Añadir un nodo de forma idempotente (upsert). Nodo existe → actualiza propiedades; si no → crea (ISSUE-004)
resultado = skill.client.add_node(
    node_id="mem_001",
    labels=["Memory"],
    properties={"content": "Contenido actualizado"},
    upsert=True
)

# Añadir nodos en lote (máximo 500 por llamada, barrera de límite ISSUE-010)
resultado = skill.client.add_nodes_batch([
    {"id": "mem_001", "labels": ["Memory"], "properties": {"content": "prueba1"}},
    {"id": "mem_002", "labels": ["Memory"], "properties": {"content": "prueba2"}}
])

# Obtener un nodo
resultado = skill.client.get_node("mem_001")

# Actualizar un nodo
resultado = skill.client.update_node("mem_001", {"content": "Nuevo contenido"})

# Eliminar un nodo
resultado = skill.client.delete_node("mem_001")

Operaciones con Aristas

# Añadir una arista
resultado = skill.client.add_edge(
    start_node_id="mem_001",
    end_node_id="mem_002",
    edge_type="RELATED_TO",
    properties={"weight": 0.8}
)

# Eliminar una arista
resultado = skill.client.delete_edge("mem_001", "mem_002", "RELATED_TO")

# Obtener aristas de un nodo
resultado = skill.client.get_edges("mem_001", direction="both")

Operaciones con Etiquetas

# Añadir una etiqueta a un nodo
resultado = skill.client.add_label_to_node("mem_001", "important")

# Consultar nodos por etiqueta
resultado = skill.client.get_nodes_by_label("Memory", limit=100)

Gestión del Grafo

# Obtener información del esquema
resultado = skill.get_schema_info()

# Obtener estadísticas del grafo
resultado = skill.get_statistics()

# Limpiar todos los datos en el grafo (operación peligrosa, requiere confirmación del usuario)
resultado = skill.client.clear_graph()

Importar/Exportar

# Importar datos del grafo
job_id = skill.client.import_graph(
    schema_path="obs://bucket/schema.xml",
    vertex_path="obs://bucket/vertex",
    edge_path="obs://bucket/edge"
)

# Exportar datos del grafo (access_key/secret_key se leen automáticamente de 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"
)

Guía de Sintaxis GES

Manejo de ID de Nodo

GES usa la propiedad especial _ID_ para manejar IDs de nodo de tipo cadena:

  • Crear nodos usa la propiedad _ID_:

    CREATE (n:Memory{_ID_: 'mem_001', content: 'test'})
    
  • Otras operaciones usan la función id():

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

Requisitos de Esquema

GES requiere que el esquema (Etiquetas y Propiedades) se defina antes de que se puedan crear los nodos correspondientes. El esquema se puede definir mediante:

  1. Crear Etiquetas y propiedades a través de la consola de gestión de GES
  2. Importar datos con esquema a través de la interfaz de importación

Confirmación de Parámetros

Antes de ejecutar cualquier tarea, los siguientes parámetros deben ser confirmados con el usuario. Está prohibido adivinar.

ParámetroRequerido/OpcionalDescripciónValor por Defecto
Instancia de grafoRequeridoGES_GRAPH_IP / GES_GRAPH_PORT / GES_GRAPH_NAME / GES_PROJECT_ID — qué instancia de GES operarDe la configuración env/CSV
Sentencia de consultaRequeridoSentencia Cypher o GQL, más un diccionario de parámetros escalares JSON-
Propiedades de nodo/aristaRequerido para escriturasSolo se aceptan escalares JSON (cadena/número/booleano/nulo)-
Ámbito de operaciónRequerido para operaciones de alto riesgoclear_graph / eliminación masiva requieren confirmación explícita del usuario-
Rutas de importación/exportaciónRequeridoRutas de bucket/objeto OBS para los archivos de esquema/vértice/arista-

Nota: los parámetros de conexión se leen del entorno o de config/ges_env.csv (references/ges_env.csv.example); nunca es necesario pasarlos por llamada.

Formato de Respuesta

Todas las interfaces Cypher devuelven un formato JSON unificado:

{
  "results": [
    {
      "columns": ["columna1", "columna2"],
      "data": [
        {"row": ["valor1", "valor2"], "meta": [null, null]}
      ]
    }
  ],
  "error"

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 relacionados