Brand Retail Knowledge Graph Schema
for a global multibrand retailer with LLM-powered content
0. Design Overview
Graph model: Property graph
-
Nodes have
-
label(type) id(internal primary key)-
Properties (scalars, lists, or JSON blobs)
-
Edges have
-
type(relationship name) - Direction (always defined)
- Optional properties (weights, timestamps, etc.)
Core domains
- Commercial & Product – brands, products, GTIN/GPC, internal categories, vendors, supply chain, geography
- Brand Guidelines & Safety – visual/verbal/audio tokens, rules, risk domains, cultural context
- Audience & Cultural Intelligence – topics, signals, trends, need states
- Marketing & Campaigns – campaigns, themes, channel activations, calendar moments
- AI Context & Feedback – context, model configs, content generation, metrics, feedback, optimisation
- Customers & Archetypes – real customers, segments, synthetic Archetypes linked to real customers
Conventions
- Node labels:
UpperCamelCase(e.g.Brand,Product,Archetype) - Property names:
snake_case(e.g.brand_type,created_at) - Edge types:
UPPER_SNAKE_CASE(e.g.OWNS_BRAND,HAS_RULE) - Recommended on all nodes:
id,created_at,updated_at
1. Node Types (Labels & Properties)
1.1 Brand & Product Domain
1.1.1 Brand
Represents master brand, private label, hosted brand, and co-brand.
Label: Brand
| Property | Type | Description |
|---|---|---|
id |
string | Internal unique ID |
external_id |
string | Optional brand code (ERP / MDM) |
name |
string | Display name |
brand_type |
enum | MASTER, OWNED, HOSTED, CO_BRAND |
description |
string | Short description |
tagline_default |
string | Default global tagline |
is_active |
boolean | Active/inactive |
primary_language |
string | e.g. en, fr, es |
localized_names |
map/json | lang_code -> name |
localized_taglines |
map/json | lang_code -> tagline |
metadata |
map/json | Arbitrary brand metadata |
1.1.2 Vendor
Suppliers / manufacturers / brand owners.
Label: Vendor
| Property | Type | Description |
|---|---|---|
id |
string | Internal unique ID |
external_id |
string | Vendor code |
name |
string | Legal or trading name |
vendor_type |
enum | MANUFACTURER, DISTRIBUTOR, OWNER, … |
gln |
string | Optional GS1 Global Location Number |
country_code |
string | ISO-3166 country |
is_active |
boolean | Active/inactive |
metadata |
map/json | Extra attributes |
1.1.3 Product
Individual sellable item (SKU/GTIN).
Label: Product
| Property | Type | Description |
|---|---|---|
id |
string | Internal product ID (SKU ID) |
sku |
string | Internal SKU code (if distinct) |
gtin |
string | GTIN / EAN / UPC |
name |
string | Product name |
description |
string | Long description |
brand_name_on_pack |
string | Text as printed on pack |
status |
enum | ACTIVE, DISCONTINUED, COMING_SOON |
launch_date |
datetime | Optional |
attributes |
map/json | Key/value attributes (size, color, etc.) |
media_refs |
list | URIs / IDs of images, videos |
metadata |
map/json | Extra |
1.1.4 InternalCategory (ICS)
Retailer’s internal category node.
Label: InternalCategory
| Property | Type | Description |
|---|---|---|
id |
string | Internal category ID |
code |
string | Category code |
name |
string | Category name |
level |
string | e.g. DEPARTMENT, CATEGORY, SUBCAT |
path |
string | Denormalized path string |
is_leaf |
boolean | Leaf flag |
metadata |
map/json | Attributes (online_only, margin_band…) |
1.1.5 GpcCategory
GS1 Global Product Classification node.
Label: GpcCategory
| Property | Type | Description |
|---|---|---|
id |
string | Internal ID |
gpc_code |
string | GS1 GPC code |
name |
string | GPC category name |
level |
string | SEGMENT, FAMILY, CLASS, BRICK |
definition |
string | Official description |
metadata |
map/json | Extra |
1.1.6 BrandedCategory (optional)
Brand-specific category naming.
Label: BrandedCategory
| Property | Type | Description |
|---|---|---|
id |
string | ID |
name |
string | Brand’s own term |
description |
string | Optional |
metadata |
map/json | Other attributes |
1.2 Operational & Geographic Domain
1.2.1 SupplyChainNode
Stores, warehouses, DCs, etc.
Label: SupplyChainNode
| Property | Type | Description |
|---|---|---|
id |
string | Internal ID |
external_id |
string | Store/DC code |
name |
string | Name (“Store 1234 – London”) |
node_type |
enum | STORE, WAREHOUSE, DC, … |
gln |
string | Optional GLN |
address |
string | Free-form or structured |
lat |
float | Latitude |
lon |
float | Longitude |
is_active |
boolean | Active/inactive |
metadata |
map/json | Extra fields |
1.2.2 GeographicRegion
Global → region → country → state → city etc.
Label: GeographicRegion
| Property | Type | Description |
|---|---|---|
id |
string | Internal ID |
code |
string | e.g. GLOBAL, EMEA, US, US-CA, LON |
name |
string | Human-readable name |
region_level |
enum | GLOBAL, REGION, COUNTRY, STATE, CITY |
metadata |
map/json | Localization, currency, legal notes |
1.2.3 CustomerSegment
Audience segments.
Label: CustomerSegment
| Property | Type | Description |
|---|---|---|
id |
string | Segment ID |
name |
string | “Gen Z Value Seekers” |
description |
string | Short narrative |
criteria |
map/json | Targeting rules (age, behaviour…) |
metadata |
map/json | Extra |
1.2.4 Customer
Real customers (pseudonymised).
Label: Customer
| Property | Type | Description |
|---|---|---|
id |
string | Internal customer ID (pseudonymised) |
external_id |
string | Optional hashed ID from CRM/CDP |
origin_system |
string | Source system (CDP, LOYALTY, ECOM, …) |
is_active |
boolean | Active customer flag |
created_at |
datetime | First seen |
last_seen_at |
datetime | Last activity |
demographic_bucket |
map/json | Non-PII buckets (age_band, income_band, household_size, etc.) |
behaviour_profile |
map/json | Aggregated traits (e.g. “high frequency”, “deal seeker”, “luxury skew”) |
metadata |
map/json | Non-PII extras (e.g. loyalty_tier, channel_pref) |
1.3 Archetypes (Synthetic Personas)
1.3.1 Archetype
Data-driven or curated archetypes representing groups of customers.
Label: Archetype
| Property | Type | Description |
|---|---|---|
id |
string | Archetype ID |
name |
string | “Eco-Conscious Gen Z Foodie”, “Busy Value Parent” |
description |
string | Narrative description |
archetype_type |
enum | SYNTHETIC, CURATED, HYBRID |
generation_method |
string | CLUSTERING, RULE_BASED, MANUAL, LLM_ASSISTED, … |
embedding_ref |
string | Optional: ID for vector/embedding in feature store |
feature_profile |
map/json | Behavioural + attitudinal profile (e.g. price_sensitivity, channel_pref) |
language_codes |
list | Languages typically used (e.g. [en-GB,es-ES]) |
is_active |
boolean | Whether archetype is currently in use |
metadata |
map/json | Additional fields (model_version, author, notes, etc.) |
1.4 Brand Guidelines & Safety
1.4.1 VisualIdentityToken
Label: VisualIdentityToken
| Property | Type | Description |
|---|---|---|
id |
string | ID |
name |
string | “Core Visual System – Brand X” |
primary_colors |
list | Hex codes or color names |
secondary_colors |
list | Optional |
logo_refs |
list | URIs/asset IDs |
imagery_style |
string | e.g. “bright, lifestyle photography” |
iconography |
string | Guidance text |
metadata |
map/json | Extra |
1.4.2 VerbalIdentityToken
Label: VerbalIdentityToken
| Property | Type | Description |
|---|---|---|
id |
string | ID |
name |
string | “Verbal Identity – Brand X Global” |
tone_of_voice |
string | e.g. “playful, supportive, concise” |
style_guidelines |
string | Prose rules for copy |
required_elements |
list | e.g. “clear CTA”, “benefit-led opening” |
approved_keywords |
list | Words/phrases to use |
prohibited_keywords |
list | Words/phrases to avoid |
example_snippets |
list | Short exemplar copy strings |
metadata |
map/json | Extra |
1.4.3 AudioIdentityToken
Label: AudioIdentityToken
| Property | Type | Description |
|---|---|---|
id |
string | ID |
name |
string | “Audio Identity – Brand X” |
audio_logo_ref |
string | URI/asset ID |
music_style |
string | e.g. “upbeat, electronic” |
voice_guidelines |
string | TTS / voiceover style notes |
metadata |
map/json | Extra |
1.4.4 ContentGuideline
Must-do / must-not-do rule or general guideline.
Label: ContentGuideline
| Property | Type | Description |
|---|---|---|
id |
string | ID |
rule_type |
enum | MUST_DO, MUST_NOT_DO, ADVISORY |
name |
string | “No profanity”, “Always include CTA” |
description |
string | Detailed rule text |
dimension |
string | TONE, LEGAL, BRAND_SAFETY, FORMAT, … |
severity |
integer | e.g. 1–5 |
source |
string | LEGAL, BRAND, EXPERIMENTAL, … |
metadata |
map/json | Extra |
1.4.5 RiskDomain
Label: RiskDomain
| Property | Type | Description |
|---|---|---|
id |
string | ID |
name |
string | “Alcohol”, “Politics”, “Body Image” |
description |
string | What this risk covers |
severity |
integer | 1–5 |
regulatory |
boolean | True if regulatory-sensitive |
metadata |
map/json | Extra |
1.4.6 CulturalNorm
Label: CulturalNorm
| Property | Type | Description |
|---|---|---|
id |
string | ID |
name |
string | “Family-oriented”, “Price sensitivity” |
description |
string | Norm explanation |
valence |
enum | POSITIVE, NEGATIVE, NEUTRAL |
metadata |
map/json | Extra |
1.4.7 CulturalSignal
Label: CulturalSignal
| Property | Type | Description |
|---|---|---|
id |
string | ID |
name |
string | “Ramadan 2026 in MENA”, “Pride Month” |
signal_type |
enum | HOLIDAY, MOVEMENT, EVENT, TABOO, … |
description |
string | What it is, why it matters |
start_date |
datetime | |
end_date |
datetime | |
sensitivity |
enum | LOW, MEDIUM, HIGH |
metadata |
map/json | Extra |
1.4.8 CalendarMoment
Retail/cultural calendar block (often drives campaigns).
Label: CalendarMoment
| Property | Type | Description |
|---|---|---|
id |
string | ID |
name |
string | “Back to School 2026”, “Black Friday” |
moment_type |
enum | RETAIL, CULTURAL, SPORT, RELIGIOUS |
start_date |
datetime | |
end_date |
datetime | |
metadata |
map/json | Extra |
1.5 Audience & Trends
1.5.1 Topic
Semantic concept (for search, social, etc.).
Label: Topic
| Property | Type | Description |
|---|---|---|
id |
string | ID |
name |
string | “sustainability”, “gaming” |
description |
string | Optional |
aliases |
list | Synonyms / related labels |
metadata |
map/json | Extra |
1.5.2 AudienceSignal
Raw observation: search volume, social mention, etc.
Label: AudienceSignal
| Property | Type | Description |
|---|---|---|
id |
string | ID |
timestamp |
datetime | When observed |
channel |
string | SEARCH, SOCIAL, SITE, CRM, … |
metric_type |
string | SEARCH_VOLUME, MENTION_COUNT, SENTIMENT_SCORE, … |
value |
float | Numeric value |
unit |
string | INDEX, %, COUNT |
source_system |
string | Where it came from |
metadata |
map/json | Extra |
1.5.3 AudienceTrend
Aggregated / interpreted trend.
Label: AudienceTrend
| Property | Type | Description |
|---|---|---|
id |
string | ID |
name |
string | “Eco-conscious Gen Z” |
description |
string | Trend narrative |
start_date |
datetime | When first detected |
end_date |
datetime | Optional |
strength_score |
float | 0–1 |
confidence |
float | 0–1 |
source |
string | Analytics system / methodology |
metadata |
map/json | Extra |
1.5.4 CustomerNeedState
Job-to-be-done / need.
Label: CustomerNeedState
| Property | Type | Description |
|---|---|---|
id |
string | ID |
name |
string | “Quick mid-week dinner” |
description |
string | Need narrative |
intensity_score |
float | 0–1 |
metadata |
map/json | Extra |
1.6 Marketing & Campaigns
1.6.1 Campaign
Label: Campaign
| Property | Type | Description |
|---|---|---|
id |
string | Campaign ID |
name |
string | “Back to School 2026 – Brand X” |
description |
string | Summary |
campaign_type |
string | BRAND, CATEGORY, SEASONAL, etc. |
start_date |
datetime | |
end_date |
datetime | |
status |
enum | PLANNED, LIVE, ENDED |
budget |
float | Optional |
kpi |
map/json | e.g. target CTR, revenue, etc. |
metadata |
map/json | Extra |
1.6.2 ChannelActivation
Per-channel execution.
Label: ChannelActivation
| Property | Type | Description |
|---|---|---|
id |
string | ID |
channel |
string | EMAIL, INSTAGRAM, TV, etc. |
content_type |
string | POST, AD, DISPLAY, etc. |
scheduled_at |
datetime | When it goes live |
status |
string | PLANNED, LIVE, ENDED |
metadata |
map/json | Extra (placement, format…) |
1.6.3 ContentTheme
Label: ContentTheme
| Property | Type | Description |
|---|---|---|
id |
string | ID |
name |
string | “Eco-Friendly”, “Holiday” |
description |
string | |
theme_type |
string | SEASONAL, VALUE_PROP, EMOTIONAL |
metadata |
map/json |
1.7 AI Context & Feedback Loop
1.7.1 Context
Composite context for LLM (brand + channel + region + segment + archetype, etc.).
Label: Context
| Property | Type | Description |
|---|---|---|
id |
string | ID |
name |
string | “Brand X – UK – Social – Archetype A” |
description |
string | |
metadata |
map/json | Arbitrary context metadata |
1.7.2 ModelConfig
LLM configuration used.
Label: ModelConfig
| Property | Type | Description |
|---|---|---|
id |
string | ID |
model_name |
string | e.g. gpt-5.1 |
model_version |
string | Optional |
temperature |
float | |
top_p |
float | |
max_tokens |
integer | |
system_prompt_ref |
string | ID or URI for system prompt |
created_at |
datetime | |
metadata |
map/json |
1.7.3 ContentGenerationEvent
One generation call / batch.
Label: ContentGenerationEvent
| Property | Type | Description |
|---|---|---|
id |
string | ID |
timestamp |
datetime | When generated |
request_id |
string | Request trace ID |
prompt_hash |
string | Hash of raw prompt |
input_type |
string | PROMPT, TEMPLATE_FILL, etc. |
metadata |
map/json | Traces, params, etc. |
1.7.4 ContentVariant
A generated content variant.
Label: ContentVariant
| Property | Type | Description |
|---|---|---|
id |
string | ID |
content_type |
string | COPY, SUBJECT_LINE, CAPTION, … |
language |
string | en-GB, fr-FR, etc. |
body_text |
string | Text content (or pointer) |
version_tag |
string | A, B, etc. |
is_published |
boolean | Whether used externally |
metadata |
map/json | Extra |
1.7.5 EngagementMetric
KPI result for content, campaign, etc.
Label: EngagementMetric
| Property | Type | Description |
|---|---|---|
id |
string | ID |
metric_type |
string | CTR, CVR, ATC_RATE, VIEW_TIME, … |
value |
float | |
time_window |
string | e.g. 2025-12-01/2025-12-07 |
channel |
string | Optional |
region_code |
string | Optional |
segment_id_ref |
string | Optional |
metadata |
map/json |
1.7.6 UserFeedbackEvent
Explicit feedback on content.
Label: UserFeedbackEvent
| Property | Type | Description |
|---|---|---|
id |
string | ID |
timestamp |
datetime | When given |
feedback_type |
string | THUMBS_UP, THUMBS_DOWN, RATING, COMMENT, ESCALATION |
score |
float | Rating or +/-1 as needed |
comment |
string | Free text |
source |
string | CONSUMER, AGENT, INTERNAL_REVIEW |
metadata |
map/json |
1.7.7 AIQualityEvaluation
Structured evaluation (human/automated).
Label: AIQualityEvaluation
| Property | Type | Description |
|---|---|---|
id |
string | ID |
timestamp |
datetime | |
evaluator_type |
string | HUMAN_RATER, AUTO_CHECKER |
scores |
map/json | e.g. {brand_fit:0.9, clarity:0.8} |
pass_fail_flags |
map/json | e.g. {legal: true, tone: false} |
metadata |
map/json |
1.7.8 OptimisationRecommendation
Learning / suggestion node.
Label: OptimisationRecommendation
| Property | Type | Description |
|---|---|---|
id |
string | ID |
timestamp |
datetime | When generated |
scope_type |
string | BRAND, CATEGORY, CAMPAIGN, CONTEXT, ARCHETYPE |
scope_ref |
string | ID-of-scope (if not inferred from edges) |
change_type |
string | TONE_ADJUSTMENT, RULE_UPDATE, TEMPLATE_CHANGE, TARGETING_CHANGE |
description |
string | Proposed change text |
confidence |
float | 0–1 |
metadata |
map/json |
2. Relationship Types (Edges)
Notation:
(SOURCE_LABEL)-[:EDGE_TYPE {props}]->(TARGET_LABEL)
2.1 Brand & Product Relationships
-
(Brand)-[:OWNS_BRAND]->(Brand) -
Master brand → owned/private label
-
Props:
since(datetime) -
(Brand)-[:HOSTS_BRAND]->(Brand) -
Retailer hosts external brand
-
(Brand)-[:BRAND_OWNER_IS]->(Vendor) -
For hosted brands where vendor is corporate owner
-
(Brand)-[:CO_BRANDED_WITH]->(Brand) -
Co-branding partnership (usually symmetric)
-
(Vendor)-[:SUPPLIES_PRODUCT]->(Product) -
(Brand)-[:HAS_PRODUCT]->(Product) -
(Product)-[:IN_INTERNAL_CATEGORY]->(InternalCategory) -
Props:
is_primary(boolean) -
(Product)-[:HAS_GPC_CATEGORY]->(GpcCategory) -
(InternalCategory)-[:CHILD_OF]->(InternalCategory) -
(GpcCategory)-[:GPC_CHILD_OF]->(GpcCategory) -
(InternalCategory)-[:MAPPED_TO_GPC]->(GpcCategory) -
Props:
confidence(float 0–1) -
(BrandedCategory)-[:BELONGS_TO_BRAND]->(Brand) -
(BrandedCategory)-[:MAPPED_TO_INTERNAL_CATEGORY]->(InternalCategory) -
(BrandedCategory)-[:MAPPED_TO_GPC]->(GpcCategory)
2.2 Operational & Geographic
-
(SupplyChainNode)-[:LOCATED_IN]->(GeographicRegion) -
(GeographicRegion)-[:REGION_CHILD_OF]->(GeographicRegion) -
(CustomerSegment)-[:PRIMARY_REGION]->(GeographicRegion)(optional) -
(CustomerSegment)-[:RELATED_TO_NEED_STATE]->(CustomerNeedState) -
(Customer)-[:IN_SEGMENT]->(CustomerSegment) -
Props:
since(datetime),membership_source,confidence(float)
2.3 Archetypes & Customers
-
(Archetype)-[:BASED_ON_SEGMENT]->(CustomerSegment) -
Props:
weight(float 0–1) -
(Archetype)-[:INFLUENCED_BY_TREND]->(AudienceTrend) -
Props:
impact_strength(float 0–1) -
(Archetype)-[:FOCUSED_ON_NEED_STATE]->(CustomerNeedState) -
(Archetype)-[:REPRESENTS_CUSTOMER]->(Customer) -
Props:
match_score(float 0–1)primary(boolean) – if this is the customer’s primary archetype
-
(Campaign)-[:TARGETS_ARCHETYPE]->(Archetype) -
(Context)-[:CONTEXT_FOR_ARCHETYPE]->(Archetype) -
(ContentGenerationEvent)-[:FOR_ARCHETYPE]->(Archetype) -
(ContentVariant)-[:PERFORMS_FOR_ARCHETYPE]->(Archetype) -
(EngagementMetric)-[:ATTRIBUTED_TO_ARCHETYPE]->(Archetype) -
(UserFeedbackEvent)-[:FROM_ARCHETYPE_BUCKET]->(Archetype)(optional) -
(OptimisationRecommendation)-[:APPLIES_TO_ARCHETYPE]->(Archetype)
2.4 Brand Guidelines & Safety
-
(Brand)-[:USES_VISUAL_IDENTITY]->(VisualIdentityToken) -
(Brand)-[:USES_VERBAL_IDENTITY]->(VerbalIdentityToken) -
(Brand)-[:USES_AUDIO_IDENTITY]->(AudioIdentityToken) -
(Brand)-[:HAS_CONTENT_GUIDELINE]->(ContentGuideline) -
Props:
applicability(e.g.GLOBAL,REGION_SPECIFIC) -
(InternalCategory)-[:HAS_CONTENT_GUIDELINE]->(ContentGuideline) -
(GpcCategory)-[:HAS_CONTENT_GUIDELINE]->(ContentGuideline) -
(RiskDomain)-[:GOVERNED_BY_RULE]->(ContentGuideline) -
(CulturalSignal)-[:RELATES_TO_RISK_DOMAIN]->(RiskDomain) -
(CulturalSignal)-[:EXPRESSES_NORM]->(CulturalNorm) -
(CulturalSignal)-[:OCCURS_IN_REGION]->(GeographicRegion) -
(CalendarMoment)-[:ASSOCIATED_WITH_CULTURAL_SIGNAL]->(CulturalSignal) -
(Brand)-[:ALIGNS_WITH_SIGNAL]->(CulturalSignal) -
(Brand)-[:MUST_AVOID_SIGNAL]->(CulturalSignal) -
(Campaign)-[:ATTACHED_TO_CALENDAR_MOMENT]->(CalendarMoment) -
(Campaign)-[:MUST_NAVIGATE_SIGNAL]->(CulturalSignal)
2.5 Audience & Trends
-
(AudienceSignal)-[:ABOUT_TOPIC]->(Topic) -
(AudienceSignal)-[:OBSERVED_IN_SEGMENT]->(CustomerSegment) -
(AudienceSignal)-[:OBSERVED_IN_REGION]->(GeographicRegion) -
(AudienceTrend)-[:DERIVED_FROM_SIGNAL]->(AudienceSignal) -
Props:
weight(float) -
(AudienceTrend)-[:RELEVANT_FOR_SEGMENT]->(CustomerSegment) -
(AudienceTrend)-[:INFLUENCES_BRAND]->(Brand) -
(AudienceTrend)-[:INFLUENCES_CATEGORY]->(InternalCategory) -
(AudienceTrend)-[:INFLUENCES_GPC_CATEGORY]->(GpcCategory) -
(AudienceTrend)-[:INFORMS_CAMPAIGN]->(Campaign) -
(CustomerNeedState)-[:EXPRESSED_AS_TREND]->(AudienceTrend)
2.6 Marketing & Campaigns
-
(Brand)-[:HAS_CAMPAIGN]->(Campaign) -
(Campaign)-[:PROMOTES_BRAND]->(Brand) -
(Campaign)-[:PROMOTES_CATEGORY]->(InternalCategory) -
(Campaign)-[:PROMOTES_GPC_CATEGORY]->(GpcCategory) -
(Campaign)-[:TARGETS_SEGMENT]->(CustomerSegment) -
(Campaign)-[:TARGETS_ARCHETYPE]->(Archetype) -
(Campaign)-[:HAS_THEME]->(ContentTheme) -
(Campaign)-[:RUNS_IN_REGION]->(GeographicRegion) -
(Campaign)-[:HAS_ACTIVATION]->(ChannelActivation) -
(ChannelActivation)-[:IN_REGION]->(GeographicRegion) -
(ChannelActivation)-[:USES_THEME]->(ContentTheme)(optional)
2.7 AI Context & Feedback
2.7.1 Context wiring
-
(Context)-[:CONTEXT_FOR_BRAND]->(Brand) -
(Context)-[:CONTEXT_FOR_REGION]->(GeographicRegion) -
(Context)-[:CONTEXT_FOR_SEGMENT]->(CustomerSegment) -
(Context)-[:CONTEXT_FOR_ARCHETYPE]->(Archetype) -
(Context)-[:CONTEXT_FOR_CAMPAIGN]->(Campaign)(optional) -
(Context)-[:USES_VERBAL_IDENTITY]->(VerbalIdentityToken) -
(Context)-[:USES_VISUAL_IDENTITY]->(VisualIdentityToken) -
(Context)-[:USES_AUDIO_IDENTITY]->(AudioIdentityToken) -
(ContentGuideline)-[:OVERRIDES_IN_CONTEXT]->(Context)
2.7.2 Generation & evaluation
-
(ContentGenerationEvent)-[:USES_MODEL_CONFIG]->(ModelConfig) -
(ContentGenerationEvent)-[:FOR_BRAND]->(Brand) -
(ContentGenerationEvent)-[:FOR_CAMPAIGN]->(Campaign) -
(ContentGenerationEvent)-[:FOR_CATEGORY]->(InternalCategory) -
(ContentGenerationEvent)-[:FOR_SEGMENT]->(CustomerSegment) -
(ContentGenerationEvent)-[:FOR_ARCHETYPE]->(Archetype) -
(ContentGenerationEvent)-[:FOR_REGION]->(GeographicRegion) -
(ContentGenerationEvent)-[:USES_CONTEXT]->(Context) -
(ContentGenerationEvent)-[:PRODUCED_VARIANT]->(ContentVariant) -
(ContentVariant)-[:CONFORMS_TO_RULE]->(ContentGuideline) -
(ContentVariant)-[:VIOLATES_RULE]->(ContentGuideline) -
(AIQualityEvaluation)-[:EVALUATES_VARIANT]->(ContentVariant) -
(AIQualityEvaluation)-[:CHECKS_RULE]->(ContentGuideline) -
(UserFeedbackEvent)-[:FEEDBACK_ON_VARIANT]->(ContentVariant) -
(EngagementMetric)-[:MEASURES_VARIANT]->(ContentVariant) -
(EngagementMetric)-[:ROLLS_UP_TO_CAMPAIGN]->(Campaign)
2.7.3 Learning loop
-
(EngagementMetric)-[:UPDATES_TREND]->(AudienceTrend) -
(UserFeedbackEvent)-[:SUPPORTS_TREND_QUALITATIVELY]->(AudienceTrend) -
(AIQualityEvaluation)-[:GENERATES_RECOMMENDATION]->(OptimisationRecommendation) -
(EngagementMetric)-[:INSPIRES_RECOMMENDATION]->(OptimisationRecommendation) -
(OptimisationRecommendation)-[:APPLIES_TO_BRAND]->(Brand) -
(OptimisationRecommendation)-[:APPLIES_TO_CATEGORY]->(InternalCategory) -
(OptimisationRecommendation)-[:APPLIES_TO_CAMPAIGN]->(Campaign) -
(OptimisationRecommendation)-[:APPLIES_TO_CONTEXT]->(Context) -
(OptimisationRecommendation)-[:APPLIES_TO_ARCHETYPE]->(Archetype) -
(OptimisationRecommendation)-[:PROPOSES_RULE_UPDATE]->(ContentGuideline) -
(OptimisationRecommendation)-[:PROPOSES_TOKEN_UPDATE]->(VerbalIdentityToken) -
(ContentGuideline)-[:REFERENCED_BY_MODEL_CONFIG]->(ModelConfig) -
(VerbalIdentityToken)-[:REFERENCED_BY_MODEL_CONFIG]->(ModelConfig)
3. Implementation Notes (for Data Engineers / KG Modellers)
-
Platform
-
Any property graph DB (Neo4j, JanusGraph, Neptune, TigerGraph, etc.) will work.
-
Use constraints / indexes on IDs and key business keys (GTIN, category codes, region codes).
-
Multi-language
-
Either store language variants in
*_localizedmaps, or create aLocalizedTextpattern if preferred. -
Versioning
-
For guidelines and tokens, either version via properties (
version,valid_from,valid_to) or via new nodes linked byPREVIOUS_VERSION_OF. -
Customer privacy
-
Only pseudonymised IDs and bucketed attributes in
Customer. -
No raw PII (email, name, phone, exact address) in the graph.
-
Scale considerations
-
Archetype→Customer edges can be limited to primary archetype and/or sampled customers.
-
Detailed memberships can live in warehouse / feature store and be projected into the graph selectively.
-
LLM integration path
-
At generation time, the application resolves:
Customer→Archetype→Segment→Brand/Category/Region/Trends/Guidelines/Context- Then it assembles a prompt from those nodes (tokens, rules, examples) and logs a
ContentGenerationEvent.