Synthetic data generation covering LLM-based data creation, statistical data synthesis, privacy-preserving techniques (differential privacy, k-anonymity), tabular data generation, text augmentation, image augmentation, validation frameworks, and quality assurance for generated datasets.
A skill is a written procedure a bot loads when a job calls for it. This one is a single file, SKILL.md, and the whole file is on this page.
Synthetic data generation creates artificial datasets that preserve the statistical properties of real data without exposing sensitive information. This skill covers LLM-based text generation, statistical tabular synthesis, privacy-preserving methods, augmentation strategies, and validation to ensure synthetic data is useful and safe.
Synthetic data generation covering LLM-based data creation, statistical data synthesis, privacy-preserving techniques (differential privacy, k-anonymity), tabular data generation, text augmentation, image augmentation, validation frameworks, and quality assurance for generated datasets.
How much does it cost?+
Nothing. It ships with Murage, which is open source. Your bots run on the AI plan you already have.
Can I change it?+
Yes. Open it in Settings → Skills to read, edit or duplicate it. Skill Guard scans it again after every edit.
Give your first job to Murage.
Download the app, connect the AI you already pay for, and tell your Chief of Staff what needs doing. Plan on about ten minutes from install to a working team.
Privacy / compliance:
Sharing externally? -> Full synthetic with differential privacy
Internal only? -> Pseudonymization may suffice
Training data:
Enough real data? -> Augmentation for diversity / class balance
Insufficient? -> Full synthetic generation to bootstrap
Testing / development:
Need realistic distributions? -> Statistical synthesis from real profile
Just need structure? -> Rule-based Faker data
Research / demos:
Must look realistic? -> LLM-generated + statistical synthesis
Just need volume? -> Simple random generation
from faker import Faker
import random
import pandas as pd
fake = Faker()
Faker.seed(42)
def generate_customer_data(n: int = 1000) -> pd.DataFrame:
records = []
for _ in range(n):
records.append({
"customer_id": fake.uuid4(),
"name": fake.name(),
"email": fake.email(),
"city": fake.city(),
"signup_date": fake.date_between(start_date="-3y", end_date="today"),
"plan": random.choices(
["free", "basic", "pro", "enterprise"], weights=[0.5, 0.3, 0.15, 0.05],
)[0],
"monthly_spend": round(random.lognormvariate(3.5, 1.2), 2),
"is_active": random.random() > 0.15,
})
return pd.DataFrame(records)
LLM-Based Text Generation
python
from openai import OpenAI
import json
class LLMDataGenerator:
"""Generate synthetic text data using LLMs."""
def __init__(self, model: str = "gpt-4o-mini"):
self.client = OpenAI()
self.model = model
def generate_batch(
self, schema: dict, n_samples: int,
context: str = "", examples: list[dict] = None, batch_size: int = 10,
) -> list[dict]:
all_samples = []
for i in range(0, n_samples, batch_size):
current_batch = min(batch_size, n_samples - i)
prompt = (
f"Generate exactly {current_batch} synthetic data samples.\n\n"
f"Schema:\n```json\n{json.dumps(schema, indent=2)}\n```\n\n"
)
if context:
prompt += f"Context: {context}\n\n"
if examples:
prompt += f"Examples:\n{json.dumps(examples[:3], indent=2)}\n\n"
prompt += "Return as JSON: {\"samples\": [...]}\n"
response = self.client.chat.completions.create(
model=self.model,
messages=[
{"role": "system", "content": "Generate realistic, diverse data matching the schema."},
{"role": "user", "content": prompt},
],
response_format={"type": "json_object"},
temperature=1.0,
)
batch = json.loads(response.choices[0].message.content)
all_samples.extend(batch.get("samples", []))
return all_samples[:n_samples]
Text Augmentation
Technique
Quality
Speed
Best For
Synonym replacement
Medium
Fast
Simple vocabulary variation
Random deletion
Low-Medium
Fast
Robustness training
Back-translation
High
Slow
Natural paraphrasing
LLM paraphrase
Very High
Slow
High-quality augmentation
Entity swapping
Medium
Fast
Named entity variation
python
class TextAugmenter:
def synonym_replace(self, text: str, n: int = 2) -> str:
"""Replace n random words with synonyms (uses WordNet)."""
words = text.split()
import random
indices = random.sample(range(len(words)), min(n, len(words)))
for idx in indices:
syn = self._get_synonym(words[idx])
if syn:
words[idx] = syn
return " ".join(words)
def random_deletion(self, text: str, p: float = 0.1) -> str:
"""Randomly delete words with probability p."""
import random
words = text.split()
remaining = [w for w in words if random.random() > p]
return " ".join(remaining) if remaining else words[0]
def llm_paraphrase(self, text: str, style: str = "neutral") -> str:
"""Use an LLM to paraphrase while preserving meaning."""
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": f"Paraphrase in {style} style:\n{text}"}],
temperature=0.8,
)
return response.choices[0].message.content.strip()
Check for data leakage (no real records copied verbatim)
☐To do:
Document methodology, parameters, and validation results
☐To do:
Establish monitoring if synthetic data is regenerated periodically
Output Format
markdown
# Synthetic Data Generator Analysis
## Context Assessment
[Situation summary and constraints]
## Recommended Approach
[Primary recommendation with rationale]
## Implementation Steps
1. [Step with specific details]
2. [Step with specific details]
3. [Step with specific details]
## Trade-offs and Considerations
- [Key trade-off 1]
- [Key trade-off 2]
## Next Steps
- [Immediate action item]
- [Follow-up action item]
Example
Input: "Help me implement synthetic data generator for a medium-scale production application"
Output: A structured analysis covering current state assessment, recommended synthetic data generator approach with specific patterns, implementation roadmap with milestones, and risk mitigation strategies tailored to the application scale and constraints.
Edge Cases
Legacy system integration: When synthetic data generator must coexist with legacy approaches, provide a gradual migration path rather than a complete rewrite
Scale mismatch: When the solution complexity exceeds the project scale, recommend a simpler approach and note when to revisit
Team skill gaps: When the team lacks experience with the recommended approach, include learning resources and simpler alternatives
Conflicting requirements: When constraints conflict (e.g., performance vs. maintainability), explicitly state the trade-off and recommend based on stated priorities