AgentSkillsCN

@ruvector/gnn

Node.js 图神经网络绑定,支持 GraphConv、GATLayer 以及 GNN 管道。适用于构建基于图的机器学习模型、执行节点分类、链接预测、图嵌入,或在 AI 智能体管道中集成 GNN 层,以支持 RANO 优化工作负载。

SKILL.md
--- frontmatter
name: "@ruvector/gnn"
description: "Graph Neural Network bindings for Node.js with GraphConv, GATLayer, and GNN pipeline support. Use when building graph-based ML models, performing node classification, link prediction, graph embedding, or integrating GNN layers into AI agent pipelines for RANO Optimization workloads."

@ruvector/gnn

High-performance Graph Neural Network bindings for Node.js, providing GraphConv, GATLayer, and composable GNN pipelines for graph-based machine learning tasks.

Quick Reference

TaskCode
Installnpx @ruvector/gnn@latest
Importimport { GNN, GraphConv, GATLayer } from '@ruvector/gnn';
Create GNNconst gnn = new GNN({ layers: [GraphConv(64), GATLayer(32)] });
Forward passconst output = await gnn.forward(graphData);
Trainawait gnn.train(trainingData, { epochs: 100 });
Predictconst pred = await gnn.predict(nodeFeatures);

Installation

Hub install (recommended): npx ruvector@latest includes this package. Standalone: npx @ruvector/gnn@latest See Installation Guide for the full ecosystem.

Key API

GNN

The main pipeline class for composing graph neural network layers.

typescript
import { GNN, GraphConv, GATLayer } from '@ruvector/gnn';

const gnn = new GNN({
  layers: [GraphConv(64), GATLayer(32)],
  activation: 'relu',
  dropout: 0.5,
});

Constructor Options:

OptionTypeDefaultDescription
layersLayer[][]Array of GNN layer configurations
activationstring'relu'Activation function: 'relu', 'elu', 'leaky_relu', 'sigmoid'
dropoutnumber0.0Dropout rate for regularization (0.0-1.0)
optimizerstring'adam'Optimizer: 'adam', 'sgd', 'adagrad'
learningRatenumber0.01Learning rate for training
weightDecaynumber0.0L2 regularization weight decay

Methods:

MethodReturnsDescription
forward(graphData)Promise<Tensor>Run forward pass on graph data
train(data, options)Promise<TrainResult>Train the model on labeled graph data
predict(features)Promise<Tensor>Run inference on node features
save(path)Promise<void>Serialize model to disk
load(path)Promise<void>Load model from disk
summary()stringPrint model architecture summary
getParameters()Parameter[]Get all trainable parameters

GraphConv

Graph Convolutional layer implementing message passing.

typescript
import { GraphConv } from '@ruvector/gnn';

const layer = GraphConv(64, {
  aggregation: 'mean',
  bias: true,
});

Parameters:

ParameterTypeDefaultDescription
outChannelsnumberrequiredNumber of output features
aggregationstring'mean'Aggregation: 'mean', 'sum', 'max'
biasbooleantrueInclude bias term
normalizebooleanfalseApply symmetric normalization
cachedbooleanfalseCache normalization matrix

GATLayer

Graph Attention Network layer with multi-head attention.

typescript
import { GATLayer } from '@ruvector/gnn';

const layer = GATLayer(32, {
  heads: 4,
  concat: true,
  negativeSlope: 0.2,
});

Parameters:

ParameterTypeDefaultDescription
outChannelsnumberrequiredOutput features per head
headsnumber1Number of attention heads
concatbooleantrueConcatenate heads (vs average)
negativeSlopenumber0.2LeakyReLU negative slope
dropoutnumber0.0Attention weight dropout

GraphData

Structure for graph input data.

typescript
interface GraphData {
  nodeFeatures: Float32Array | number[][];  // [numNodes, numFeatures]
  edgeIndex: [number[], number[]];          // Source and target node indices
  edgeWeights?: Float32Array;                // Optional edge weights
  labels?: Int32Array;                       // Optional node labels
  batchIndex?: Int32Array;                   // Optional batch assignment
}

Common Patterns

Node Classification

typescript
import { GNN, GraphConv, GATLayer } from '@ruvector/gnn';

const gnn = new GNN({
  layers: [GraphConv(128), GATLayer(64), GraphConv(numClasses)],
  activation: 'relu',
  dropout: 0.5,
});

const result = await gnn.train(graphData, {
  epochs: 200,
  validationSplit: 0.2,
  earlyStopping: { patience: 10 },
});

console.log(`Accuracy: ${result.accuracy}`);

Link Prediction

typescript
import { GNN, GraphConv } from '@ruvector/gnn';

const encoder = new GNN({
  layers: [GraphConv(128), GraphConv(64)],
  activation: 'relu',
});

const embeddings = await encoder.forward(graphData);
const scores = await encoder.decodePairs(embeddings, nodePairs);

Graph Embedding for Agent Pipelines

typescript
import { GNN, GraphConv, GATLayer } from '@ruvector/gnn';

const gnn = new GNN({
  layers: [GraphConv(256), GATLayer(128, { heads: 4 }), GraphConv(64)],
  activation: 'elu',
});

const nodeEmbeddings = await gnn.forward(dependencyGraph);
const graphEmbedding = await gnn.readout(nodeEmbeddings, 'mean');

Batch Processing

typescript
import { GNN, GraphConv, batchGraphs } from '@ruvector/gnn';

const batched = batchGraphs(graphList);
const output = await gnn.forward(batched);
const perGraph = await gnn.unbatch(output, batched.batchIndex);

RAN DDD Context

Bounded Context: RANO Optimization

References