Communityコーディング&開発github.com

huaweicloud/huawei-cloud-ges-graph

Huawei Cloud グラフデータベース GES サービスへのアクセスガイドを提供します。Cypher クエリ、GQL クエリ、スキーマ/ラベル管理、サマリー情報クエリ、グラフデータ編集などをカバーします。ユーザーが端末経由で Huawei Cloud グラフデータベース GES サービスを操作する場合にこのスキルを使用します。

huawei-cloud-ges-graph とは?

このスキル(`huaweicloud/huawei-cloud-ges-graph`)は、AI エージェント(Claude Code、Cursor、Codex など)と連携し、Huawei Cloud Graph Engine Service(GES)の永続版に対するグラフデータベース操作を端末経由で実行するための包括的なアクセスガイドを提供します。主な機能として、Cypher および GQL クエリの実行、ノード/エッジの追加・更新・削除、スキーマとラベルの管理、グラフ統計情報の取得、OBS を介したデータのインポート/エクスポートなどが含まれます。このスキルは、Python(`scripts/ges_graph_skill.py`)または Node.js(`scripts/ges_graph_skill.js`)の両方のランタイムをサポートし、環境変数または設定ファイル(`config/ges_env.csv`)を介した設定読み込み機能を備えています。セキュリティ面では、未限定の全削除操作をコードレベルでブロックする安全ガードレール(ISSUE-002)、全消去や一括削除などの高リスク操作に対する明示的なユーザー確認要求、機密情報(AK/SK、パスワード、トークン)の出力禁止が実装されています。これにより、開発者はグラフデータの探索、編集、インポート/エクスポートといった操作を、安全かつ効率的に自動化できます。

対応✓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 コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

⚠️ 実行方法(必読): このスキルはローカルの Python または Node.js スクリプト (scripts/) を介してクエリを実行します。直接 API を呼び出すことは禁止されています。

  • クエリスクリプトはスキルディレクトリ scripts/ にあります(例: scripts/ges_graph_skill.py)。
  • すべてのスクリプトと環境確認スクリプトはスキルパッケージ内にあります。skill action=exec を使用して実行してください。シェルで直接実行しないでください。
  • 一時ファイルを作成せずにインライン実行(python -c または node -e)を推奨します。以下の「インライン実行(一時ファイルなし)」セクションを参照してください。
  • すべてのパスは、この SKILL.md が配置されているスキルディレクトリを基準とした相対パスです。

GES グラフアクセスガイダンス

概要

Huawei Cloud Graph Engine Service (GES) 永続版のアトミック機能を提供し、グラフデータベース操作のアクセスガイドを提供します。 Cypher クエリ、GQL クエリ、スキーマ/ラベル管理、サマリー情報クエリ、グラフデータ編集などのコア機能をカバーします。

ディレクトリ構造

ディレクトリの規約は次のとおりです(すべてのパスはスキルディレクトリを基準とした相対パスです):

  1. scripts/ - Python および Node.js 実行スクリプトを含む
    • ges_graph_skill.py - GES グラフ操作用 Python SDK
    • ges_graph_skill.js - GES グラフ操作用 Node.js SDK
  2. references/ - ドキュメントと設定例を含む
    • ges_env.csv.example - 環境設定テンプレート
    • cypher-gql-guide.md - Cypher/GQL 完全使用ガイド(例、テーブル、インライン実行)
    • cli-installation-guide.md - ランタイム(Python/Node.js)インストールおよび設定ガイド
    • iam-policies.md - GES/OBS の最小 IAM 許可ポリシー
    • verification-method.md - 検証手順とチェックリスト
    • acceptance-criteria.md - 合格基準(合格/不合格しきい値)
    • user-guide-authentication.md - IAM トークン方式と GitCode API トークン認証
    • chaining-protocol.md - 統一結果エンベロープとチェーン呼び出し契約

前提条件

このスキルを使用する前に、次の条件が満たされていることを確認してください:

1. ランタイム環境

Python または Node.js ランタイムをサポートします。 Python 3.8+ または Node.js 14+ が必要です。

