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
Related Documentation
- Estonian Prompt - Estonian rules
- English Prompt - English rules
- Dynamic Generation - How config is applied