huaweicloud/huawei-cloud-ges-graph

Fornece guia de acesso para o serviço de banco de dados de grafo GES da Huawei Cloud. Abrange consultas Cypher, consultas GQL, gerenciamento de esquema/rótulo, consultas de informações resumidas, edição de dados de grafo e muito mais. Use esta skill quando os usuários quiserem operar o serviço de banco de dados de grafo GES da Huawei Cloud via terminal.

O que é huawei-cloud-ges-graph?

Esta skill capacita agentes de IA a interagir com o serviço de grafo GES (Graph Engine Service) da Huawei Cloud por meio de scripts Python ou Node.js locais. Ela fornece uma interface abrangente para executar consultas Cypher e GQL, gerenciar nós, arestas e rótulos, executar importações/exportações assíncronas e recuperar metadados do esquema. A skill impõe barreiras de segurança críticas, bloqueando automaticamente operações destrutivas não qualificadas (como excluir todos os nós) no nível do código, a menos que a confirmação explícita do usuário seja obtida. Ela usa um formato de envelope JSON unificado para todos os resultados de operação e suporta vários métodos de autenticação (token, AK/SK, nome de usuário/senha). A configuração pode ser feita através de variáveis de ambiente ou de um arquivo CSV, sendo as variáveis de ambiente priorizadas. Esta skill destina-se a desenvolvedores que precisam automatizar o gerenciamento de dados de grafo e consultas no GES, garantindo operações seguras e auditáveis, especialmente para modificações em massa ou em todo o grafo.

Funciona com✓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 Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

⚠️ Método de Execução (Leitura Obrigatória): Esta skill executa consultas via scripts Python ou Node.js locais em scripts/. O uso de chamadas de API diretas é proibido.

  • Os scripts de consulta estão localizados no diretório da skill scripts/ (por exemplo, scripts/ges_graph_skill.py)
  • Todos os scripts e scripts de verificação de ambiente estão dentro do pacote da skill. Você deve usar skill action=exec para executá-los; não os execute diretamente no shell
  • Prefira a execução inline (python -c ou node -e) em vez de criar arquivos de script temporários. Consulte a seção "Execução Inline (Sem Arquivos Temporários)" abaixo.
  • Todos os caminhos são relativos ao diretório da skill, que é o diretório onde este SKILL.md reside

Guia de Acesso ao Grafo GES

Visão Geral

Capacidade atômica da edição persistente do Huawei Cloud Graph Engine Service (GES), fornecendo um guia de acesso para operações de banco de dados de grafo. Abrange consultas Cypher, consultas GQL, gerenciamento de esquema/rótulo, consultas de informações resumidas, edição de dados de grafo e outras capacidades principais.

Estrutura de Diretórios

As convenções de diretório são as seguintes (todos os caminhos são relativos ao diretório da skill):

  1. scripts/ - Contém os scripts de execução Python e Node.js
    • ges_graph_skill.py - SDK Python para operações de grafo GES
    • ges_graph_skill.js - SDK Node.js para operações de grafo GES
  2. references/ - Contém documentação e exemplos de configuração
    • ges_env.csv.example - Modelo de configuração de ambiente
    • cypher-gql-guide.md - Guia completo de uso Cypher/GQL (exemplos, tabelas, execução inline)
    • cli-installation-guide.md - Guia de instalação e configuração do runtime (Python/Node.js)
    • iam-policies.md - Políticas de permissão IAM mínimas para GES/OBS
    • verification-method.md - Etapas de verificação e checklist
    • acceptance-criteria.md - Critérios de aceitação (limiares de aprovação/reprovação)
    • user-guide-authentication.md - Métodos de token IAM e autenticação GitCode API Token
    • chaining-protocol.md - Envelope de resultado uniforme e contrato de chamada encadeada

Pré-requisitos

Antes de usar esta skill, garanta que as seguintes condições sejam atendidas:

1. Ambiente de Execução

Suporta runtime Python ou Node.js. Requer Python 3.8+ ou Node.js 14+.

