UNPKG

universal-ai-brain

Version:

🧠 UNIVERSAL AI BRAIN 3.3 - The world's most advanced cognitive architecture with 24 specialized systems, MongoDB 8.1 $rankFusion hybrid search, latest Voyage 3.5 embeddings, and framework-agnostic design. Works with Mastra, Vercel AI, LangChain, OpenAI A

829 lines (740 loc) • 29.1 kB
/** * @file CulturalKnowledgeEngine - Advanced cultural intelligence for AI agents * * This engine provides comprehensive cultural knowledge and adaptation capabilities using MongoDB's * full-text search and cultural taxonomy features. Demonstrates MongoDB's advanced capabilities * for cultural data management, text search, and context-aware cultural recommendations. * * Features: * - Full-text search for cultural knowledge discovery * - Cultural taxonomy and hierarchical organization * - Context-aware cultural norm adaptation * - Cultural learning and pattern recognition * - Multi-language and regional cultural support * - Real-time cultural recommendation system */ import { Db, ObjectId } from 'mongodb'; import { CulturalKnowledgeCollection, CulturalKnowledge } from '../collections/CulturalKnowledgeCollection'; export interface CulturalAssessmentRequest { agentId: string; sessionId?: string; cultureId: string; cultureName: string; region: string; country: string; language: string; context: { situation: string; interaction_type: 'meeting' | 'negotiation' | 'presentation' | 'social' | 'customer_service'; formality_level: 'very_formal' | 'formal' | 'neutral' | 'informal' | 'very_informal'; participants: string[]; duration: number; // minutes outcome: 'successful' | 'partially_successful' | 'unsuccessful'; cultural_challenges?: string[]; }; observations: { communication_style: string; behavioral_norms: string[]; values_demonstrated: string[]; taboos_encountered?: string[]; successful_adaptations: string[]; areas_for_improvement: string[]; }; adaptation_effectiveness: { cultural_sensitivity: number; // 0-1 communication_effectiveness: number; // 0-1 relationship_building: number; // 0-1 conflict_avoidance: number; // 0-1 goal_achievement: number; // 0-1 }; } export interface CulturalRecommendationRequest { agentId: string; targetCulture: { region: string; country: string; language?: string; subculture?: string; }; context: { situation: string; interaction_type: string; formality_required: string; participants: number; duration: number; objectives: string[]; }; agent_background: { native_culture: string; cultural_experience: string[]; adaptation_strengths: string[]; known_challenges: string[]; }; } export interface CulturalAdaptationPlan { targetCulture: string; currentAdaptationLevel: number; targetAdaptationLevel: number; adaptationStrategies: Array<{ area: string; current_proficiency: number; target_proficiency: number; strategies: string[]; timeline: string; resources: string[]; }>; learningPath: Array<{ phase: number; focus_areas: string[]; activities: string[]; duration: string; milestones: string[]; }>; riskAssessment: { potential_challenges: string[]; mitigation_strategies: string[]; success_indicators: string[]; }; } export interface CulturalInsight { culture: string; insight_type: 'norm' | 'value' | 'behavior' | 'communication' | 'business'; insight: string; context: string; confidence: number; supporting_evidence: string[]; practical_applications: string[]; potential_pitfalls: string[]; } export interface CulturalAnalytics { cultural_competency: { overall_score: number; strongest_cultures: Array<{ culture: string; score: number }>; improvement_areas: Array<{ area: string; priority: string }>; adaptation_velocity: number; }; interaction_patterns: { most_successful_contexts: string[]; challenging_situations: string[]; cultural_preferences: string[]; adaptation_strategies: string[]; }; learning_insights: { fastest_learning_cultures: string[]; learning_patterns: string[]; knowledge_gaps: string[]; recommended_focus: string[]; }; recommendations: { immediate_actions: string[]; long_term_development: string[]; cultural_immersion_opportunities: string[]; skill_building_priorities: string[]; }; } /** * CulturalKnowledgeEngine - Advanced cultural intelligence and adaptation engine * * Provides comprehensive cultural knowledge management, adaptation planning, * and context-aware cultural recommendations using MongoDB's full-text search * and cultural taxonomy capabilities. */ export class CulturalKnowledgeEngine { private culturalKnowledgeCollection: CulturalKnowledgeCollection; private isInitialized = false; constructor(private db: Db) { this.culturalKnowledgeCollection = new CulturalKnowledgeCollection(db); } /** * Initialize the cultural knowledge engine */ async initialize(): Promise<void> { try { await this.culturalKnowledgeCollection.createIndexes(); this.isInitialized = true; console.log('CulturalKnowledgeEngine initialized successfully'); } catch (error) { console.error('Failed to initialize CulturalKnowledgeEngine:', error); throw error; } } /** * Assess and record cultural interaction */ async assessCulturalInteraction(request: CulturalAssessmentRequest): Promise<ObjectId> { if (!this.isInitialized) { throw new Error('CulturalKnowledgeEngine must be initialized first'); } // Calculate overall adaptation level const adaptationLevel = this.calculateAdaptationLevel(request.adaptation_effectiveness); // Generate cultural insights const culturalInsights = this.generateCulturalInsights(request); // Determine cultural characteristics const culturalCharacteristics = this.inferCulturalCharacteristics(request); // Create cultural knowledge record const culturalKnowledge: Omit<CulturalKnowledge, '_id' | 'createdAt' | 'updatedAt'> = { agentId: request.agentId, sessionId: request.sessionId, timestamp: new Date(), culture: { id: request.cultureId, name: request.cultureName, region: request.region, country: request.country, language: request.language, hierarchy: { level: this.determineCulturalLevel(request.region, request.country), parent: this.determineParentCulture(request.region), children: [], influences: this.determineInfluences(request.region, request.country), similarities: this.findSimilarCultures(request.region, request.country) }, metadata: culturalCharacteristics }, norms: this.extractCulturalNorms(request), knowledge: this.buildCulturalKnowledge(request, culturalInsights), adaptation: { adaptation_level: adaptationLevel, learning_progress: { areas_mastered: request.observations.successful_adaptations, areas_improving: request.observations.areas_for_improvement, areas_struggling: request.context.cultural_challenges || [], recent_learnings: [{ date: new Date(), insight: `Cultural interaction in ${request.context.situation}`, context: request.context.interaction_type, confidence: adaptationLevel }] }, sensitivity: { cultural_awareness: request.adaptation_effectiveness.cultural_sensitivity, bias_recognition: this.assessBiasRecognition(request), inclusive_behavior: request.adaptation_effectiveness.relationship_building, cross_cultural_effectiveness: this.calculateCrossCulturalEffectiveness(request.adaptation_effectiveness) }, strategies: { communication_adjustments: this.identifyCommAdjustments(request), behavior_modifications: this.identifyBehaviorMods(request), learning_approaches: this.suggestLearningApproaches(request), feedback_incorporation: this.suggestFeedbackMethods(request) } }, application: { recent_usage: [{ date: new Date(), context: request.context.situation, situation: request.context.interaction_type, adaptation_used: request.observations.successful_adaptations, effectiveness: adaptationLevel, feedback: request.context.outcome, lessons_learned: request.observations.areas_for_improvement }], patterns: { most_effective_contexts: [request.context.interaction_type], challenging_situations: request.context.cultural_challenges || [], successful_adaptations: request.observations.successful_adaptations, areas_for_improvement: request.observations.areas_for_improvement }, interactions: { successful_interactions: request.context.outcome === 'successful' ? 1 : 0, cultural_misunderstandings: request.context.cultural_challenges?.length || 0, adaptation_successes: request.observations.successful_adaptations.length, learning_opportunities: request.observations.areas_for_improvement.length } } }; return await this.culturalKnowledgeCollection.recordCulturalKnowledge(culturalKnowledge); } /** * Get cultural recommendations for a specific context */ async getCulturalRecommendations(request: CulturalRecommendationRequest): Promise<Array<CulturalInsight>> { if (!this.isInitialized) { throw new Error('CulturalKnowledgeEngine must be initialized first'); } // Search for relevant cultural knowledge const searchResults = await this.culturalKnowledgeCollection.searchCulturalKnowledge( request.agentId, `${request.targetCulture.country} ${request.context.situation} ${request.context.interaction_type}`, { region: request.targetCulture.region, language: request.targetCulture.language, limit: 10 } ); // Get contextual recommendations const contextualRecommendations = await this.culturalKnowledgeCollection.getCulturalRecommendations( request.agentId, { situation: request.context.situation, region: request.targetCulture.region, formality_required: request.context.formality_required, interaction_type: request.context.interaction_type } ); // Generate cultural insights const insights: CulturalInsight[] = []; // Add insights from search results searchResults.forEach(result => { insights.push({ culture: result.culture.name, insight_type: 'behavior', insight: `Based on previous interactions in ${result.culture.name}`, context: request.context.situation, confidence: result.score * result.adaptation.adaptation_level, supporting_evidence: result.adaptation.learning_progress.recent_learnings.map(l => l.insight), practical_applications: result.adaptation.strategies.communication_adjustments, potential_pitfalls: result.application.patterns.challenging_situations }); }); // Add insights from contextual recommendations contextualRecommendations.forEach(rec => { insights.push({ culture: rec.culture, insight_type: 'communication', insight: rec.recommendations.join('. '), context: request.context.situation, confidence: rec.confidence, supporting_evidence: [rec.reasoning], practical_applications: rec.recommendations, potential_pitfalls: [] }); }); return insights.sort((a, b) => b.confidence - a.confidence); } /** * Generate cultural adaptation plan */ async generateAdaptationPlan( agentId: string, targetCulture: string, currentLevel?: number ): Promise<CulturalAdaptationPlan> { if (!this.isInitialized) { throw new Error('CulturalKnowledgeEngine must be initialized first'); } // Get current cultural knowledge const existingKnowledge = await this.culturalKnowledgeCollection.getAgentCulturalKnowledge(agentId, { 'culture.name': targetCulture }); const currentAdaptationLevel = currentLevel || (existingKnowledge.length > 0 ? existingKnowledge[0].adaptation.adaptation_level : 0); const targetAdaptationLevel = Math.min(1.0, currentAdaptationLevel + 0.3); // Define adaptation strategies const adaptationStrategies = [ { area: 'Communication Style', current_proficiency: currentAdaptationLevel, target_proficiency: targetAdaptationLevel, strategies: [ 'Practice formal/informal communication patterns', 'Learn cultural greeting and farewell customs', 'Understand non-verbal communication norms' ], timeline: '2-4 weeks', resources: ['Cultural communication guides', 'Language learning apps', 'Native speaker practice'] }, { area: 'Business Etiquette', current_proficiency: currentAdaptationLevel * 0.8, target_proficiency: targetAdaptationLevel, strategies: [ 'Study meeting and negotiation protocols', 'Learn gift-giving and hospitality norms', 'Understand hierarchy and decision-making processes' ], timeline: '3-6 weeks', resources: ['Business culture guides', 'Professional mentoring', 'Cultural workshops'] }, { area: 'Social Norms', current_proficiency: currentAdaptationLevel * 0.9, target_proficiency: targetAdaptationLevel, strategies: [ 'Understand family and relationship dynamics', 'Learn about taboo topics and sensitive areas', 'Practice appropriate humor and conversation topics' ], timeline: '4-8 weeks', resources: ['Cultural immersion experiences', 'Social interaction practice', 'Cultural mentors'] } ]; // Create learning path const learningPath = [ { phase: 1, focus_areas: ['Basic cultural awareness', 'Communication fundamentals'], activities: ['Cultural orientation', 'Language basics', 'Observation exercises'], duration: '2 weeks', milestones: ['Understand basic cultural values', 'Can engage in simple interactions'] }, { phase: 2, focus_areas: ['Business and professional norms', 'Relationship building'], activities: ['Professional interaction practice', 'Mentoring sessions', 'Case study analysis'], duration: '4 weeks', milestones: ['Effective professional interactions', 'Building cultural relationships'] }, { phase: 3, focus_areas: ['Advanced cultural nuances', 'Leadership in cultural context'], activities: ['Complex scenario practice', 'Cultural leadership training', 'Peer teaching'], duration: '6 weeks', milestones: ['Navigate complex cultural situations', 'Mentor others in cultural adaptation'] } ]; // Risk assessment const riskAssessment = { potential_challenges: [ 'Cultural stereotyping and bias', 'Over-generalization of cultural norms', 'Resistance to changing communication style', 'Misunderstanding cultural context' ], mitigation_strategies: [ 'Regular feedback and reflection sessions', 'Diverse cultural exposure and practice', 'Continuous learning and adaptation mindset', 'Cultural mentor guidance and support' ], success_indicators: [ 'Increased cultural sensitivity scores', 'Positive feedback from cultural interactions', 'Successful achievement of cultural objectives', 'Reduced cultural misunderstandings' ] }; return { targetCulture, currentAdaptationLevel, targetAdaptationLevel, adaptationStrategies, learningPath, riskAssessment }; } /** * Analyze cultural patterns and generate analytics */ async analyzeCulturalPatterns(agentId: string): Promise<CulturalAnalytics> { if (!this.isInitialized) { throw new Error('CulturalKnowledgeEngine must be initialized first'); } const adaptationAnalysis = await this.culturalKnowledgeCollection.analyzeCulturalAdaptation(agentId); const culturalKnowledge = await this.culturalKnowledgeCollection.getAgentCulturalKnowledge(agentId); // Calculate cultural competency const cultural_competency = { overall_score: adaptationAnalysis.overallAdaptation, strongest_cultures: adaptationAnalysis.strongestCultures.map((c: any) => ({ culture: c.culture, score: c.adaptation })), improvement_areas: adaptationAnalysis.improvementAreas, adaptation_velocity: this.calculateAdaptationVelocity(culturalKnowledge) }; // Analyze interaction patterns const interaction_patterns = this.analyzeInteractionPatterns(culturalKnowledge); // Generate learning insights const learning_insights = this.generateLearningInsights(culturalKnowledge, adaptationAnalysis); // Create recommendations const recommendations = { immediate_actions: adaptationAnalysis.recommendations.slice(0, 3), long_term_development: this.generateLongTermRecommendations(adaptationAnalysis), cultural_immersion_opportunities: this.suggestImmersionOpportunities(culturalKnowledge), skill_building_priorities: this.identifySkillPriorities(adaptationAnalysis.improvementAreas) }; return { cultural_competency, interaction_patterns, learning_insights, recommendations }; } /** * Update cultural adaptation based on new experience */ async updateCulturalAdaptation( agentId: string, cultureId: string, adaptationUpdate: { newAdaptationLevel: number; learningInsight: string; context: string; } ): Promise<void> { if (!this.isInitialized) { throw new Error('CulturalKnowledgeEngine must be initialized first'); } await this.culturalKnowledgeCollection.updateCulturalAdaptation( agentId, cultureId, adaptationUpdate ); } // Private helper methods private calculateAdaptationLevel(effectiveness: any): number { const weights = { cultural_sensitivity: 0.25, communication_effectiveness: 0.25, relationship_building: 0.2, conflict_avoidance: 0.15, goal_achievement: 0.15 }; return Object.entries(weights).reduce((sum, [key, weight]) => { return sum + (effectiveness[key] || 0) * weight; }, 0); } private generateCulturalInsights(request: CulturalAssessmentRequest): string[] { const insights = []; if (request.observations.values_demonstrated.length > 0) { insights.push(`Key values: ${request.observations.values_demonstrated.join(', ')}`); } if (request.observations.behavioral_norms.length > 0) { insights.push(`Behavioral norms: ${request.observations.behavioral_norms.join(', ')}`); } if (request.observations.successful_adaptations.length > 0) { insights.push(`Successful adaptations: ${request.observations.successful_adaptations.join(', ')}`); } return insights; } private inferCulturalCharacteristics(request: CulturalAssessmentRequest): any { // Infer cultural characteristics based on observations const formality = request.context.formality_level; const directness = this.inferDirectness(request.observations.communication_style); const collectivism = this.inferCollectivism(request.observations.values_demonstrated); return { formality, directness, hierarchy: 'moderate', collectivism, uncertainty_avoidance: 0.5, power_distance: 0.5, time_orientation: 'present' }; } private determineCulturalLevel(region: string, country: string): number { // Simple hierarchy: global=0, regional=1, national=2, local=3 return 2; // National level } private determineParentCulture(region: string): string { return region; // Region is parent of country } private determineInfluences(region: string, country: string): string[] { // Simplified influence mapping const influences: Record<string, string[]> = { 'north_america': ['european', 'indigenous'], 'europe': ['mediterranean', 'nordic'], 'east_asia': ['confucian', 'buddhist'], 'middle_east': ['islamic', 'persian'] }; return influences[region] || []; } private findSimilarCultures(region: string, country: string): string[] { // Simplified similarity mapping const similarities: Record<string, string[]> = { 'united_states': ['canada', 'australia', 'united_kingdom'], 'germany': ['austria', 'switzerland', 'netherlands'], 'japan': ['south_korea', 'singapore'], 'brazil': ['argentina', 'mexico', 'colombia'] }; return similarities[country] || []; } private extractCulturalNorms(request: CulturalAssessmentRequest): any { return { communication: { greeting_style: 'Standard greeting observed', addressing_style: request.context.formality_level, conversation_pace: 'moderate', silence_comfort: 0.5, interruption_tolerance: 0.5, small_talk_importance: 0.6, eye_contact_norms: 'Moderate eye contact', personal_space: 1.2 }, business: { meeting_style: request.context.formality_level, decision_making: 'collaborative', punctuality_importance: 0.8, relationship_building: 0.7, gift_giving_norms: 'Appropriate gifts welcomed', dress_code_expectations: 'Business appropriate', negotiation_style: 'Collaborative approach' }, social: { hospitality_expectations: 'Warm hospitality', family_importance: 0.8, age_respect: 0.7, gender_roles: 'Evolving roles', religious_considerations: [], taboo_topics: request.observations.taboos_encountered || [], humor_appropriateness: 'Context-dependent' } }; } private buildCulturalKnowledge(request: CulturalAssessmentRequest, insights: string[]): any { return { context: { historical_background: `Cultural context for ${request.cultureName}`, key_values: request.observations.values_demonstrated, cultural_symbols: [], important_holidays: [], traditional_practices: [], modern_adaptations: request.observations.successful_adaptations }, linguistic: { primary_language: request.language, common_phrases: [], non_verbal_cues: [], communication_styles: [request.observations.communication_style] }, business_insights: { work_culture: `${request.context.interaction_type} focused`, leadership_styles: [], team_dynamics: 'Collaborative', conflict_resolution: 'Direct communication', feedback_culture: 'Open feedback', innovation_approach: 'Balanced approach' } }; } private assessBiasRecognition(request: CulturalAssessmentRequest): number { // Simple assessment based on cultural challenges encountered const challenges = request.context.cultural_challenges?.length || 0; return Math.max(0.3, 1.0 - (challenges * 0.2)); } private calculateCrossCulturalEffectiveness(effectiveness: any): number { return (effectiveness.communication_effectiveness + effectiveness.relationship_building) / 2; } private identifyCommAdjustments(request: CulturalAssessmentRequest): string[] { const adjustments = []; if (request.context.formality_level === 'very_formal') { adjustments.push('Use formal language and titles'); } if (request.observations.communication_style.includes('indirect')) { adjustments.push('Practice indirect communication patterns'); } return adjustments; } private identifyBehaviorMods(request: CulturalAssessmentRequest): string[] { return request.observations.areas_for_improvement.map(area => `Modify behavior for ${area}` ); } private suggestLearningApproaches(request: CulturalAssessmentRequest): string[] { return [ 'Observational learning', 'Cultural mentoring', 'Immersive experiences', 'Reflective practice' ]; } private suggestFeedbackMethods(request: CulturalAssessmentRequest): string[] { return [ 'Regular cultural check-ins', 'Peer feedback sessions', 'Cultural mentor guidance', 'Self-reflection exercises' ]; } private inferDirectness(communicationStyle: string): string { if (communicationStyle.toLowerCase().includes('direct')) return 'direct'; if (communicationStyle.toLowerCase().includes('indirect')) return 'indirect'; return 'moderate'; } private inferCollectivism(values: string[]): number { const collectivistValues = ['teamwork', 'harmony', 'consensus', 'group', 'family']; const individualistValues = ['independence', 'achievement', 'individual', 'personal']; const collectivistScore = values.filter(v => collectivistValues.some(cv => v.toLowerCase().includes(cv)) ).length; const individualistScore = values.filter(v => individualistValues.some(iv => v.toLowerCase().includes(iv)) ).length; if (collectivistScore > individualistScore) return 0.7; if (individualistScore > collectivistScore) return 0.3; return 0.5; } private calculateAdaptationVelocity(culturalKnowledge: CulturalKnowledge[]): number { if (culturalKnowledge.length === 0) return 0; // Calculate average learning velocity based on recent learnings const totalVelocity = culturalKnowledge.reduce((sum, culture) => { const recentLearnings = culture.adaptation.learning_progress.recent_learnings; if (recentLearnings.length < 2) return sum; const timeSpan = recentLearnings.length * 7; // Assume weekly learnings const confidenceGain = recentLearnings[recentLearnings.length - 1].confidence - recentLearnings[0].confidence; return sum + (confidenceGain / timeSpan); }, 0); return totalVelocity / culturalKnowledge.length; } private analyzeInteractionPatterns(culturalKnowledge: CulturalKnowledge[]): any { const allPatterns = culturalKnowledge.map(c => c.application.patterns); return { most_successful_contexts: this.getMostFrequent( allPatterns.flatMap(p => p.most_effective_contexts) ), challenging_situations: this.getMostFrequent( allPatterns.flatMap(p => p.challenging_situations) ), cultural_preferences: this.getMostFrequent( culturalKnowledge.map(c => c.culture.name) ), adaptation_strategies: this.getMostFrequent( allPatterns.flatMap(p => p.successful_adaptations) ) }; } private generateLearningInsights(culturalKnowledge: CulturalKnowledge[], adaptationAnalysis: any): any { const fastestLearning = culturalKnowledge .filter(c => c.adaptation.learning_progress.recent_learnings.length > 0) .sort((a, b) => b.adaptation.adaptation_level - a.adaptation.adaptation_level) .slice(0, 3) .map(c => c.culture.name); return { fastest_learning_cultures: fastestLearning, learning_patterns: ['Observational learning', 'Practice-based improvement'], knowledge_gaps: adaptationAnalysis.improvementAreas.map((area: any) => area.area), recommended_focus: adaptationAnalysis.strongestCultures.slice(0, 2).map((c: any) => c.culture) }; } private generateLongTermRecommendations(adaptationAnalysis: any): string[] { const recommendations = [ 'Develop cultural mentoring relationships', 'Pursue formal cultural competency training', 'Engage in cross-cultural leadership opportunities' ]; if (adaptationAnalysis.overallAdaptation < 0.6) { recommendations.unshift('Focus on foundational cultural competency building'); } return recommendations; } private suggestImmersionOpportunities(culturalKnowledge: CulturalKnowledge[]): string[] { const cultures = culturalKnowledge.map(c => c.culture.name); return [ `Cultural exchange programs in ${cultures[0] || 'target cultures'}`, 'International assignment opportunities', 'Cross-cultural project leadership', 'Cultural community engagement', 'Language immersion programs' ]; } private identifySkillPriorities(improvementAreas: any[]): string[] { const priorities = improvementAreas .filter(area => area.priority === 'high') .map(area => area.area); if (priorities.length === 0) { return ['Cultural sensitivity development', 'Cross-cultural communication']; } return priorities; } private getMostFrequent(items: string[]): string[] { const frequency: Record<string, number> = {}; items.forEach(item => { frequency[item] = (frequency[item] || 0) + 1; }); return Object.entries(frequency) .sort(([,a], [,b]) => b - a) .slice(0, 5) .map(([item]) => item); } }