AgentSkillsCN

@ruvector/graph-data-generator

具备可配置拓扑结构、密度以及 AI 驱动属性生成的合成图数据生成器。适用于用户需要生成测试图数据、创建合成社交网络、对图数据库进行基准测试、生成逼真的知识图,或为 ML 训练生成图数据集。

SKILL.md
--- frontmatter
name: "@ruvector/graph-data-generator"
description: "Synthetic graph data generator with configurable topology, density, and AI-powered property generation. Use when the user needs to generate test graph data, create synthetic social networks, benchmark graph databases, produce realistic knowledge graphs, or generate graph datasets for ML training."

@ruvector/graph-data-generator

AI-powered synthetic graph data generation with configurable topology models, density controls, and optional LLM-powered property generation via OpenRouter/Kimi K2 for realistic test data.

Quick Command Reference

TaskCode
Create generatorconst gen = new GraphGenerator({ nodes: 1000 })
Generate graphconst graph = await gen.generate()
Social networkgen.template('social-network', { users: 500 })
Knowledge graphgen.template('knowledge-graph', { topics: 100 })
Export GraphMLgen.export('graphml', './output.xml')
Export JSONgen.export('json', './output.json')
Export CSVgen.export('csv', './output/')
Get statsgen.stats()

Installation

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

Core API

GraphGenerator Constructor

typescript
import { GraphGenerator } from '@ruvector/graph-data-generator';

const gen = new GraphGenerator({
  nodes: 1000,
  density: 0.1,
  topology: 'scale-free',
  labels: ['Person', 'Company', 'Product'],
  edgeLabels: ['KNOWS', 'WORKS_AT', 'PURCHASED'],
  propertyGenerator: 'random',   // 'random' | 'ai'
  seed: 42,
});

Constructor Options:

ParameterTypeDescriptionDefault
nodesnumberNumber of nodes to generate1000
densitynumberEdge density (0.0-1.0)0.1
topologystringGraph model'scale-free'
labelsstring[]Vertex label distribution['Node']
edgeLabelsstring[]Edge label distribution['CONNECTED']
propertyGeneratorstringProperty generation strategy'random'
seednumberRandom seed for reproducibilityRandom
directedbooleanGenerate directed edgestrue
allowSelfLoopsbooleanAllow self-referencing edgesfalse

Topology Models:

TopologyDescription
scale-freeBarabasi-Albert preferential attachment
small-worldWatts-Strogatz small-world network
randomErdos-Renyi random graph
hierarchicalTree-like hierarchy with cross-links
bipartiteTwo-group graph
communityMultiple dense communities

Generation

typescript
// Generate graph
const graph = await gen.generate();

// Generate with AI properties (requires OPENROUTER_API_KEY)
const gen = new GraphGenerator({
  nodes: 100,
  propertyGenerator: 'ai',
  aiModel: 'moonshotai/kimi-k2',
});
const graph = await gen.generate();

Templates

typescript
// Social network
const gen = GraphGenerator.template('social-network', {
  users: 500,
  avgFriends: 10,
  communities: 5,
});

// Knowledge graph
const gen = GraphGenerator.template('knowledge-graph', {
  topics: 100,
  conceptsPerTopic: 20,
  crossLinks: 0.05,
});

// E-commerce
const gen = GraphGenerator.template('ecommerce', {
  users: 1000,
  products: 500,
  purchases: 5000,
});

// Dependency graph
const gen = GraphGenerator.template('dependency-graph', {
  packages: 200,
  avgDependencies: 5,
});

Export

typescript
// Export to various formats
await gen.export('json', './output.json');
await gen.export('graphml', './output.xml');
await gen.export('csv', './output/');     // vertices.csv + edges.csv
await gen.export('cypher', './output.cypher');  // Cypher CREATE statements
await gen.export('dot', './output.dot');        // Graphviz DOT
await gen.export('adjacency', './output.json'); // Adjacency list

Statistics

typescript
const stats = gen.stats();
// { nodes: 1000, edges: 4500, avgDegree: 9, density: 0.009, components: 1, diameter: 8 }

Common Patterns

Generate Test Data for Graph DB

typescript
const gen = new GraphGenerator({
  nodes: 10000,
  density: 0.01,
  topology: 'scale-free',
  labels: ['User', 'Post', 'Tag'],
  edgeLabels: ['AUTHORED', 'TAGGED', 'FOLLOWS'],
});
const graph = await gen.generate();
await gen.export('cypher', './seed.cypher');
// Load into database

Benchmark Data Generation

typescript
for (const size of [1000, 10000, 100000]) {
  const gen = new GraphGenerator({ nodes: size, density: 0.01, seed: 42 });
  await gen.generate();
  await gen.export('json', `./bench-${size}.json`);
}

AI-Powered Realistic Properties

typescript
const gen = new GraphGenerator({
  nodes: 100,
  propertyGenerator: 'ai',
  aiModel: 'moonshotai/kimi-k2',
  labels: ['Person'],
  propertySchema: {
    Person: { name: 'string', bio: 'text', age: 'int:18-80' }
  },
});
const graph = await gen.generate();

Key Options

FeatureValue
TopologiesScale-free, small-world, random, hierarchical, community
Property generationRandom, schema-based, AI (OpenRouter)
Export formatsJSON, GraphML, CSV, Cypher, DOT, adjacency list
Max nodes (tested)1M+
ReproducibilitySeed-based

RAN DDD Context

Bounded Context: Data Infrastructure

References