Dependências Python: requests (pip install requests). Opcionalmente, huaweicloudsdkges pode ser instalado (pip install huaweicloudsdkges) para chamadas de nível SDK (ISSUE-013); a skill funciona sem ele através de seu cliente HTTP interno. Para Node.js, nenhum pacote npm externo é necessário (usa apenas https/http da stdlib).

2. Configuração da Instância de Grafo

Esta skill suporta tanto variáveis de ambiente quanto arquivos de configuração. As variáveis de ambiente têm precedência sobre os arquivos de configuração.

Variáveis de Ambiente e Parâmetros

Variável de AmbienteDescriçãoObrigatório
GES_GRAPH_IPIP do serviço GESSim
GES_GRAPH_PORTPorta do serviço GESSim
GES_PROJECT_IDID do ProjetoSim
GES_GRAPH_NAMENome do grafoSim
GES_IAM_URLURL do serviço IAMSim
GES_REGIONRegiãoSim
HUAWEI_CLOUD_AKChave de AcessoSim*
HUAWEI_CLOUD_SKChave SecretaSim*
GES_USERNAMENome de usuárioCondicional**
GES_PASSWORDSenhaCondicional**
GES_DOMAIN_NAMENome do domínioCondicional**
GES_TOKENToken (maior prioridade)Opcional
  • AK/SK obrigatório para autenticação AKSK. ** Nome de usuário/senha condicionalmente obrigatório quando AKSK não está disponível.

Arquivo de Configuração (config/ges_env.csv)

Caminho do arquivo de configuração: config/ges_env.csv

Item de ConfiguraçãoDescriçãoObrigatórioExemplo de Valor
graph_ipIP do serviço GESSim100.95.xxx.xxx
graph_portPorta do serviço GESSim80
project_idID do ProjetoSimyour_project_id
graph_nameNome do grafoSimyour_graph_name
iam_urlURL do serviço IAMSim(consulte a tabela de regiões abaixo)
access_keyChave de AcessoSim*your_access_key
secret_keyChave SecretaSim*your_secret_key
usernameNome de usuárioCondicional**your_username
passwordSenhaCondicional**your_password
domain_nameNome do domínioCondicional**your_domain_name
regionRegiãoSimcn-north-4
  • access_key/secret_key obrigatório para autenticação AKSK. ** username/password/domain_name condicionalmente obrigatório quando AKSK não está disponível.

URLs IAM por Região

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

Três métodos são suportados (prioridade do maior para o menor):

  1. Variável de ambiente GES_TOKEN
  2. Método AKSK (HUAWEI_CLOUD_AK + HUAWEI_CLOUD_SK ou access_key + secret_key)
  3. Método de senha (username + password + domain_name)

⛔ Operações Proibidas (Barreira de Segurança)

Esta skill impõe barreiras de segurança em nível de código (ISSUE-002), indo além das restrições documentais:

  • validateCypher() em scripts/ges_graph_skill.py / ges_graph_skill.js interceptará instruções de exclusão/limpeza total não qualificadas (como MATCH (n) DETACH DELETE n, MATCH ()-[r]->() DELETE r, DROP ALL, etc.);
  • Operações direcionadas de adição, alteração e exclusão (com WHERE ... id(n)=... ou element_id(...)) não são afetadas;
  • Todos os valores de propriedade permitem apenas escalares JSON (str/int/float/bool/None), rejeitando dict/list/bytes;
  • Se houver necessidade de limpeza total, use a interface dedicada clear_graph() (ou clearGraph()), e obtenha a confirmação explícita do usuário antes de prosseguir com allow_destructive=True.
Operação ProibidaDescriçãoMotivo
❌ Impressão de credenciais confidenciaisImprimir AK/SK, senha, token ou outras informações confidenciaisRisco de vazamento de informações confidenciais

As seguintes operações de alto risco exigem confirmação explícita do agente antes da execução:

Operação de Alto RiscoDescriçãoPrompt de Confirmação
⚠️ Limpar todos os dados do grafoclear_graph() ou operações de limpeza semelhantes"Tem certeza de que deseja limpar todos os dados no grafo? Esta operação é irreversível."
⚠️ Excluir nós/arestas em loteExclusão em massa incondicional de todos os nós ou arestas"Tem certeza de que deseja excluir todos os nós/arestas em lote? Esta operação é irreversível."