Python の依存関係: requests(pip install requests)。オプションで huaweicloudsdkges をインストール可能(pip install huaweicloudsdkges)で SDK レベルの呼び出しが可能ですが(ISSUE-013)、 組み込みの HTTP クライアントを使用するため、それがなくてもスキルは動作します。Node.js には、外部の npm パッケージは不要です(stdlib の https/http のみを使用)。

2. グラフインスタンス設定

このスキルは、環境変数と設定ファイルの両方をサポートします。環境変数は設定ファイルよりも優先されます。

環境変数とパラメータ

環境変数説明必須
GES_GRAPH_IPGES サービス IPはい
GES_GRAPH_PORTGES サービスポートはい
GES_PROJECT_IDプロジェクト IDはい
GES_GRAPH_NAMEグラフ名はい
GES_IAM_URLIAM サービス URLはい
GES_REGIONリージョンはい
HUAWEI_CLOUD_AKアクセスキーはい*
HUAWEI_CLOUD_SKシークレットキーはい*
GES_USERNAMEユーザー名条件付き**
GES_PASSWORDパスワード条件付き**
GES_DOMAIN_NAMEドメイン名条件付き**
GES_TOKENトークン(最高優先度)オプション
  • AK/SK 必須: AKSK 認証の場合。 ** ユーザー名/パスワードは条件付きで必須: AKSK が利用できない場合。

設定ファイル (config/ges_env.csv)

設定ファイルのパス: config/ges_env.csv

設定項目説明必須値の例
graph_ipGES サービス IPはい100.95.xxx.xxx
graph_portGES サービスポートはい80
project_idプロジェクト IDはいyour_project_id
graph_nameグラフ名はいyour_graph_name
iam_urlIAM サービス URLはい(下記リージョンテーブルを参照)
access_keyアクセスキーはい*your_access_key
secret_keyシークレットキーはい*your_secret_key
usernameユーザー名条件付き**your_username
passwordパスワード条件付き**your_password
domain_nameドメイン名条件付き**your_domain_name
regionリージョンはいcn-north-4
  • access_key/secret_key 必須: AKSK 認証の場合。 ** username/password/domain_name は条件付きで必須: AKSK が利用できない場合。

リージョン別 IAM URL

リージョンURLプロトコル
cn-north-4iam.cn-north-4.myhuaweicloud.com/v3/auth/tokensHTTPS
ap-southeast-1iam.ap-southeast-1.myhuaweicloud.com/v3/auth/tokensHTTPS

3 つの方法がサポートされています(優先度順):

  1. 環境変数 GES_TOKEN
  2. AKSK 方式(HUAWEI_CLOUD_AK + HUAWEI_CLOUD_SK または access_key + secret_key)
  3. パスワード方式(username + password + domain_name)

⛔ 禁止操作(安全ガードレール)

本スキルはコードレベルで安全ガードレール(ISSUE-002)を強制します。ドキュメント上の制約だけではありません。

  • scripts/ges_graph_skill.py / ges_graph_skill.js 内の validateCypher() は、未限定の全削除/クリア文(MATCH (n) DETACH DELETE n、 MATCH ()-[r]->() DELETE r、DROP ALL など)をインターセプトします。
  • 対象を指定した追加/更新/削除(WHERE ... id(n)=... または element_id(...) を含むもの)は影響を受けません。
  • すべての属性値は JSON スカラー(str/int/float/bool/None)のみ許可され、dict/list/bytes は拒否されます。
  • どうしても全量クリアが必要な場合は、clear_graph()(または clearGraph())専用インターフェースを使用し、 まずユーザーの明確な確認を得た上で、allow_destructive=True を指定して実行してください。
禁止操作説明理由
❌ 機密認証情報の出力AK/SK、パスワード、トークン、その他の機密情報の出力機密情報漏洩のリスク

以下の高リスク操作は、実行前にエージェントの明示的な確認が必要です:

高リスク操作説明確認プロンプト
⚠️ グラフデータの全消去clear_graph() または類似のクリア操作「グラフ内のすべてのデータを削除してもよろしいですか?この操作は元に戻せません。」
⚠️ ノード/エッジの一括削除すべてのノードまたはエッジの無条件一括削除「すべてのノード/エッジを一括削除してもよろしいですか?この操作は元に戻せません。」

ユーザーが上記の高リスク操作を要求した場合は、明示的な確認を得る必要があります: 「これは高リスク操作です。実行するには明示的な確認が必要です。続行するには「confirm」と返信してください。」

Cypher および GQL クエリ言語

GES は 2 つのクエリ言語をサポートしています: Cypher(Neo4j 互換)と GQL(国際標準グラフクエリ言語)。

完全な使用ガイド(Python/Node.js の例、インライン skill action=exec 実行、 一般的な Cypher/GQL ステートメント、Cypher↔GQL の違いの表)は、 references/cypher-gql-guide.md にあります。

ワークフロー

タスク 1: グラフのクエリ(読み取り専用、エージェントが自動実行可能)

1. ランタイムを選択します: Python(`ges_graph_skill.py`)または Node.js(`ges_graph_skill.js`)。どちらも同じ API を公開しています。
2. 設定を読み込みます(環境変数 > `references/ges_env.csv.example`)— 以下のインラインチェックをセッションごとに 1 回実行します。
3. `execute_query()` / `execute_gql()`(Node.js の場合は `executeCypher` / `executeGql`)を使用して Cypher または GQL クエリを実行します。
4. 統一 JSON エンベロープ `{"results": [...], "errors": []}` をユーザーに返します。

インライン実行(一時ファイルなし): 一時的なスクリプトファイルを作成するよりも、インライン実行を推奨します。たとえば、スキルディレクトリから Python クエリを実行します:

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

インライン skill action=exec の例については、references/cypher-gql-guide.md を参照してください。

タスク 2: グラフデータの編集(ノードとエッジの追加/更新/削除)

1. プロパティ値が JSON スカラー(文字列/数値/ブール値/null)であることを検証します — コードがこれを強制します(ISSUE-002)。
2. 対応する CRUD メソッドを呼び出します(`add_node`/`update_node`/`delete_node`、`add_edge`/`delete_edge`)。
3. 一括インポートの場合は、1 回の呼び出しあたり 500 ノードの制限を守ります(チャンクに分割、ISSUE-010)。
4. 操作結果を返します(統一エンベロープまたは `{id, ...}` サマリー)。

タスク 3: 高リスク操作(明示的なユーザー確認が必要)

1. `clear_graph()` または未限定の一括削除は、Cypher レベルで `validateCypher()` によって BLOCK されます。
2. グラフ全体をクリアするには、`allow_destructive=True` を指定して `clear_graph()`(または Node.js の `clearGraph()`)を呼び出します。
3. 実行する前に、ユーザーに確認を求めます: 「これは高リスク操作です。実行するには明示的な確認が必要です。続行するには「confirm」と返信してください。」
4. 確認後、実行し、ジョブ ID / 結果を返します。

タスク 4: グラフデータのインポート / エクスポート(非同期ジョブ)

1. スキーマ/頂点/エッジファイル用の OBS パス(`import_graph`)またはエクスポートパス(`export_graph`)を準備します。
2. ジョブを送信します — `{"jobId": ...}` がすぐに返されます。
3. `get_job_status(jobId)` をポーリングして、ジョブが終了状態になるまで待機します。
4. ステータスとジョブからのエラーメッセージをユーザーに報告します。

検証と合格基準: 詳細な合格/不合格チェックは、 references/verification-method.md と references/acceptance-criteria.md にあります。

コアインターフェース(コアコマンド)

Cypher クエリ

# Cypher クエリを実行
result = skill.execute_query("MATCH (n) RETURN n LIMIT 10")

# パラメータ付き Cypher クエリを実行
result = skill.execute_query(
    "MATCH (n) WHERE n.name = $name RETURN n",
    parameters={"name": "张三"}
)

頂点(ノード)操作

