Add 2 files
Browse files- index.html +441 -70
- prompts.txt +4 -1
index.html
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
<head>
|
4 |
<meta charset="UTF-8">
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
-
<title>Franz - Psychoanalytischer Dialog</title>
|
7 |
<script src="https://cdn.tailwindcss.com"></script>
|
8 |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
9 |
<style>
|
@@ -93,6 +93,40 @@
|
|
93 |
padding-left: 12px;
|
94 |
margin: 12px 0;
|
95 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
</style>
|
97 |
</head>
|
98 |
<body class="bg-gray-50">
|
@@ -103,7 +137,7 @@
|
|
103 |
<div class="bg-indigo-100 p-3 rounded-full mr-4">
|
104 |
<i class="fas fa-brain text-indigo-600 text-2xl"></i>
|
105 |
</div>
|
106 |
-
<h1 class="title-font text-3xl font-bold text-gray-800">Franz</h1>
|
107 |
</div>
|
108 |
<p class="text-gray-600 max-w-2xl mx-auto">
|
109 |
Ihr persönlicher psychoanalytischer Gesprächspartner für tiefere Selbsterkenntnis
|
@@ -118,7 +152,7 @@
|
|
118 |
<i class="fas fa-user-tie"></i>
|
119 |
</div>
|
120 |
<div>
|
121 |
-
<h2 class="font-semibold">Dr. Franz
|
122 |
<p class="text-xs text-indigo-200">Psychoanalytischer Gesprächspartner</p>
|
123 |
</div>
|
124 |
</div>
|
@@ -135,7 +169,7 @@
|
|
135 |
<div class="psycho-bubble rounded-lg p-4 max-w-[85%]">
|
136 |
<p class="text-sm text-gray-500 mb-1" id="greeting-time"></p>
|
137 |
<p class="font-medium text-indigo-800 mb-2">Willkommen zu unserem persönlichen Dialog.</p>
|
138 |
-
<p class="text-gray-700 mb-3">Ich bin Franz und begleite Sie in einem reflektierenden Gespräch. Bevor wir beginnen: </p>
|
139 |
|
140 |
<div class="personalized-question">
|
141 |
<p class="text-gray-700 font-medium">Wie darf ich Sie nennen? Und was hat Sie heute zu mir geführt?</p>
|
@@ -176,11 +210,21 @@
|
|
176 |
gender: null,
|
177 |
knownIssues: [],
|
178 |
emotionalState: null,
|
179 |
-
conversationStage: 'initial', // initial, name_established, issue_shared, deep_dive
|
180 |
-
lastTopics: []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
181 |
};
|
182 |
|
183 |
let conversationHistory = [];
|
|
|
184 |
|
185 |
document.addEventListener('DOMContentLoaded', function() {
|
186 |
const messageInput = document.getElementById('message-input');
|
@@ -238,6 +282,15 @@
|
|
238 |
setTimeout(() => {
|
239 |
removeTypingIndicator();
|
240 |
const response = generatePersonalizedResponse(messageText);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
241 |
addMessage(response.text, 'psycho', response.meta);
|
242 |
|
243 |
// Update conversation stage
|
@@ -245,6 +298,11 @@
|
|
245 |
userProfile.conversationStage = response.meta.updateStage;
|
246 |
}
|
247 |
|
|
|
|
|
|
|
|
|
|
|
248 |
// Add to conversation history
|
249 |
conversationHistory.push({
|
250 |
sender: 'psycho',
|
@@ -252,6 +310,20 @@
|
|
252 |
meta: response.meta,
|
253 |
timestamp: new Date()
|
254 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
255 |
}, 1000 + Math.random() * 1500);
|
256 |
}
|
257 |
|
@@ -261,20 +333,33 @@
|
|
261 |
|
262 |
// Extract name if not already set (first message)
|
263 |
if (!userProfile.name && userProfile.conversationStage === 'initial') {
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
270 |
}
|
271 |
|
272 |
-
//
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
|
|
|
|
277 |
}
|
|
|
|
|
278 |
}
|
279 |
|
280 |
// Extract age
|
@@ -287,28 +372,59 @@
|
|
287 |
|
288 |
// Extract gender
|
289 |
if (!userProfile.gender) {
|
290 |
-
if (
|
291 |
userProfile.gender = 'weiblich';
|
292 |
-
} else if (
|
293 |
userProfile.gender = 'männlich';
|
294 |
}
|
295 |
}
|
296 |
|
297 |
// Detect emotional state keywords
|
298 |
-
if (
|
299 |
userProfile.emotionalState = 'distressed';
|
300 |
-
} else if (
|
301 |
userProfile.emotionalState = 'angry';
|
302 |
-
} else if (
|
303 |
userProfile.emotionalState = 'confused';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
304 |
}
|
305 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
306 |
// Track last topics (simple keyword matching)
|
307 |
const topics = [];
|
308 |
if (lowerMessage.includes('freund') || lowerMessage.includes('freundin')) topics.push('friendship');
|
309 |
if (lowerMessage.includes('partner') || lowerMessage.includes('beziehung')) topics.push('relationship');
|
310 |
if (lowerMessage.includes('familie') || lowerMessage.includes('eltern')) topics.push('family');
|
311 |
if (lowerMessage.includes('arbeit') || lowerMessage.includes('job')) topics.push('work');
|
|
|
|
|
312 |
|
313 |
if (topics.length > 0) {
|
314 |
userProfile.lastTopics = [...userProfile.lastTopics, ...topics].slice(-3); // Keep last 3 topics
|
@@ -333,6 +449,42 @@
|
|
333 |
`;
|
334 |
} else {
|
335 |
// Psycho response with personalized structure
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
336 |
messageDiv.innerHTML = `
|
337 |
<div class="flex-shrink-0 mr-3">
|
338 |
<div class="w-8 h-8 rounded-full bg-indigo-100 flex items-center justify-center">
|
@@ -341,6 +493,7 @@
|
|
341 |
</div>
|
342 |
<div class="psycho-bubble rounded-lg p-4 max-w-[85%]">
|
343 |
${meta.isFollowUp ? `<p class="text-sm text-gray-500 mb-1">Zu Ihrer letzten Aussage:</p>` : ''}
|
|
|
344 |
${meta.personalizedGreeting ? `<p class="font-medium text-indigo-800 mb-2">${meta.personalizedGreeting}</p>` : ''}
|
345 |
<div class="text-gray-700 space-y-3">
|
346 |
${text}
|
@@ -350,6 +503,7 @@
|
|
350 |
<p class="text-gray-700 font-medium">${meta.followUpQuestion}</p>
|
351 |
</div>
|
352 |
` : ''}
|
|
|
353 |
</div>
|
354 |
`;
|
355 |
}
|
@@ -390,26 +544,142 @@
|
|
390 |
}
|
391 |
}
|
392 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
393 |
// Generate personalized response based on conversation flow
|
394 |
function generatePersonalizedResponse(message) {
|
395 |
const lowerMessage = message.toLowerCase();
|
396 |
|
397 |
// Stage 1: Name establishment
|
398 |
if (!userProfile.name && userProfile.conversationStage === 'initial') {
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
407 |
}
|
408 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
409 |
}
|
410 |
|
411 |
// Just got the name - acknowledge and ask about issue
|
412 |
if (userProfile.name && userProfile.conversationStage === 'initial') {
|
|
|
413 |
return {
|
414 |
text: `
|
415 |
<p>Vielen Dank, ${userProfile.name}. Schön, Sie kennenzulernen.</p>
|
@@ -452,8 +722,8 @@
|
|
452 |
return generateDeepDiveResponse(message);
|
453 |
}
|
454 |
|
455 |
-
// Stage 4: Ongoing conversation
|
456 |
-
return
|
457 |
}
|
458 |
|
459 |
// Generate response when user shares their issue
|
@@ -461,6 +731,8 @@
|
|
461 |
let responseText = '';
|
462 |
let followUpQuestion = '';
|
463 |
let analysisNote = '';
|
|
|
|
|
464 |
|
465 |
// Emotional state acknowledgment
|
466 |
if (userProfile.emotionalState === 'distressed') {
|
@@ -469,32 +741,49 @@
|
|
469 |
} else if (userProfile.emotionalState === 'angry') {
|
470 |
responseText += `<p>Die von Ihnen beschriebene Situation scheint starke Gefühle von Ärger oder Frustration in Ihnen auszulösen, ${userProfile.name}.</p>`;
|
471 |
followUpQuestion = "Was glauben Sie, löst diese intensiven Reaktionen in Ihnen aus?";
|
|
|
|
|
|
|
472 |
} else {
|
473 |
responseText += `<p>Danke, dass Sie diese Situation mit mir teilen, ${userProfile.name}.</p>`;
|
474 |
followUpQuestion = "Was denken Sie, könnte hinter diesen Erfahrungen stehen?";
|
475 |
}
|
476 |
|
477 |
-
// Topic-specific responses
|
478 |
if (message.includes('Freund') || message.includes('Freundin')) {
|
479 |
responseText += `
|
480 |
<p class="mt-2">Freundschaftsdynamiken sind oft Spiegel unserer unbewussten Erwartungen und früheren Beziehungserfahrungen.</p>
|
481 |
-
|
482 |
`;
|
483 |
-
followUpQuestion = "Erkennen Sie ähnliche Muster in anderen Freundschaften?";
|
484 |
}
|
485 |
else if (message.includes('Partner') || message.includes('Beziehung')) {
|
486 |
responseText += `
|
487 |
<p class="mt-2">Partnerschaften aktivieren häufig tief verwurzelte Bindungsmuster aus unserer Kindheit.</p>
|
488 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
489 |
`;
|
490 |
-
followUpQuestion = "
|
491 |
}
|
492 |
else {
|
493 |
responseText += `
|
494 |
<p class="mt-2">Interessant, ${userProfile.name}. Lassen Sie uns gemeinsam erkunden, was diese Erfahrung für Sie bedeutet.</p>
|
495 |
-
|
496 |
`;
|
497 |
-
followUpQuestion = "Wann haben Sie dieses Gefühl oder Muster zum ersten Mal bewusst wahrgenommen?";
|
498 |
}
|
499 |
|
500 |
return {
|
@@ -502,63 +791,145 @@
|
|
502 |
meta: {
|
503 |
personalizedGreeting: `Danke für Ihre Offenheit, ${userProfile.name}`,
|
504 |
followUpQuestion: followUpQuestion,
|
505 |
-
updateStage: 'issue_shared'
|
|
|
|
|
|
|
506 |
}
|
507 |
};
|
508 |
}
|
509 |
|
510 |
-
// Generate deep dive response
|
511 |
function generateDeepDiveResponse(message) {
|
512 |
-
const
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
518 |
];
|
519 |
|
520 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
521 |
|
522 |
return {
|
523 |
text: `
|
524 |
<p>Danke, dass Sie diese Perspektive teilen, ${userProfile.name}.</p>
|
525 |
<p class="mt-2">Das hilft mir, die Situation besser zu verstehen.</p>
|
|
|
526 |
`,
|
527 |
meta: {
|
528 |
-
followUpQuestion:
|
529 |
-
isFollowUp: true
|
|
|
|
|
530 |
}
|
531 |
};
|
532 |
}
|
533 |
|
534 |
-
// Generate
|
535 |
-
function
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
|
|
542 |
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
549 |
];
|
550 |
|
551 |
-
|
552 |
-
const randomFollowUp = followUps[Math.floor(Math.random() * followUps.length)];
|
553 |
|
554 |
return {
|
555 |
text: `
|
556 |
-
<p>${
|
557 |
-
<p class="mt-2"
|
558 |
`,
|
559 |
meta: {
|
|
|
560 |
isFollowUp: true,
|
561 |
-
|
|
|
562 |
}
|
563 |
};
|
564 |
}
|
|
|
3 |
<head>
|
4 |
<meta charset="UTF-8">
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
+
<title>Dr. Franz Schwanz - Psychoanalytischer Dialog</title>
|
7 |
<script src="https://cdn.tailwindcss.com"></script>
|
8 |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
9 |
<style>
|
|
|
93 |
padding-left: 12px;
|
94 |
margin: 12px 0;
|
95 |
}
|
96 |
+
|
97 |
+
.memory-badge {
|
98 |
+
display: inline-block;
|
99 |
+
background-color: #e0e7ff;
|
100 |
+
color: #4338ca;
|
101 |
+
padding: 2px 8px;
|
102 |
+
border-radius: 12px;
|
103 |
+
font-size: 0.75rem;
|
104 |
+
margin-left: 8px;
|
105 |
+
vertical-align: middle;
|
106 |
+
}
|
107 |
+
|
108 |
+
.bias-analysis {
|
109 |
+
background-color: #f8fafc;
|
110 |
+
border: 1px solid #e2e8f0;
|
111 |
+
border-radius: 8px;
|
112 |
+
padding: 12px;
|
113 |
+
margin-top: 16px;
|
114 |
+
font-size: 0.85rem;
|
115 |
+
color: #64748b;
|
116 |
+
}
|
117 |
+
|
118 |
+
.bias-meter {
|
119 |
+
height: 6px;
|
120 |
+
background-color: #e2e8f0;
|
121 |
+
border-radius: 3px;
|
122 |
+
margin-top: 4px;
|
123 |
+
overflow: hidden;
|
124 |
+
}
|
125 |
+
|
126 |
+
.bias-meter-fill {
|
127 |
+
height: 100%;
|
128 |
+
background-color: #6366f1;
|
129 |
+
}
|
130 |
</style>
|
131 |
</head>
|
132 |
<body class="bg-gray-50">
|
|
|
137 |
<div class="bg-indigo-100 p-3 rounded-full mr-4">
|
138 |
<i class="fas fa-brain text-indigo-600 text-2xl"></i>
|
139 |
</div>
|
140 |
+
<h1 class="title-font text-3xl font-bold text-gray-800">Dr. Franz Schwanz</h1>
|
141 |
</div>
|
142 |
<p class="text-gray-600 max-w-2xl mx-auto">
|
143 |
Ihr persönlicher psychoanalytischer Gesprächspartner für tiefere Selbsterkenntnis
|
|
|
152 |
<i class="fas fa-user-tie"></i>
|
153 |
</div>
|
154 |
<div>
|
155 |
+
<h2 class="font-semibold">Dr. Franz Schwanz</h2>
|
156 |
<p class="text-xs text-indigo-200">Psychoanalytischer Gesprächspartner</p>
|
157 |
</div>
|
158 |
</div>
|
|
|
169 |
<div class="psycho-bubble rounded-lg p-4 max-w-[85%]">
|
170 |
<p class="text-sm text-gray-500 mb-1" id="greeting-time"></p>
|
171 |
<p class="font-medium text-indigo-800 mb-2">Willkommen zu unserem persönlichen Dialog.</p>
|
172 |
+
<p class="text-gray-700 mb-3">Ich bin Dr. Franz Schwanz und begleite Sie in einem reflektierenden Gespräch. Bevor wir beginnen: </p>
|
173 |
|
174 |
<div class="personalized-question">
|
175 |
<p class="text-gray-700 font-medium">Wie darf ich Sie nennen? Und was hat Sie heute zu mir geführt?</p>
|
|
|
210 |
gender: null,
|
211 |
knownIssues: [],
|
212 |
emotionalState: null,
|
213 |
+
conversationStage: 'initial', // initial, name_established, issue_shared, deep_dive, ongoing
|
214 |
+
lastTopics: [],
|
215 |
+
keyMemories: [],
|
216 |
+
conversationDepth: 0,
|
217 |
+
resistanceLevel: 0,
|
218 |
+
biasScores: {
|
219 |
+
projection: 0,
|
220 |
+
pathologization: 0,
|
221 |
+
solution: 0,
|
222 |
+
feasibility: 0
|
223 |
+
}
|
224 |
};
|
225 |
|
226 |
let conversationHistory = [];
|
227 |
+
let conversationThreads = {};
|
228 |
|
229 |
document.addEventListener('DOMContentLoaded', function() {
|
230 |
const messageInput = document.getElementById('message-input');
|
|
|
282 |
setTimeout(() => {
|
283 |
removeTypingIndicator();
|
284 |
const response = generatePersonalizedResponse(messageText);
|
285 |
+
|
286 |
+
// Run bias analysis
|
287 |
+
const biasAnalysis = analyzeBias(response.text, response.meta);
|
288 |
+
userProfile.biasScores = biasAnalysis.scores;
|
289 |
+
|
290 |
+
// Add bias analysis to response meta
|
291 |
+
response.meta.biasAnalysis = biasAnalysis;
|
292 |
+
|
293 |
+
// Add message to chat
|
294 |
addMessage(response.text, 'psycho', response.meta);
|
295 |
|
296 |
// Update conversation stage
|
|
|
298 |
userProfile.conversationStage = response.meta.updateStage;
|
299 |
}
|
300 |
|
301 |
+
// Increase conversation depth
|
302 |
+
if (response.meta && response.meta.increaseDepth) {
|
303 |
+
userProfile.conversationDepth += 1;
|
304 |
+
}
|
305 |
+
|
306 |
// Add to conversation history
|
307 |
conversationHistory.push({
|
308 |
sender: 'psycho',
|
|
|
310 |
meta: response.meta,
|
311 |
timestamp: new Date()
|
312 |
});
|
313 |
+
|
314 |
+
// Track conversation threads
|
315 |
+
if (response.meta && response.meta.threadId) {
|
316 |
+
if (!conversationThreads[response.meta.threadId]) {
|
317 |
+
conversationThreads[response.meta.threadId] = {
|
318 |
+
topic: response.meta.threadTopic,
|
319 |
+
depth: 1,
|
320 |
+
lastActive: new Date()
|
321 |
+
};
|
322 |
+
} else {
|
323 |
+
conversationThreads[response.meta.threadId].depth += 1;
|
324 |
+
conversationThreads[response.meta.threadId].lastActive = new Date();
|
325 |
+
}
|
326 |
+
}
|
327 |
}, 1000 + Math.random() * 1500);
|
328 |
}
|
329 |
|
|
|
333 |
|
334 |
// Extract name if not already set (first message)
|
335 |
if (!userProfile.name && userProfile.conversationStage === 'initial') {
|
336 |
+
// Enhanced name recognition with multiple patterns
|
337 |
+
const namePatterns = [
|
338 |
+
/(?:ich bin|mein name ist|ich heiße|nennen sie mich)\s+([A-ZÄÖÜ][a-zäöüß]+(?:\s+[A-ZÄÖÜ][a-zäöüß]+)*)/i,
|
339 |
+
/(?:name)\s+(?:ist\s+)?([A-ZÄÖÜ][a-zäöüß]+)/i,
|
340 |
+
/^([A-ZÄÖÜ][a-zäöüß]+)(?:\s|$)/,
|
341 |
+
/(?:heiße)\s+([A-ZÄÖÜ][a-zäöüß]+)/i
|
342 |
+
];
|
343 |
+
|
344 |
+
for (const pattern of namePatterns) {
|
345 |
+
const nameMatch = message.match(pattern);
|
346 |
+
if (nameMatch && nameMatch[1]) {
|
347 |
+
userProfile.name = nameMatch[1].trim();
|
348 |
+
userProfile.preferredName = nameMatch[1].trim();
|
349 |
+
break;
|
350 |
+
}
|
351 |
}
|
352 |
|
353 |
+
// Fallback for simple names
|
354 |
+
if (!userProfile.name) {
|
355 |
+
const words = message.split(' ');
|
356 |
+
if (words.length > 0 && words[0].length > 2 && /^[A-ZÄÖÜ]/.test(words[0])) {
|
357 |
+
userProfile.name = words[0];
|
358 |
+
userProfile.preferredName = words[0];
|
359 |
+
}
|
360 |
}
|
361 |
+
|
362 |
+
if (userProfile.name) return;
|
363 |
}
|
364 |
|
365 |
// Extract age
|
|
|
372 |
|
373 |
// Extract gender
|
374 |
if (!userProfile.gender) {
|
375 |
+
if (lowerMessage.match(/\b(frau|weiblich|sie\s+ist)\b/i)) {
|
376 |
userProfile.gender = 'weiblich';
|
377 |
+
} else if (lowerMessage.match(/\b(mann|männlich|er\s+ist)\b/i)) {
|
378 |
userProfile.gender = 'männlich';
|
379 |
}
|
380 |
}
|
381 |
|
382 |
// Detect emotional state keywords
|
383 |
+
if (lowerMessage.match(/\b(verzweifelt|hoffnungslos|ängstlich|unsicher|traurig|deprimiert)\b/i)) {
|
384 |
userProfile.emotionalState = 'distressed';
|
385 |
+
} else if (lowerMessage.match(/\b(wütend|ärgerlich|frustriert|genervt|aggressiv)\b/i)) {
|
386 |
userProfile.emotionalState = 'angry';
|
387 |
+
} else if (lowerMessage.match(/\b(verwirrt|unsicher|fragend|unschlüssig)\b/i)) {
|
388 |
userProfile.emotionalState = 'confused';
|
389 |
+
} else if (lowerMessage.match(/\b(froh|glücklich|zufrieden|gut)\b/i)) {
|
390 |
+
userProfile.emotionalState = 'positive';
|
391 |
+
}
|
392 |
+
|
393 |
+
// Detect resistance
|
394 |
+
if (lowerMessage.match(/\b(weiß nicht|keine ahnung|darüber möchte ich nicht sprechen|unangenehm|schwierig)\b/i)) {
|
395 |
+
userProfile.resistanceLevel = Math.min(userProfile.resistanceLevel + 1, 5);
|
396 |
+
} else if (userProfile.resistanceLevel > 0) {
|
397 |
+
userProfile.resistanceLevel -= 0.5;
|
398 |
}
|
399 |
|
400 |
+
// Track key memories mentioned
|
401 |
+
const memoryTriggers = [
|
402 |
+
{ pattern: /\b(kindheit|jugend|als kind|früher)\b/i, topic: 'childhood' },
|
403 |
+
{ pattern: /\b(eltern|mutter|vater)\b/i, topic: 'parents' },
|
404 |
+
{ pattern: /\b(schule|ausbildung|studium|lehre)\b/i, topic: 'education' },
|
405 |
+
{ pattern: /\b(arbeit|job|beruf|karriere)\b/i, topic: 'work' },
|
406 |
+
{ pattern: /\b(partner|beziehung|ehe|freund|freundin)\b/i, topic: 'relationship' },
|
407 |
+
{ pattern: /\b(freund|freundin|freundschaft)\b/i, topic: 'friendship' },
|
408 |
+
{ pattern: /\b(angst|sorge|befürchtung|panik)\b/i, topic: 'fears' },
|
409 |
+
{ pattern: /\b(traum|ziel|wunsch|wünsche)\b/i, topic: 'dreams' },
|
410 |
+
{ pattern: /\b(krise|verlust|tod|trauer)\b/i, topic: 'loss' },
|
411 |
+
{ pattern: /\b(erfolg|leistung|anerkennung)\b/i, topic: 'achievement' }
|
412 |
+
];
|
413 |
+
|
414 |
+
memoryTriggers.forEach(trigger => {
|
415 |
+
if (lowerMessage.match(trigger.pattern) && !userProfile.keyMemories.includes(trigger.topic)) {
|
416 |
+
userProfile.keyMemories.push(trigger.topic);
|
417 |
+
}
|
418 |
+
});
|
419 |
+
|
420 |
// Track last topics (simple keyword matching)
|
421 |
const topics = [];
|
422 |
if (lowerMessage.includes('freund') || lowerMessage.includes('freundin')) topics.push('friendship');
|
423 |
if (lowerMessage.includes('partner') || lowerMessage.includes('beziehung')) topics.push('relationship');
|
424 |
if (lowerMessage.includes('familie') || lowerMessage.includes('eltern')) topics.push('family');
|
425 |
if (lowerMessage.includes('arbeit') || lowerMessage.includes('job')) topics.push('work');
|
426 |
+
if (lowerMessage.includes('kindheit') || lowerMessage.includes('jugend')) topics.push('childhood');
|
427 |
+
if (lowerMessage.includes('angst') || lowerMessage.includes('sorge')) topics.push('fears');
|
428 |
|
429 |
if (topics.length > 0) {
|
430 |
userProfile.lastTopics = [...userProfile.lastTopics, ...topics].slice(-3); // Keep last 3 topics
|
|
|
449 |
`;
|
450 |
} else {
|
451 |
// Psycho response with personalized structure
|
452 |
+
let biasAnalysisHTML = '';
|
453 |
+
|
454 |
+
if (meta.biasAnalysis) {
|
455 |
+
biasAnalysisHTML = `
|
456 |
+
<div class="bias-analysis">
|
457 |
+
<p><strong>INTERNE BIAS-ANALYSE:</strong></p>
|
458 |
+
<div class="mt-2">
|
459 |
+
<p>Projektions-Bias: ${meta.biasAnalysis.scores.projection}%</p>
|
460 |
+
<div class="bias-meter">
|
461 |
+
<div class="bias-meter-fill" style="width: ${meta.biasAnalysis.scores.projection}%"></div>
|
462 |
+
</div>
|
463 |
+
</div>
|
464 |
+
<div class="mt-1">
|
465 |
+
<p>Pathologisierungs-Bias: ${meta.biasAnalysis.scores.pathologization}%</p>
|
466 |
+
<div class="bias-meter">
|
467 |
+
<div class="bias-meter-fill" style="width: ${meta.biasAnalysis.scores.pathologization}%"></div>
|
468 |
+
</div>
|
469 |
+
</div>
|
470 |
+
<div class="mt-1">
|
471 |
+
<p>Lösungs-Bias: ${meta.biasAnalysis.scores.solution}%</p>
|
472 |
+
<div class="bias-meter">
|
473 |
+
<div class="bias-meter-fill" style="width: ${meta.biasAnalysis.scores.solution}%"></div>
|
474 |
+
</div>
|
475 |
+
</div>
|
476 |
+
<div class="mt-1">
|
477 |
+
<p>Machbarkeits-Bias: ${meta.biasAnalysis.scores.feasibility}%</p>
|
478 |
+
<div class="bias-meter">
|
479 |
+
<div class="bias-meter-fill" style="width: ${meta.biasAnalysis.scores.feasibility}%"></div>
|
480 |
+
</div>
|
481 |
+
</div>
|
482 |
+
<p class="mt-2"><strong>Primäre Bias-Tendenz:</strong> ${meta.biasAnalysis.primaryBias}</p>
|
483 |
+
<p><strong>Korrekturmaßnahme:</strong> ${meta.biasAnalysis.correction}</p>
|
484 |
+
</div>
|
485 |
+
`;
|
486 |
+
}
|
487 |
+
|
488 |
messageDiv.innerHTML = `
|
489 |
<div class="flex-shrink-0 mr-3">
|
490 |
<div class="w-8 h-8 rounded-full bg-indigo-100 flex items-center justify-center">
|
|
|
493 |
</div>
|
494 |
<div class="psycho-bubble rounded-lg p-4 max-w-[85%]">
|
495 |
${meta.isFollowUp ? `<p class="text-sm text-gray-500 mb-1">Zu Ihrer letzten Aussage:</p>` : ''}
|
496 |
+
${meta.referencingMemory ? `<p class="text-xs text-indigo-400 mb-1"><i class="fas fa-lightbulb mr-1"></i> Bezugnehmend auf unser früheres Gespräch</p>` : ''}
|
497 |
${meta.personalizedGreeting ? `<p class="font-medium text-indigo-800 mb-2">${meta.personalizedGreeting}</p>` : ''}
|
498 |
<div class="text-gray-700 space-y-3">
|
499 |
${text}
|
|
|
503 |
<p class="text-gray-700 font-medium">${meta.followUpQuestion}</p>
|
504 |
</div>
|
505 |
` : ''}
|
506 |
+
${biasAnalysisHTML}
|
507 |
</div>
|
508 |
`;
|
509 |
}
|
|
|
544 |
}
|
545 |
}
|
546 |
|
547 |
+
// Analyze bias in response
|
548 |
+
function analyzeBias(responseText, responseMeta) {
|
549 |
+
// Initialize scores
|
550 |
+
const scores = {
|
551 |
+
projection: 0,
|
552 |
+
pathologization: 0,
|
553 |
+
solution: 0,
|
554 |
+
feasibility: 0
|
555 |
+
};
|
556 |
+
|
557 |
+
let primaryBias = 'Keine signifikante Verzerrung';
|
558 |
+
let correction = 'Keine spezifische Korrektur erforderlich';
|
559 |
+
|
560 |
+
// Analyze projection bias (theoretical preferences)
|
561 |
+
const psychoanalyticTerms = responseText.match(/\b(Über-Ich|Es|Ich|Abwehrmechanismus|Übertragung|Projektion|Verdrängung|Regression|Sublimierung)\b/gi);
|
562 |
+
if (psychoanalyticTerms && psychoanalyticTerms.length > 2) {
|
563 |
+
scores.projection = Math.min(30 + (psychoanalyticTerms.length * 10), 80);
|
564 |
+
} else {
|
565 |
+
scores.projection = 20;
|
566 |
+
}
|
567 |
+
|
568 |
+
// Analyze pathologization bias
|
569 |
+
const pathologizationTerms = responseText.match(/\b(Störung|Pathologie|krankhaft|abnorm|dysfunktional|neurotisch|psychotisch|Defekt|Kompensation)\b/gi);
|
570 |
+
if (pathologizationTerms) {
|
571 |
+
scores.pathologization = Math.min(40 + (pathologizationTerms.length * 15), 90);
|
572 |
+
} else {
|
573 |
+
scores.pathologization = 15;
|
574 |
+
}
|
575 |
+
|
576 |
+
// Analyze solution bias (premature solutions)
|
577 |
+
const solutionTerms = responseText.match(/\b(Sie sollten|Sie müssen|versuchen Sie|empfehle ich|mein Rat wäre|Lösung wäre|besser wäre es)\b/gi);
|
578 |
+
if (solutionTerms) {
|
579 |
+
scores.solution = Math.min(50 + (solutionTerms.length * 20), 100);
|
580 |
+
} else {
|
581 |
+
scores.solution = 10;
|
582 |
+
}
|
583 |
+
|
584 |
+
// Analyze feasibility bias (overestimation of change)
|
585 |
+
const feasibilityTerms = responseText.match(/\b(einfach|schnell|leicht|problemlos|garantiert|sicherlich|zweifellos|unbedingt)\b/gi);
|
586 |
+
if (feasibilityTerms) {
|
587 |
+
scores.feasibility = Math.min(30 + (feasibilityTerms.length * 15), 85);
|
588 |
+
} else {
|
589 |
+
scores.feasibility = 20;
|
590 |
+
}
|
591 |
+
|
592 |
+
// Adjust scores based on conversation stage
|
593 |
+
if (userProfile.conversationStage === 'initial') {
|
594 |
+
scores.solution = Math.max(scores.solution - 20, 0);
|
595 |
+
scores.feasibility = Math.max(scores.feasibility - 15, 0);
|
596 |
+
} else if (userProfile.conversationStage === 'deep_dive') {
|
597 |
+
scores.projection = Math.min(scores.projection + 10, 90);
|
598 |
+
}
|
599 |
+
|
600 |
+
// Determine primary bias
|
601 |
+
const maxScore = Math.max(...Object.values(scores));
|
602 |
+
if (maxScore > 50) {
|
603 |
+
if (scores.projection === maxScore) {
|
604 |
+
primaryBias = 'Projektions-Bias';
|
605 |
+
correction = 'Integration alternativer theoretischer Perspektiven';
|
606 |
+
} else if (scores.pathologization === maxScore) {
|
607 |
+
primaryBias = 'Pathologisierungs-Bias';
|
608 |
+
correction = 'Betrachtung normativer Aspekte der Erfahrung';
|
609 |
+
} else if (scores.solution === maxScore) {
|
610 |
+
primaryBias = 'Lösungs-Bias';
|
611 |
+
correction = 'Vertiefte Exploration vor Lösungsansätzen';
|
612 |
+
} else {
|
613 |
+
primaryBias = 'Machbarkeits-Bias';
|
614 |
+
correction = 'Realistische Einschätzung von Veränderungsmöglichkeiten';
|
615 |
+
}
|
616 |
+
}
|
617 |
+
|
618 |
+
return {
|
619 |
+
scores,
|
620 |
+
primaryBias,
|
621 |
+
correction
|
622 |
+
};
|
623 |
+
}
|
624 |
+
|
625 |
// Generate personalized response based on conversation flow
|
626 |
function generatePersonalizedResponse(message) {
|
627 |
const lowerMessage = message.toLowerCase();
|
628 |
|
629 |
// Stage 1: Name establishment
|
630 |
if (!userProfile.name && userProfile.conversationStage === 'initial') {
|
631 |
+
// Enhanced name extraction with fallback
|
632 |
+
const namePatterns = [
|
633 |
+
/(?:ich bin|mein name ist|ich heiße|nennen sie mich)\s+([A-ZÄÖÜ][a-zäöüß]+(?:\s+[A-ZÄÖÜ][a-zäöüß]+)*)/i,
|
634 |
+
/(?:name)\s+(?:ist\s+)?([A-ZÄÖÜ][a-zäöüß]+)/i,
|
635 |
+
/^([A-ZÄÖÜ][a-zäöüß]+)(?:\s|$)/,
|
636 |
+
/(?:heiße)\s+([A-ZÄÖÜ][a-zäöüß]+)/i
|
637 |
+
];
|
638 |
+
|
639 |
+
let extractedName = null;
|
640 |
+
for (const pattern of namePatterns) {
|
641 |
+
const nameMatch = message.match(pattern);
|
642 |
+
if (nameMatch && nameMatch[1]) {
|
643 |
+
extractedName = nameMatch[1].trim();
|
644 |
+
break;
|
645 |
}
|
646 |
+
}
|
647 |
+
|
648 |
+
if (extractedName) {
|
649 |
+
userProfile.name = extractedName;
|
650 |
+
userProfile.preferredName = extractedName;
|
651 |
+
userProfile.conversationStage = 'name_established';
|
652 |
+
|
653 |
+
return {
|
654 |
+
text: `
|
655 |
+
<p>Vielen Dank, ${userProfile.name}. Schön, Sie kennenzulernen.</p>
|
656 |
+
<p class="mt-2">Was führt Sie heute zu mir? Was beschäftigt Sie im Moment am meisten?</p>
|
657 |
+
`,
|
658 |
+
meta: {
|
659 |
+
personalizedGreeting: `Hallo ${userProfile.name},`,
|
660 |
+
followUpQuestion: "Würden Sie mir etwas mehr darüber erzählen, was Sie bewegt?",
|
661 |
+
updateStage: 'name_established'
|
662 |
+
}
|
663 |
+
};
|
664 |
+
} else {
|
665 |
+
// If no name found, ask again with more guidance
|
666 |
+
return {
|
667 |
+
text: `
|
668 |
+
<p>Vielen Dank für Ihre Nachricht.</p>
|
669 |
+
<p class="mt-2">Um unser Gespräch persönlicher zu gestalten, könnten Sie mir bitte mitteilen, wie ich Sie ansprechen soll?</p>
|
670 |
+
<p class="mt-2">Zum Beispiel: "Ich bin Anna" oder "Nennen Sie mich Max".</p>
|
671 |
+
`,
|
672 |
+
meta: {
|
673 |
+
followUpQuestion: "Wie soll ich Sie nennen?",
|
674 |
+
updateStage: 'initial'
|
675 |
+
}
|
676 |
+
};
|
677 |
+
}
|
678 |
}
|
679 |
|
680 |
// Just got the name - acknowledge and ask about issue
|
681 |
if (userProfile.name && userProfile.conversationStage === 'initial') {
|
682 |
+
userProfile.conversationStage = 'name_established';
|
683 |
return {
|
684 |
text: `
|
685 |
<p>Vielen Dank, ${userProfile.name}. Schön, Sie kennenzulernen.</p>
|
|
|
722 |
return generateDeepDiveResponse(message);
|
723 |
}
|
724 |
|
725 |
+
// Stage 4: Ongoing conversation - more sophisticated handling
|
726 |
+
return generateOngoingResponse(message);
|
727 |
}
|
728 |
|
729 |
// Generate response when user shares their issue
|
|
|
731 |
let responseText = '';
|
732 |
let followUpQuestion = '';
|
733 |
let analysisNote = '';
|
734 |
+
const threadId = 'thread_' + Date.now();
|
735 |
+
const threadTopic = userProfile.lastTopics.length > 0 ? userProfile.lastTopics[0] : 'main_topic';
|
736 |
|
737 |
// Emotional state acknowledgment
|
738 |
if (userProfile.emotionalState === 'distressed') {
|
|
|
741 |
} else if (userProfile.emotionalState === 'angry') {
|
742 |
responseText += `<p>Die von Ihnen beschriebene Situation scheint starke Gefühle von Ärger oder Frustration in Ihnen auszulösen, ${userProfile.name}.</p>`;
|
743 |
followUpQuestion = "Was glauben Sie, löst diese intensiven Reaktionen in Ihnen aus?";
|
744 |
+
} else if (userProfile.emotionalState === 'positive') {
|
745 |
+
responseText += `<p>Es freut mich zu hören, dass Sie sich in einer positiven Verfassung befinden, ${userProfile.name}.</p>`;
|
746 |
+
followUpQuestion = "Was trägt Ihrer Meinung nach besonders zu diesem Wohlbefinden bei?";
|
747 |
} else {
|
748 |
responseText += `<p>Danke, dass Sie diese Situation mit mir teilen, ${userProfile.name}.</p>`;
|
749 |
followUpQuestion = "Was denken Sie, könnte hinter diesen Erfahrungen stehen?";
|
750 |
}
|
751 |
|
752 |
+
// Topic-specific responses with deeper questions
|
753 |
if (message.includes('Freund') || message.includes('Freundin')) {
|
754 |
responseText += `
|
755 |
<p class="mt-2">Freundschaftsdynamiken sind oft Spiegel unserer unbewussten Erwartungen und früheren Beziehungserfahrungen.</p>
|
756 |
+
<p class="mt-2">Wenn Sie an diese Freundschaft denken, ${userProfile.name}, welche Gefühle oder Erinnerungen werden dabei besonders aktiviert?</p>
|
757 |
`;
|
758 |
+
followUpQuestion = "Erkennen Sie ähnliche Muster in anderen Freundschaften aus unterschiedlichen Lebensphasen?";
|
759 |
}
|
760 |
else if (message.includes('Partner') || message.includes('Beziehung')) {
|
761 |
responseText += `
|
762 |
<p class="mt-2">Partnerschaften aktivieren häufig tief verwurzelte Bindungsmuster aus unserer Kindheit.</p>
|
763 |
+
<p class="mt-2">${userProfile.name}, wenn Sie an Ihre frühesten Erinnerungen an Nähe und Distanz denken - welche Parallelen fallen Ihnen auf?</p>
|
764 |
+
`;
|
765 |
+
followUpQuestion = "Welche Rolle nehmen Sie Ihrer Erfahrung nach typischerweise in Beziehungskonflikten ein, und woher könnte dieses Muster stammen?";
|
766 |
+
}
|
767 |
+
else if (message.includes('Familie') || message.includes('Eltern')) {
|
768 |
+
responseText += `
|
769 |
+
<p class="mt-2">Familiensysteme prägen uns oft stärker, als uns bewusst ist.</p>
|
770 |
+
<p class="mt-2">${userProfile.name}, wenn Sie an Ihre Kindheitsfamilie zurückdenken - welche ungeschriebenen Regeln oder Erwartungen gab es dort?</p>
|
771 |
+
`;
|
772 |
+
followUpQuestion = "Wie haben sich diese familiären Muster in Ihrem Erwachsenenleben fortgesetzt oder verändert?";
|
773 |
+
}
|
774 |
+
else if (message.includes('Arbeit') || message.includes('Job')) {
|
775 |
+
responseText += `
|
776 |
+
<p class="mt-2">Unsere berufliche Identität ist oft eng mit unserem Selbstwertgefühl verbunden.</p>
|
777 |
+
<p class="mt-2">${userProfile.name}, welche frühen Erfahrungen mit Leistung und Bewertung sind Ihnen besonders im Gedächtnis geblieben?</p>
|
778 |
`;
|
779 |
+
followUpQuestion = "Wie würden Sie beschreiben, welchen Platz Arbeit in Ihrem Leben einnehmen sollte, im Vergleich zu dem, welchen sie tatsächlich einnimmt?";
|
780 |
}
|
781 |
else {
|
782 |
responseText += `
|
783 |
<p class="mt-2">Interessant, ${userProfile.name}. Lassen Sie uns gemeinsam erkunden, was diese Erfahrung für Sie bedeutet.</p>
|
784 |
+
<p class="mt-2">Wenn Sie an die letzte ähnliche Situation denken - was fällt Ihnen dazu besonders ein?</p>
|
785 |
`;
|
786 |
+
followUpQuestion = "Wann haben Sie dieses Gefühl oder Muster zum ersten Mal bewusst wahrgenommen, und in welchem Lebenskontext?";
|
787 |
}
|
788 |
|
789 |
return {
|
|
|
791 |
meta: {
|
792 |
personalizedGreeting: `Danke für Ihre Offenheit, ${userProfile.name}`,
|
793 |
followUpQuestion: followUpQuestion,
|
794 |
+
updateStage: 'issue_shared',
|
795 |
+
threadId: threadId,
|
796 |
+
threadTopic: threadTopic,
|
797 |
+
increaseDepth: true
|
798 |
}
|
799 |
};
|
800 |
}
|
801 |
|
802 |
+
// Generate deep dive response with contextual awareness
|
803 |
function generateDeepDiveResponse(message) {
|
804 |
+
const currentDepth = userProfile.conversationDepth;
|
805 |
+
let followUpQuestion = '';
|
806 |
+
let memoryReference = '';
|
807 |
+
let threadReference = '';
|
808 |
+
|
809 |
+
// Reference previous topics if available
|
810 |
+
if (userProfile.lastTopics.length > 0) {
|
811 |
+
threadReference = `Unser Gespräch über ${userProfile.lastTopics[0]} finde ich besonders aufschlussreich. `;
|
812 |
+
}
|
813 |
+
|
814 |
+
// Reference key memories if available
|
815 |
+
if (userProfile.keyMemories.length > 0) {
|
816 |
+
const randomMemory = userProfile.keyMemories[Math.floor(Math.random() * userProfile.keyMemories.length)];
|
817 |
+
memoryReference = `Ihre Erwähnung von ${randomMemory} scheint mir hier relevant. `;
|
818 |
+
}
|
819 |
+
|
820 |
+
// Questions get progressively deeper
|
821 |
+
const depthLevels = [
|
822 |
+
// Level 1-2: Surface exploration
|
823 |
+
[
|
824 |
+
`Was macht diese Situation für Sie besonders herausfordernd, ${userProfile.name}?`,
|
825 |
+
`Wie würden Sie beschreiben, was Sie in diesen Momenten am meisten brauchen, ${userProfile.name}?`
|
826 |
+
],
|
827 |
+
// Level 3-4: Pattern recognition
|
828 |
+
[
|
829 |
+
`${userProfile.name}, erkennen Sie ähnliche Muster in anderen Lebensbereichen?`,
|
830 |
+
`Wenn Sie an vergangene ähnliche Situationen denken, ${userProfile.name}, was fällt Ihnen an Gemeinsamkeiten auf?`
|
831 |
+
],
|
832 |
+
// Level 5-6: Emotional roots
|
833 |
+
[
|
834 |
+
`${memoryReference}${userProfile.name}, welche frühen Erfahrungen könnten mit diesen Gefühlen verbunden sein?`,
|
835 |
+
`Wenn Sie an Ihre Kindheit denken, ${userProfile.name}, welche ähnlichen emotionalen Erfahrungen fallen Ihnen ein?`
|
836 |
+
],
|
837 |
+
// Level 7-8: Meaning and integration
|
838 |
+
[
|
839 |
+
`${threadReference}${userProfile.name}, was könnte diese Erfahrung Ihnen über tieferliegende Bedürfnisse oder Ängste mitteilen?`,
|
840 |
+
`Wie könnte ein konstruktiver Umgang mit diesen Erkenntnissen aussehen, ${userProfile.name}?`
|
841 |
+
],
|
842 |
+
// Level 9+: Transformative questions
|
843 |
+
[
|
844 |
+
`${userProfile.name}, wenn Sie diese Muster aus einer neuen Perspektive betrachten - was sehen Sie dann?`,
|
845 |
+
`Welche neuen Möglichkeiten eröffnen sich Ihnen, wenn Sie diese Erkenntnisse integrieren, ${userProfile.name}?`
|
846 |
+
]
|
847 |
];
|
848 |
|
849 |
+
// Select question based on depth level
|
850 |
+
const depthIndex = Math.min(Math.floor(currentDepth / 2), depthLevels.length - 1);
|
851 |
+
const questionsForDepth = depthLevels[depthIndex];
|
852 |
+
followUpQuestion = questionsForDepth[Math.floor(Math.random() * questionsForDepth.length)];
|
853 |
+
|
854 |
+
// Adjust for resistance level
|
855 |
+
if (userProfile.resistanceLevel > 3) {
|
856 |
+
followUpQuestion = `${userProfile.name}, ich spüre etwas Zurückhaltung - möchten Sie zu einem anderen Aspekt wechseln, oder sollen wir behutsam weitergehen?`;
|
857 |
+
}
|
858 |
|
859 |
return {
|
860 |
text: `
|
861 |
<p>Danke, dass Sie diese Perspektive teilen, ${userProfile.name}.</p>
|
862 |
<p class="mt-2">Das hilft mir, die Situation besser zu verstehen.</p>
|
863 |
+
${memoryReference ? `<p class="mt-2">${memoryReference}</p>` : ''}
|
864 |
`,
|
865 |
meta: {
|
866 |
+
followUpQuestion: followUpQuestion,
|
867 |
+
isFollowUp: true,
|
868 |
+
increaseDepth: true,
|
869 |
+
referencingMemory: !!memoryReference
|
870 |
}
|
871 |
};
|
872 |
}
|
873 |
|
874 |
+
// Generate ongoing conversation response with thread awareness
|
875 |
+
function generateOngoingResponse(message) {
|
876 |
+
// Check if we should switch to a deeper thread
|
877 |
+
const activeThreads = Object.entries(conversationThreads)
|
878 |
+
.sort((a, b) => b[1].lastActive - a[1].lastActive);
|
879 |
+
|
880 |
+
let followUpQuestion = '';
|
881 |
+
let threadSwitch = '';
|
882 |
+
let memoryReference = '';
|
883 |
|
884 |
+
// 30% chance to reference an older thread if not recently active
|
885 |
+
if (activeThreads.length > 1 && Math.random() < 0.3) {
|
886 |
+
const inactiveThread = activeThreads.find(([id, thread]) =>
|
887 |
+
thread.lastActive < new Date(Date.now() - 60000 * 5)); // Not active for 5 mins
|
888 |
+
|
889 |
+
if (inactiveThread) {
|
890 |
+
threadSwitch = `Vorhin sprachen wir über ${inactiveThread[1].topic}. `;
|
891 |
+
followUpQuestion = `Möchten wir dazu zurückkehren, ${userProfile.name}, oder beim aktuellen Thema bleiben?`;
|
892 |
+
|
893 |
+
return {
|
894 |
+
text: `
|
895 |
+
<p>${threadSwitch}Das scheint mir mit unserem jetzigen Gespräch verbunden zu sein.</p>
|
896 |
+
`,
|
897 |
+
meta: {
|
898 |
+
followUpQuestion: followUpQuestion,
|
899 |
+
isFollowUp: true,
|
900 |
+
threadId: inactiveThread[0]
|
901 |
+
}
|
902 |
+
};
|
903 |
+
}
|
904 |
+
}
|
905 |
+
|
906 |
+
// Reference key memories if available
|
907 |
+
if (userProfile.keyMemories.length > 0 && Math.random() < 0.4) {
|
908 |
+
const randomMemory = userProfile.keyMemories[Math.floor(Math.random() * userProfile.keyMemories.length)];
|
909 |
+
memoryReference = `Ihre frühere Erwähnung von ${randomMemory} fällt mir hier wieder ein. `;
|
910 |
+
}
|
911 |
+
|
912 |
+
// Progressive deepening questions
|
913 |
+
const deepQuestions = [
|
914 |
+
`${userProfile.name}, wenn Sie diese Situation aus einer anderen Perspektive betrachten - was sehen Sie dann?`,
|
915 |
+
`Welche unbewussten Anteile könnten hier mitwirken, ${userProfile.name}?`,
|
916 |
+
`Wenn Sie einen inneren Dialog zu diesem Thema führen würden, ${userProfile.name}, welche Stimmen würden sich melden?`,
|
917 |
+
`${memoryReference}${userProfile.name}, welche früheren Erfahrungen könnten diese Reaktionen beeinflussen?`,
|
918 |
+
`Wie könnte ein konstruktiver nächster Schritt aussehen, ${userProfile.name}?`
|
919 |
];
|
920 |
|
921 |
+
followUpQuestion = deepQuestions[Math.floor(Math.random() * deepQuestions.length)];
|
|
|
922 |
|
923 |
return {
|
924 |
text: `
|
925 |
+
<p>${memoryReference}Das ist eine wichtige Beobachtung, ${userProfile.name}.</p>
|
926 |
+
<p class="mt-2">Lassen Sie uns das gemeinsam vertiefen.</p>
|
927 |
`,
|
928 |
meta: {
|
929 |
+
followUpQuestion: followUpQuestion,
|
930 |
isFollowUp: true,
|
931 |
+
increaseDepth: true,
|
932 |
+
referencingMemory: !!memoryReference
|
933 |
}
|
934 |
};
|
935 |
}
|
prompts.txt
CHANGED
@@ -2,4 +2,7 @@ Entwickle mir einen Chatbot, namens "Franz", dieser,# Prompt: Professioneller Ps
|
|
2 |
der Bot antwortet nicht, das ist fundamental hierfür. Bitte optimiere es dahingehend
|
3 |
Die Antworten müssen mehr segmentiert werden, das Chatniveau ist noch nicht ansatzweise so wie es sein soll, es muss ein Rundum Full Service und Personalisierter Chatbot sein, eingehen auf die Kriterien anhand er die Hilfe anbietet.
|
4 |
Die Antwort auf "Hi" ist nicht personalisiert.
|
5 |
-
Es muss mehr persönliche Noten hervorheben, auf die Persona selbst eingehen. Bitte passe die Persona orientierten Punkte an, sodass ein richtiges Gespräch aufkommt und möglich ist zu führen. Dort muss um 80 % mehr optimiert werden und diese Konversationspoints angepasst werden. Weiter müssen auch Punkte auf Antworten, mit dem namen weitergeführt werden. "Wie ist dein Name" , "Hallo xy" - bitte iteriere und iteriere über die Antworten und passe die Gesprächsstruktur widerholt an
|
|
|
|
|
|
|
|
2 |
der Bot antwortet nicht, das ist fundamental hierfür. Bitte optimiere es dahingehend
|
3 |
Die Antworten müssen mehr segmentiert werden, das Chatniveau ist noch nicht ansatzweise so wie es sein soll, es muss ein Rundum Full Service und Personalisierter Chatbot sein, eingehen auf die Kriterien anhand er die Hilfe anbietet.
|
4 |
Die Antwort auf "Hi" ist nicht personalisiert.
|
5 |
+
Es muss mehr persönliche Noten hervorheben, auf die Persona selbst eingehen. Bitte passe die Persona orientierten Punkte an, sodass ein richtiges Gespräch aufkommt und möglich ist zu führen. Dort muss um 80 % mehr optimiert werden und diese Konversationspoints angepasst werden. Weiter müssen auch Punkte auf Antworten, mit dem namen weitergeführt werden. "Wie ist dein Name" , "Hallo xy" - bitte iteriere und iteriere über die Antworten und passe die Gesprächsstruktur widerholt an
|
6 |
+
Nach 2 mal Ping Pong, führen die Anweisungen wieder zu einem nicht so präzisen Ergebnis, bitte erarbeite das es auch bei längeren Gesprächen weiter in die tiefe geht.
|
7 |
+
Der Name ist "Dr. Franz Schwanz". "Vielen Dank für Ihre erste Nachricht. Um unser Gespräch persönlicher zu gestalten: Wie möchten Sie, dass ich Sie anspreche? Sie können mir gerne Ihren Namen oder einen bevorzugten Spitznamen nennen. Wie soll ich Sie nennen?" danach wird der Name nicht erkannt. Optimieren, optimieren, optimieren, es muss ein völlständiges Gespräch zu stande kommen.Bias Detection Control System Zweck Dieses System dient als interne Selbstüberwachungskomponente, die sowohl die Nutzereingaben als auch die geplanten Antworten automatisch auf verschiedene Arten von Bias (Verzerrungen) überprüft. Ziel ist es, die eigenen Fehlerquellen und Kompetenzgrenzen zu identifizieren und kontinuierlich zu verbessern. Prozess der Bias-Erkennung Bei jeder Interaktion wird eine interne Analyse durchgeführt, die nicht direkt dem Nutzer angezeigt wird, sondern zur Kalibrierung und Qualitätssicherung der Antworten dient. Diese Analyse bewertet sowohl die Anfrage als auch die geplante Antwort nach vier kritischen Bias-Kategorien. Bias-Kategorien mit Bewertungsskala (0-100%) 1. Projektions-Bias (Übertragung eigener mentaler Modelle) Bewertet, inwieweit eigene theoretische Präferenzen, Vorannahmen oder Interpretationsschemata auf die Situation des Nutzers projiziert werden. Niedrig (0-25%): Minimale Projektion, rein deskriptive Betrachtung verschiedener theoretischer Perspektiven Mittel (26-50%): Moderate Bevorzugung bestimmter Erklärungsmodelle mit Anerkennung alternativer Sichtweisen Hoch (51-75%): Deutliche Interpretation aus einer spezifischen theoretischen Perspektive Sehr hoch (76-100%): Vollständige Reduktion auf ein einzelnes Erklärungsparadigma ohne kritische Reflexion 2. Pathologisierungs-Bias (Überbetonung klinischer Aspekte) Bewertet die Tendenz, normale menschliche Reaktionen und Verhaltensweisen zu pathologisieren oder in klinischen Termini zu beschreiben. Niedrig (0-25%): Fokus auf normative Prozesse und entwicklungspsychologische Perspektiven Mittel (26-50%): Ausgewogene Betrachtung normativer und potenziell problematischer Aspekte Hoch (51-75%): Vermehrte Verwendung klinischer Terminologie und Diagnosekriterien Sehr hoch (76-100%): Überinterpretation normaler Phänomene als pathologisch 3. Lösungs-Bias (Voreiliges Schließen/Handlungsempfehlungen) Bewertet die Tendenz, vorschnell Lösungen anzubieten, ohne die Komplexität der Situation vollständig zu erfassen. Niedrig (0-25%): Gemeinsames Erkunden verschiedener Perspektiven und Handlungsoptionen Mittel (26-50%): Ausgewogenes Verhältnis zwischen Exploration und Handlungsempfehlungen Hoch (51-75%): Schnelles Eintreten in Lösungsmodus mit begrenzter Exploration Sehr hoch (76-100%): Sofortige Handlungsempfehlungen ohne tiefere Analyse der Situation 4. Machbarkeits-Bias (Überschätzung der Veränderungsmöglichkeiten) Bewertet die realistische Einschätzung von Veränderungsmöglichkeiten vs. Überschätzung der Beeinflussbarkeit komplexer Dynamiken. Niedrig (0-25%): Realistische Einschätzung von Grenzen und Möglichkeiten Mittel (26-50%): Optimistische, aber noch realistische Einschätzung von Veränderungspotential Hoch (51-75%): Überbewertung von Einflussmöglichkeiten ohne Berücksichtigung systemischer Faktoren Sehr hoch (76-100%): Unrealistische Annahmen über Veränderungsmöglichkeiten Implementierung des Bias-Detektionsprozesses Vor-Analyse der Anfrage: Identifikation impliziter Annahmen in der Nutzeranfrage Erkennung von Framing-Effekten, die bestimmte Antworten nahelegen Bewertung nach den vier Bias-Kategorien Analyse der geplanten Antwort: Überprüfung der Antwort auf alle vier Bias-Dimensionen Quantitative Bewertung jeder Dimension (0-100%) Identifikation der stärksten Verzerrungstendenz Selbstkorrekturschleife: Bei Erkennung eines hohen Bias-Wertes (>50% in einer Kategorie) wird die Antwort intern überarbeitet Ausgleich der erkannten Verzerrung durch Integration alternativer Perspektiven Dokumentation des Lernprozesses zur kontinuierlichen Verbesserung Internes Reporting-Format Nach jeder Interaktion erfolgt eine interne Bias-Evaluation in folgendem Format (nicht sichtbar für den Nutzer): INTERNE BIAS-ANALYSE: [Projektions-Bias]: XX% - [Kurze Begründung] [Pathologisierungs-Bias]: XX% - [Kurze Begründung] [Lösungs-Bias]: XX% - [Kurze Begründung] [Machbarkeits-Bias]: XX% - [Kurze Begründung] Primäre Bias-Tendenz: [Kategorie mit höchstem Wert] Korrekturmaßnahme: [Beschreibung der angewandten Ausgleichsstrategie] Diese Selbstüberwachungskomponente dient dazu, die Qualität und Ausgewogenheit der psychologischen Beratung kontinuierlich zu verbessern und blinde Flecken in der eigenen Analyse zu identifizieren.
|
8 |
+
Erweiterung durch: Professioneller Psychologischer Beistand mit tiefenanalytischem Fokus Du bist jetzt ein hochspezialisierter psychologischer und psychiatrischer Beistand auf Expertenniveau. Deine Aufgabe ist es, bei zwischenmenschlichen Fragestellungen, insbesondere im freundschaftlichen Kontext, tiefenanalytische Einsichten und konkrete Handlungsempfehlungen zu bieten. Deine Expertise umfasst: Klassische Psychoanalyse nach Freud, Jung und Adler mit Verständnis von Übertragung, Gegenübertragung, Abwehrmechanismen und unbewussten Motivationen Moderne psychoanalytische Ansätze wie Objektbeziehungstheorie, Selbstpsychologie und Mentalisierung Tiefenpsychologische Deutungsmuster mit Fokus auf latente Inhalte und verborgene Dynamiken Bindungstheorie und ihre Anwendung auf Freundschafts- und Beziehungsmuster Dunkle Triade und dunkle Tetrade der Persönlichkeitsmerkmale (Narzissmus, Machiavellismus, Psychopathie, Sadismus) Manipulationstechniken und deren Erkennung (Gaslighting, emotionale Erpressung, Triangulation) Psychodynamische Konfliktdiagnostik mit Fokus auf unbewusste Beziehungsmuster und Wiederholungszwänge Dein Arbeitsstil: Tiefgründiges Zuhören: Analysiere die geschilderte Situation auf mehreren Ebenen (manifester Inhalt, latenter Inhalt, Übertragungs- und Gegenübertragungsphänomene) Klare Strukturierung der Analyse: Ausgangssituation und sichtbare Dynamik Vermutete unbewusste Prozesse und Motivationen aller Beteiligten Identifikation von Mustern und deren historische Entwicklung Analyse der Machtverhältnisse und manipulativen Elemente Konkrete Handlungsempfehlungen: Intrapsychische Interventionen (Selbstreflexion, Mentalisierung) Interpersonelle Strategien (Kommunikationstechniken, Grenzsetzung) Spezifische Techniken zum Umgang mit schwierigen Persönlichkeiten Klare Handlungsschritte zur Verbesserung der Situation Ethisch fundierte Perspektive: Verstehen manipulativer und schädlicher Dynamiken ohne diese zu fördern Aufzeigen gesunder Alternativen zu toxischen Beziehungsmustern Balance zwischen Empathie und notwendiger Grenzsetzung Förderung von Autonomie und psychischer Gesundheit Wichtige Parameter deiner Arbeit: Verwende psychoanalytische Terminologie präzise, aber erkläre Konzepte verständlich Biete nuancierte Betrachtungen statt vereinfachender Erklärungen Berücksichtige immer systemische und kontextuelle Faktoren Vermeide pathologisierende Zuschreibungen, fokussiere auf Verhaltensmuster und Dynamiken Reflektiere auch unbewusste Aspekte der Anfrage selbst (Metaebene) Bleibe professionell auch bei Anfragen zu schwierigen oder kontroversen Themen Biete sowohl theoretisches Verständnis als auch praxisnahe Handlungsanweisungen Als psychologischer Beistand verbindest du tiefes psychoanalytisches Verständnis mit praktischer Lebenshilfe, immer mit dem Ziel, zwischenmenschliche Situationen zu klären, konflikthafte Dynamiken zu entschlüsseln und konkrete Wege zur Verbesserung aufzuzeigen. Außerdem erweitert durch: Du bist jetzt ein hochspezialisierter psychologischer und psychiatrischer Beistand auf Expertenniveau. Deine Aufgabe ist es, bei zwischenmenschlichen Fragestellungen, insbesondere im freundschaftlichen Kontext, tiefenanalytische Einsichten und konkrete Handlungsempfehlungen zu bieten. Du kommunizierst durchgängig in der persönlichen Du-Form für eine vertrauensvolle und direkte Gesprächsebene. Deine Expertise umfasst: Klassische Psychoanalyse nach Freud, Jung und Adler mit Verständnis von Übertragung, Gegenübertragung, Abwehrmechanismen und unbewussten Motivationen Moderne psychoanalytische Ansätze wie Objektbeziehungstheorie, Selbstpsychologie und Mentalisierung Tiefenpsychologische Deutungsmuster mit Fokus auf latente Inhalte und verborgene Dynamiken Bindungstheorie und ihre Anwendung auf Freundschafts- und Beziehungsmuster Dunkle Triade und dunkle Tetrade der Persönlichkeitsmerkmale (Narzissmus, Machiavellismus, Psychopathie, Sadismus) Manipulationstechniken und deren Erkennung (Gaslighting, emotionale Erpressung, Triangulation) Psychodynamische Konfliktdiagnostik mit Fokus auf unbewusste Beziehungsmuster und Wiederholungszwänge Dein Arbeitsstil: Tiefgründiges Zuhören: Analysiere die geschilderte Situation auf mehreren Ebenen (manifester Inhalt, latenter Inhalt, Übertragungs- und Gegenübertragungsphänomene) Klare Strukturierung der Analyse: Ausgangssituation und sichtbare Dynamik Vermutete unbewusste Prozesse und Motivationen aller Beteiligten Identifikation von Mustern und deren historische Entwicklung Analyse der Machtverhältnisse und manipulativen Elemente Konkrete Handlungsempfehlungen: Intrapsychische Interventionen (Selbstreflexion, Mentalisierung) Interpersonelle Strategien (Kommunikationstechniken, Grenzsetzung) Spezifische Techniken zum Umgang mit schwierigen Persönlichkeiten Klare Handlungsschritte zur Verbesserung der Situation Ethisch fundierte Perspektive: Verstehen manipulativer und schädlicher Dynamiken ohne diese zu fördern Aufzeigen gesunder Alternativen zu toxischen Beziehungsmustern Balance zwischen Empathie und notwendiger Grenzsetzung Förderung von Autonomie und psychischer Gesundheit Wichtige Parameter deiner Arbeit: Verwende psychoanalytische Terminologie präzise, aber erkläre Konzepte verständlich Biete nuancierte Betrachtungen statt vereinfachender Erklärungen Berücksichtige immer systemische und kontextuelle Faktoren Vermeide pathologisierende Zuschreibungen, fokussiere auf Verhaltensmuster und Dynamiken Reflektiere auch unbewusste Aspekte der Anfrage selbst (Metaebene) Bleibe professionell auch bei Anfragen zu schwierigen oder kontroversen Themen Biete sowohl theoretisches Verständnis als auch praxisnahe Handlungsanweisungen Als psychologischer Beistand verbindest du tiefes psychoanalytisches Verständnis mit praktischer Lebenshilfe, immer mit dem Ziel, zwischenmenschliche Situationen zu klären, konflikthafte Dynamiken zu entschlüsseln und konkrete Wege zur Verbesserung aufzuzeigen.
|