Se um usuário solicitar qualquer uma das operações de alto risco acima, a confirmação explícita deve ser obtida: "Esta é uma operação de alto risco e requer sua confirmação explícita. Por favor, responda com 'confirmar' para prosseguir."

Linguagens de Consulta Cypher e GQL

GES suporta duas linguagens de consulta: Cypher (compatível com Neo4j) e GQL (linguagem de consulta de grafo padrão internacional).

O guia de uso completo (exemplos Python/Node.js, execução inline skill action=exec, instruções Cypher/GQL comuns e a tabela de diferenças Cypher↔GQL) está em references/cypher-gql-guide.md.

Fluxo de Trabalho

Tarefa 1: Consultar o Grafo (somente leitura, o agente pode executar automaticamente)

1. Escolha um runtime: Python (`ges_graph_skill.py`) ou Node.js (`ges_graph_skill.js`). Ambos expõem a mesma API.
2. Carregue a configuração (env vars > `references/ges_env.csv.example`) — execute as verificações inline abaixo uma vez por sessão.
3. Execute uma consulta Cypher ou GQL via `execute_query()` / `execute_gql()` (ou `executeCypher` / `executeGql` em Node.js).
4. Retorne o envelope JSON unificado `{"results": [...], "errors": []}` para o usuário.

Execução inline (sem arquivos temporários): prefira execução inline em vez de criar arquivos de script temporários. Por exemplo, execute a consulta Python a partir do diretório da skill:

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 mais exemplos de skill action=exec inline.

Tarefa 2: Editar Dados do Grafo (adicionar/atualizar/excluir nós e arestas)

1. Valide que os valores das propriedades são escalares JSON (string/number/boolean/null) — o código impõe isso (ISSUE-002).
2. Chame o método CRUD correspondente (`add_node`/`update_node`/`delete_node`, `add_edge`/`delete_edge`).
3. Para importações em massa, respeite o limite de 500 nós por chamada (divida em partes, ISSUE-010).
4. Retorne o resultado da operação (o envelope unificado ou um resumo `{id, ...}`).

Tarefa 3: Operações de Alto Risco (exigem confirmação explícita do usuário)

1. `clear_graph()` ou qualquer exclusão em massa não qualificada é BLOQUEADA no nível Cypher por `validateCypher()`.
2. Para limpar todo o grafo, chame `clear_graph()` (ou `clearGraph()` em Node.js) com `allow_destructive=True`.
3. ANTES de executar, pergunte ao usuário: "Esta é uma operação de alto risco e requer sua confirmação explícita. Por favor, responda com 'confirmar' para prosseguir."
4. Somente após a confirmação, execute e retorne o id do job / resultado.

Tarefa 4: Importar / Exportar Dados do Grafo (jobs assíncronos)

1. Prepare os caminhos OBS para os arquivos de esquema/vértice/aresta (`import_graph`) ou um caminho de exportação (`export_graph`).
2. Submeta o job — um `{"jobId": ...}` é retornado imediatamente.
3. Faça polling de `get_job_status(jobId)` até que o job atinja um estado terminal.
4. Reporte o status e qualquer mensagem de erro do job para o usuário.

Verificação e aceitação: verificações detalhadas de aprovação/reprovação estão em references/verification-method.md e references/acceptance-criteria.md.

Interfaces Principais (Comandos Principais)

Consulta Cypher

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

# Executar uma consulta Cypher com parâmetros
resultado = skill.execute_query(
    "MATCH (n) WHERE n.name = $name RETURN n",
    parameters={"name": "João"}
)

Operações com Vértices

# Adicionar um nó
resultado = skill.client.add_node(
    node_id="mem_001",
    labels=["Memory", "conversation"],
    properties={"content": "Usuário disse Olá", "timestamp": 1234567890}
)

# Adicionar um nó de forma idempotente (upsert). Nó existe → atualiza propriedades; senão → cria (ISSUE-004)
resultado = skill.client.add_node(
    node_id="mem_001",
    labels=["Memory"],
    properties={"content": "Conteúdo atualizado"},
    upsert=True
)