# ノードを追加
result = skill.client.add_node(
    node_id="mem_001",
    labels=["Memory", "conversation"],
    properties={"content": "User said Hello", "timestamp": 1234567890}
)

# ノードを冫等に追加(アップサート)。ノードが存在する場合はプロパティを更新、存在しない場合は作成(ISSUE-004)
result = skill.client.add_node(
    node_id="mem_001",
    labels=["Memory"],
    properties={"content": "Updated content"},
    upsert=True
)

# ノードを一括追加(1 回の呼び出しあたり最大 500、境界ガード ISSUE-010)
result = skill.client.add_nodes_batch([
    {"id": "mem_001", "labels": ["Memory"], "properties": {"content": "test1"}},
    {"id": "mem_002", "labels": ["Memory"], "properties": {"content": "test2"}}
])

# ノードを取得
result = skill.client.get_node("mem_001")

# ノードを更新
result = skill.client.update_node("mem_001", {"content": "New content"})

# ノードを削除
result = skill.client.delete_node("mem_001")

エッジ操作

# エッジを追加
result = skill.client.add_edge(
    start_node_id="mem_001",
    end_node_id="mem_002",
    edge_type="RELATED_TO",
    properties={"weight": 0.8}
)

# エッジを削除
result = skill.client.delete_edge("mem_001", "mem_002", "RELATED_TO")

# ノードのエッジを取得
result = skill.client.get_edges("mem_001", direction="both")

ラベル操作

# ノードにラベルを追加
result = skill.client.add_label_to_node("mem_001", "important")

# ラベルでノードをクエリ
result = skill.client.get_nodes_by_label("Memory", limit=100)

グラフ管理

# スキーマ情報を取得
result = skill.get_schema_info()

# グラフ統計情報を取得
result = skill.get_statistics()

# グラフ内のすべてのデータをクリア(危険な操作。ユーザーの確認が必要)
result = skill.client.clear_graph()

インポート/エクスポート

# グラフデータをインポート
job_id = skill.client.import_graph(
    schema_path="obs://bucket/schema.xml",
    vertex_path="obs://bucket/vertex",
    edge_path="obs://bucket/edge"
)

# グラフデータをエクスポート(access_key/secret_key は 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"
)

GES 構文ガイド

ノード ID の取り扱い

GES は特別な _ID_ プロパティを使用して文字列型のノード ID を処理します:

  • ノードの作成 では _ID_ プロパティを使用します:

    CREATE (n:Memory{_ID_: 'mem_001', content: 'test'})
    
  • その他の操作 では id() 関数を使用します:

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

スキーマ要件

GES では、対応するノードを作成する前に、スキーマ(ラベルとプロパティ)を定義する必要があります。スキーマは次の方法で定義できます:

  1. GES 管理コンソールを介してラベルとプロパティを作成する
  2. インポートインターフェースを介してスキーマを含むデータをインポートする

パラメータ確認

タスクを実行する前に、次のパラメータをユーザーに確認する必要があります。推測は禁止されています。

パラメータ必須/オプション説明デフォルト
グラフインスタンス必須GES_GRAPH_IP / GES_GRAPH_PORT / GES_GRAPH_NAME / GES_PROJECT_ID — 操作する GES インスタンス環境変数/CSV 設定から
クエリステートメント必須Cypher または GQL ステートメント、および JSON スカラー値のパラメータ辞書-
ノード/エッジのプロパティ書き込み時に必須JSON スカラー(文字列/数値/ブール値/null)のみ受け付け-
操作範囲高リスク操作時に必須clear_graph / 一括削除には明示的なユーザー確認が必要-
インポート/エクスポートパス必須スキーマ/頂点/エッジファイルの OBS バケット/オブジェクトパス-

注: 接続パラメータは環境または config/ges_env.csv(references/ges_env.csv.example)から読み取られます。呼び出しごとに渡す必要はありません。

レスポンス形式

すべての Cypher インターフェースは、統一された JSON 形式を返します:

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

エラーハンドリング

エラーは統一エンベロープの 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 静态网站托管、网站托管、自定义域名解析。

関連スキル