Skip to main content

System Prompt Configuration

System prompts are dynamically generated based on configuration settings, allowing easy customization without code changes.

Configuration File

Location: app/chat/config.ts

export const chatConfig = {
productDescriptions: {
// Tone Settings
tone: 'enthusiastic' | 'friendly' | 'professional',

// Length Control
sentencesPerProduct: 3,
maxWords: 250,

// Optimization Flags
useConversionLanguage: boolean,
emphasizeBenefits: boolean,
personalizeToContext: boolean
},

contextEnrichment: {
enabled: boolean,
maxQuestions: 2,
requireProducts: boolean,
minConfidence: 0.6
}
};

Configuration Options

Tone Settings

Option: productDescriptions.tone
Values: 'enthusiastic' | 'friendly' | 'professional'
Default: 'enthusiastic'

Enthusiastic

Estonian: "Sõbralik, väga entusiastlik ja inspireeriv"
English: "Friendly, highly enthusiastic and inspiring"

Output style:
- Exclamation points
- Superlatives ("suurepärane", "fantastiline")
- High energy language

Friendly

Estonian: "Sõbralik, soojapoolne ja vestluslik"
English: "Friendly, warm and conversational"

Output style:
- Casual language
- Warm phrasing
- Approachable tone

Professional

Estonian: "Professionaalne, kuid lähedane ja abivalmis"
English: "Professional yet approachable and helpful"

Output style:
- Formal but warm
- Expert advice
- Trustworthy tone

Conversion Language

Option: productDescriptions.useConversionLanguage
Type: boolean
Default: true

When enabled, includes phrases like:

Estonian:

  • "Suurepärane kingitus!"
  • "Soovitan väga"
  • "Ideaalne valik!"
  • "Kindlasti hea otsus!"

English:

  • "Perfect gift!"
  • "Highly recommended"
  • "Ideal choice!"
  • "Can't go wrong with this!"

Impact:

  • Higher conversion rates
  • More confident recommendations
  • Better user engagement
  • ⚠️ May feel pushy if overused

Benefits Emphasis

Option: productDescriptions.emphasizeBenefits
Type: boolean
Default: true

When enabled, focuses on:

Estonian: "Mis väärtust toode annab, kellele sobib, 
millised vajadused rahuldab"

English: "What value it provides, who it's perfect for,
what needs it fulfills"

Example difference:

Without benefits:

"Harry Potter on fantastiline raamat lastel."

With benefits:

"Harry Potter arendab kujutlusvõimet, õpetab sõpruse väärtust, 
ja sobib ideaalselt 9-12-aastastele, kes armastavad seiklusi."

Context Personalization

Option: productDescriptions.personalizeToContext
Type: boolean
Default: true

When enabled, weaves in context:

Estonian: "Mainige puhust (sünnipäev), saajat (ema), 
eelarvet loomulikult"

English: "Mention occasion (birthday), recipient (mom),
budget naturally"

Example:

Without personalization:

"This book is great for children aged 10."

With personalization:

"For your daughter's 10th birthday, this book is a perfect 
choice and fits your $30 budget beautifully."

Context Enrichment

Enable/Disable

Option: contextEnrichment.enabled
Type: boolean
Default: false (to avoid over-questioning)

When enabled:

  • AI asks clarifying questions after recommendations
  • Helps gather missing context for future queries
  • Improves recommendation accuracy over time

Maximum Questions

Option: contextEnrichment.maxQuestions
Type: number
Default: 2

Rationale:

  • 1 question: Too little information
  • 2 questions: Optimal balance
  • 3+ questions: Feels like interrogation

Require Products

Option: contextEnrichment.requireProducts
Type: boolean
Default: true

When true:

  • Only ask questions after showing products
  • Don't question-spam on failed searches
  • Better UX flow

Minimum Confidence

Option: contextEnrichment.minConfidence
Type: number (0-1)
Default: 0.6

Purpose:

  • Only enrich when context extraction was successful
  • Skip if LLM had low confidence
  • Avoid asking redundant questions

Implementation

Dynamic Tone Generation

Location: system-prompt.ts:6-34

function getToneInstructions(language: 'et' | 'en'): string {
const config = chatConfig.productDescriptions;
const isEstonian = language === 'et';

switch (config.tone) {
case 'enthusiastic':
return isEstonian
? 'Sõbralik, väga entusiastlik ja inspireeriv'
: 'Friendly, highly enthusiastic and inspiring';

case 'friendly':
return isEstonian
? 'Sõbralik, soojapoolne ja vestluslik'
: 'Friendly, warm and conversational';

case 'professional':
return isEstonian
? 'Professionaalne, kuid lähedane ja abivalmis'
: 'Professional yet approachable and helpful';

default:
return isEstonian
? 'Sõbralik ja abivalmis'
: 'Friendly and helpful';
}
}

Conversion Language

Location: system-prompt.ts:36-44

function getConversionLanguageExamples(language: 'et' | 'en'): string {
const config = chatConfig.productDescriptions;

if (!config.useConversionLanguage) {
return ''; // Omit conversion phrases
}

if (language === 'et') {
return `- Kasutan konversioonikeskset keelt: "Suurepärane kingitus!",
"Soovitan väga", "Ideaalne valik!"`;
}

return `- Use conversion-focused language: "Perfect gift!",
"Highly recommended", "Ideal choice!"`;
}

A/B Testing Configurations

Test 1: Tone Impact

// Control Group
{ tone: 'friendly' }

// Test Group
{ tone: 'enthusiastic' }

// Measure: Conversion rate, engagement time

Test 2: Conversion Language

// Control Group
{ useConversionLanguage: false }

// Test Group
{ useConversionLanguage: true }

// Measure: Click-through rate, purchase rate

Test 3: Enrichment Questions

// Control Group
{ contextEnrichment: { enabled: false } }

// Test Group
{ contextEnrichment: { enabled: true, maxQuestions: 2 } }

// Measure: Context completeness, recommendation quality

Best Practices

Do's

  • Test configuration changes in staging first
  • Monitor user feedback after config changes
  • Use enthusiastic tone for gift recommendations
  • Enable personalization for better engagement
  • Limit enrichment questions to 2 maximum

Don'ts

  • Don't change tone mid-conversation
  • Don't enable too many flags at once
  • Don't set maxQuestions > 3 (annoying)
  • Don't disable validation rules
  • Don't remove critical prohibitions

Configuration Flow

Monitoring Config Impact

Track these metrics by configuration:

{
tone: string,
metrics: {
avgResponseLength: number,
conversionRate: number,
userSatisfaction: number,
engagementTime: number
}
}

Example Results:

enthusiastic:
- avgResponseLength: 220 words
- conversionRate: 12.5%
- userSatisfaction: 4.6/5

friendly:
- avgResponseLength: 180 words
- conversionRate: 10.2%
- userSatisfaction: 4.4/5

professional:
- avgResponseLength: 150 words
- conversionRate: 9.8%
- userSatisfaction: 4.3/5