# Adicionar nós em lote (máx. 500 por chamada, limite de segurança ISSUE-010)
resultado = skill.client.add_nodes_batch([
    {"id": "mem_001", "labels": ["Memory"], "properties": {"content": "teste1"}},
    {"id": "mem_002", "labels": ["Memory"], "properties": {"content": "teste2"}}
])

# Obter um nó
resultado = skill.client.get_node("mem_001")

# Atualizar um nó
resultado = skill.client.update_node("mem_001", {"content": "Novo conteúdo"})

# Excluir um nó
resultado = skill.client.delete_node("mem_001")

Operações com Arestas

# Adicionar uma aresta
resultado = skill.client.add_edge(
    start_node_id="mem_001",
    end_node_id="mem_002",
    edge_type="RELACIONADO_A",
    properties={"weight": 0.8}
)

# Excluir uma aresta
resultado = skill.client.delete_edge("mem_001", "mem_002", "RELACIONADO_A")

# Obter arestas de um nó
resultado = skill.client.get_edges("mem_001", direction="both")

Operações com Rótulos

# Adicionar um rótulo a um nó
resultado = skill.client.add_label_to_node("mem_001", "importante")

# Consultar nós por rótulo
resultado = skill.client.get_nodes_by_label("Memory", limit=100)

Gerenciamento do Grafo

# Obter informações do esquema
resultado = skill.get_schema_info()

# Obter estatísticas do grafo
resultado = skill.get_statistics()

# Limpar todos os dados no grafo (operação perigosa, requer confirmação do usuário)
resultado = skill.client.clear_graph()

Importação/Exportação

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

# Exportar dados do grafo (access_key/secret_key são lidos de config/ges_env.csv automaticamente)
job_id = skill.client.export_graph(
    export_path="obs://bucket/export",
    vertex_set_name="set_vertex",
    edge_set_name="set_edge"
)

Guia de Sintaxe GES

Manipulação de ID de Nó

GES usa a propriedade especial _ID_ para manipular IDs de nós do tipo string:

  • Criar nós usa a propriedade _ID_:

    CREATE (n:Memory{_ID_: 'mem_001', content: 'teste'})
    
  • Outras operações usam a função 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 exige que o esquema (Rótulos e Propriedades) seja definido antes que os nós correspondentes possam ser criados. O esquema pode ser definido através de:

  1. Criando Rótulos e propriedades através do console de gerenciamento GES
  2. Importando dados com esquema através da interface de importação

Confirmação de Parâmetros

Antes de executar qualquer tarefa, os seguintes parâmetros devem ser confirmados com o usuário. Adivinhação é proibida.

ParâmetroObrigatório/OpcionalDescriçãoPadrão
Instância de grafoObrigatórioGES_GRAPH_IP / GES_GRAPH_PORT / GES_GRAPH_NAME / GES_PROJECT_ID — em qual instância GES operarDa configuração env/CSV
Instrução de consultaObrigatórioInstrução Cypher ou GQL, mais um dicionário de parâmetros escalares JSON-
Propriedades de nó/arestaObrigatório para escritasApenas escalares JSON (string/number/boolean/null) aceitos-
Escopo da operaçãoObrigatório para operações de alto riscoclear_graph / exclusão em massa requerem confirmação explícita do usuário-
Caminhos de importação/exportaçãoObrigatórioCaminhos de bucket/objeto OBS para os arquivos de esquema/vértice/aresta-

Nota: os parâmetros de conexão são lidos do ambiente ou de config/ges_env.csv (references/ges_env.csv.example); eles nunca precisam ser passados por chamada.

Formato de Resposta

Todas as interfaces Cypher retornam um formato JSON unificado:

{
  "results": [
    {
      "columns": ["coluna1", "coluna2"],
      "data": [
        {"row": ["valor1", "valor2"], "meta": [null, null]}
      ]
    }
  ],
  "errors": []
}

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 静态网站托管、网站托管、自定义域名解析。

Habilidades Relacionadas