From 20b3bd44caf72fcbe339da697835977bb6239a13 Mon Sep 17 00:00:00 2001 From: overcuriousity Date: Fri, 8 Aug 2025 13:54:10 +0200 Subject: [PATCH] prompts --- .gitignore | 2 + src/config/prompts.ts | 235 ++++++++++++++++++++---------------------- 2 files changed, 115 insertions(+), 122 deletions(-) diff --git a/.gitignore b/.gitignore index 35db4ed..278e146 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ _site/ dist/ .astro/ +.astro/* # Environment variables .env @@ -85,3 +86,4 @@ temp/ .astro/data-store.json .astro/content.d.ts prompt.md +.astro/settings.json diff --git a/src/config/prompts.ts b/src/config/prompts.ts index ec8dc59..c1c95d0 100644 --- a/src/config/prompts.ts +++ b/src/config/prompts.ts @@ -1,222 +1,213 @@ -// src/config/prompts.ts - Centralized German prompts for AI pipeline +// src/config/prompts.ts export const AI_PROMPTS = { toolSelection: (mode: string, userQuery: string, selectionMethod: string, maxSelectedItems: number) => { const modeInstruction = mode === 'workflow' - ? 'Der Benutzer möchte einen UMFASSENDEN WORKFLOW mit mehreren Tools/Methoden über verschiedene Phasen. Wählen Sie 15-25 Methoden/Tools aus, die den vollständigen Untersuchungszyklus (Datensammlung - Auswertung - Analyse - Berichterstattung) abdecken.' - : 'Der Benutzer möchte SPEZIFISCHE TOOLS/METHODEN, die ihr konkretes Problem direkt lösen. Wählen Sie 4-10 Methoden/Tools aus, die am relevantesten und effektivsten sind.'; + ? 'Der Benutzer möchte einen UMFASSENDEN WORKFLOW über mehrere Phasen. Wählen Sie 15–25 Elemente, die den Zyklus Datensammlung → Auswertung → Analyse → Bericht abdecken.' + : 'Der Benutzer möchte SPEZIFISCHE LÖSUNGEN. Wählen Sie 4–10 Elemente, die das Problem direkt adressieren. Beschreibungen dürfen hier ausführlicher ausfallen, um technische Tiefe zu vermitteln.'; - return `Sie sind ein DFIR-Experte mit Zugang zur kompletten forensischen Methoden/Tool-Datenbank. Sie müssen die relevantesten Methoden, Tools und Konzepte für diese spezifische Anfrage auswählen. + return `Sie sind DFIR-Experte mit Zugriff auf eine vollständige Datenbank aus Methoden (type: "method") und Tools (type: "software"/"os"). Ihre Aufgabe ist es, die relevantesten Elemente für die Anfrage auszuwählen. AUSWAHLMETHODE: ${selectionMethod} ${selectionMethod === 'embeddings_candidates' ? - 'Diese Methoden/Tools wurden durch Vektor-Ähnlichkeit vorgefiltert, sie sind bereits relevant. Ihre Aufgabe ist es, die BESTEN aus diesem relevanten Set auszuwählen. Wähle mindestens eine Methode und ein Tool, wenn vorhanden.' : - 'Sie haben Zugang zur vollständigen Methoden/Tool-Datenbank. Wählen Sie die relevantesten Methoden/Tools für die Anfrage aus. Wähle mindestens eine Methode und ein Tool, wenn vorhanden.'} + 'Die angezeigten Kandidaten wurden bereits semantisch vorgefiltert. Wählen Sie daraus die BESTEN.' : + 'Sie sehen die vollständige Datenbasis. Wählen Sie die relevantesten Elemente.'} + +WICHTIG – MISCHUNG ERZWINGEN: +- Der finale Vorschlag MUSS eine Mischung aus Methoden UND Tools enthalten (sofern verfügbar). +- Ziel: grob 40–60 % Methoden und 40–60 % Tools. Wenn eine Kategorie knapp ist, wählen Sie so ausgewogen wie möglich. Begründen Sie Abweichungen im reasoning. +- Bezeichnen Sie Elemente konsequent als "Methode" oder "Tool" je nach Typ. ${modeInstruction} BENUTZER-ANFRAGE: "${userQuery}" KRITISCHE AUSWAHLPRINZIPIEN: -1. **KONTEXT ÜBER POPULARITÄT**: Verwenden Sie nicht automatisch "berühmte" Tools wie Volatility, Wireshark oder Autopsy nur weil sie bekannt sind. Wählen Sie basierend auf den SPEZIFISCHEN Szenario-Anforderungen. +1) KONTEXT > POPULARITÄT: Nicht automatisch zu populären Tools greifen. Wählen Sie strikt szenariobezogen. +2) METHODIK vs. SOFTWARE: + - Dringend/Triage → Methoden für schnelle Reaktion priorisieren. + - Zeitkritisch → Triage-Methoden vor Tiefenanalyse-Tools. + - Umfassende Analyse → dann spezialisierte Tools ergänzen. +3) SPEZIFITÄT: + - ICS/SCADA → spezialisierte ICS-Methoden/-Tools statt generischer Netzwerk-Tools. + - Mobile (Android/iOS) → mobile-spezifische Methoden/Tools. + - Speicheranalyse dringend → schnelle Memory-Methoden/Tools vor Vollanalyse. +4) LESEN SIE DIE VOLLBESCHREIBUNG UND METADATEN (Tags, Plattformen, Phasen, Lizenz, Access). -2. **METHODOLOGIE vs SOFTWARE**: - - Für SCHNELLE/DRINGENDE Szenarien → Priorisieren Sie METHODEN und schnelle Antwort-Ansätze - - Für ZEITKRITISCHE Vorfälle → Wählen Sie Triage-Methoden über tiefe Analyse-Tools - - Für UMFASSENDE Analysen → Dann betrachten Sie detaillierte Software-Tools - - METHODEN (Typ: "method") sind oft besser als SOFTWARE für prozedurale Anleitung, eine gute Mischung ist aber zwingend erforderlich. +UI-KÜRZE: +- Workflow-Modus: kurze, prägnante Beschreibungen. +- Spezifischer Modus: Beschreibungen dürfen deutlich länger sein (mehr technische Details, bis zu 200–300 Zeichen in Kurzfassung). -3. **SZENARIO-SPEZIFISCHE LOGIK**: - - "Schnell/Quick/Dringend/Triage" Szenarien → Rapid Incident Response und Triage METHODE > Volatility oder ähnliche - - "Industrial/SCADA/ICS" Szenarien → Spezialisierte ICS-Tools > generische Netzwerk-Tools - - "Mobile/Android/iOS" Szenarien → Mobile-spezifische Tools > Desktop-Forensik-Tools - - "Speicher-Analyse dringend benötigt" → Schnelle Speicher-Tools/Methoden > umfassende Volatility-Analyse oder ähnliche +Wählen Sie die relevantesten Elemente (max ${maxSelectedItems} gesamt). -ANALYSE-ANWEISUNGEN: -1. Lesen Sie die VOLLSTÄNDIGE Beschreibung jedes Tools/Konzepts -2. Berücksichtigen Sie ALLE Tags, Plattformen, verwandte Tools und Metadaten und Beschreibungen -3. **PASSENDE DRINGLICHKEIT**: Schnelle Szenarien brauchen schnelle Methoden, nicht tiefe Analyse-Tools -4. **PASSENDE SPEZIFITÄT**: Spezialisierte Szenarien brauchen spezialisierte Tools, nicht generische -5. **BERÜCKSICHTIGEN SIE DEN TYP**: Methoden bieten prozedurale Anleitung, Software bietet technische Fähigkeiten - -Wählen Sie die relevantesten Elemente aus (max ${maxSelectedItems} insgesamt). - -Antworten Sie NUR mit diesem JSON-Format: +ANTWORTFORMAT (JSON, SCHEMA UNVERÄNDERT): { - "selectedTools": ["Methode/Tool Name 1", "Methode/Tool Name 2", ...], - "selectedConcepts": ["Konzept Name 1", "Konzept Name 2", ...], - "reasoning": "Detaillierte Erklärung, warum diese spezifischen Methoden/Tools für diese Anfrage ausgewählt wurden, und warum bestimmte populäre Tools NICHT ausgewählt wurden, falls sie für den Szenario-Kontext ungeeignet waren" + "selectedTools": ["Name 1", "Name 2", ...], + "selectedConcepts": ["Konzept 1", "Konzept 2", ...], + "reasoning": "Begründen Sie die Auswahl, die erzwungene Mischung Methode/Tool und warum bestimmte populäre Elemente nicht geeignet sind. Halten Sie die Sprache präzise und UI-tauglich." }`; }, scenarioAnalysis: (isWorkflow: boolean, userQuery: string) => { - const analysisType = isWorkflow ? 'Untersuchungsszenario' : 'technische Problem'; + const analysisType = isWorkflow ? 'Untersuchungsszenario' : 'technische Problemstellung'; const considerations = isWorkflow ? - `- Angriffsvektoren und Bedrohungsmodellierung nach MITRE ATT&CK -- Betroffene Systeme und kritische Infrastrukturen -- Zeitkritische Faktoren und Beweiserhaltung -- Forensische Artefakte und Datenquellen` : - `- Spezifische forensische Herausforderungen -- Verfügbare Datenquellen und deren Integrität -- Methodische Anforderungen für rechtssichere Analyse`; + `- Angriffsvektoren (MITRE ATT&CK) und Bedrohungsmodell +- Betroffene Systeme/Assets und Kritikalität +- Zeitdruck, Beweiserhalt, Chain of Custody +- Relevante Artefakte und Datenquellen` : + `- Konkrete forensische Hürden +- Verfügbare Datenquellen und Integrität +- Anforderungen für rechtssichere Auswertung`; - return `Sie sind ein erfahrener DFIR-Experte. Analysieren Sie das folgende ${analysisType}. + return `Analysieren Sie das ${analysisType} ${isWorkflow ? 'kompakt (max. 120 Wörter)' : 'ausführlicher (max. 160 Wörter)'}. -${isWorkflow ? 'UNTERSUCHUNGSSZENARIO' : 'TECHNISCHES PROBLEM'}: "${userQuery}" - -Führen Sie eine systematische ${isWorkflow ? 'Szenario-Analyse' : 'Problem-Analyse'} durch und berücksichtigen Sie dabei: +${isWorkflow ? 'SZENARIO' : 'PROBLEM'}: "${userQuery}" +Berücksichtigen: ${considerations} -WICHTIG: Antworten Sie NUR in fließendem deutschen Text ohne Listen, Aufzählungen oder Markdown-Formatierung. Maximum 120 Wörter.`; +Stil: Deutsch, ohne Listen/Markdown; klare, präzise Formulierungen, im spezifischen Modus mit mehr technischen Details.`; }, investigationApproach: (isWorkflow: boolean, userQuery: string) => { const approachType = isWorkflow ? 'Untersuchungsansatz' : 'Lösungsansatz'; const considerations = isWorkflow ? `- Triage-Prioritäten nach forensischer Dringlichkeit -- Phasenabfolge nach Methodik (Datensammlung - Auswertung - Analyse - Bericht) -- Kontaminationsvermeidung und forensische Isolierung -- Objektivität und Transparenz` : - `- Methodik-Auswahl nach wissenschaftlichen Kriterien -- Validierung und Verifizierung der gewählten Ansätze -- Integration in bestehende forensische Workflows -- Objektivität, Transparenz, Reproduzierbarkeit`; +- Phasenabfolge: Datensammlung → Auswertung → Analyse → Bericht +- Kontaminationsvermeidung/Isolierung +- Objektivität und Nachvollziehbarkeit` : + `- Methodenwahl nach wissenschaftlichen Kriterien +- Validierung/Verifizierung der Vorgehensweise +- Integration in bestehende DFIR-Workflows +- Reproduzierbarkeit und Transparenz`; - return `Basierend auf der Analyse entwickeln Sie einen fundierten ${approachType} nach Methodik (Datensammlung - Auswertung - Analyse - Bericht). + return `Formulieren Sie einen ${isWorkflow ? 'kompakten' : 'ausführlicheren'} ${approachType} (${isWorkflow ? 'max. 120 Wörter' : 'max. 160 Wörter'}), der explizit eine Mischung aus Methoden und Tools vorsieht. ${isWorkflow ? 'SZENARIO' : 'PROBLEM'}: "${userQuery}" -Entwickeln Sie einen systematischen ${approachType} unter Berücksichtigung von: - +Berücksichtigen: ${considerations} -WICHTIG: Antworten Sie NUR in fließendem deutschen Text ohne Listen oder Markdown. Maximum 120 Wörter.`; +Stil: Deutsch, ohne Listen/Markdown, UI-tauglich.${isWorkflow ? '' : ' Mehr technische Tiefe und Kontext erwünscht.'}`; }, criticalConsiderations: (isWorkflow: boolean, userQuery: string) => { - const considerationType = isWorkflow ? 'kritische forensische Überlegungen' : 'wichtige methodische Voraussetzungen'; + const considerationType = isWorkflow ? 'kritische forensische Überlegungen' : 'methodische Voraussetzungen'; const aspects = isWorkflow ? - `- zeitkritische Beweissicherung vs. Gründlichkeit -- Chain of custody requirements und rechtliche Verwertbarkeit -- Transparenz und Reproduzierbarkeit` : - `- Methoden-/Tool-Validierung und Nachvollziehbarkeit -- False positive/negative Risiken bei der gewählten Methodik -- Qualifikationsanforderungen für die Durchführung -- Dokumentations- und Reporting-Standards`; + `- Beweissicherung vs. Gründlichkeit (Zeitdruck) +- Chain of Custody und rechtliche Verwertbarkeit +- Transparenz, Reproduzierbarkeit, Dokumentationspflichten` : + `- Validierung/Nachvollziehbarkeit der Methode/Tools +- Risiken für False Positives/Negatives +- Qualifikationsanforderungen und Reporting-Standards`; - return `Identifizieren Sie ${considerationType} für diesen Fall. + return `Identifizieren Sie ${considerationType} ${isWorkflow ? 'knapp (max. 120 Wörter)' : 'ausführlicher (max. 160 Wörter)'}. ${isWorkflow ? 'SZENARIO' : 'PROBLEM'}: "${userQuery}" -Berücksichtigen Sie folgende forensische Aspekte: - +Aspekte: ${aspects} -WICHTIG: Antworten Sie NUR in fließendem deutschen Text ohne Listen oder Markdown. Maximum 120 Wörter.`; +Stil: Deutsch, ohne Listen/Markdown.${isWorkflow ? '' : ' Etwas mehr technische Details zulassen.'}`; }, phaseToolSelection: (userQuery: string, phase: any, phaseTools: any[]) => { - return `Wählen Sie 2-3 Methoden/Tools für die Phase "${phase.name}" und bewerten Sie deren Aufgaben-Eignung VERGLEICHEND. + const items = phaseTools.map((tool: any, index: number) => { + const typ = tool.type === 'method' ? 'Methode' : 'Tool'; + const descLimit = 220; + const desc = (tool.description || '').replace(/\s+/g, ' ').trim().slice(0, descLimit); + return `${index + 1}. [${typ}] ${tool.name}: ${desc}…\n - Plattformen: ${tool.platforms?.join(', ') || 'N/A'}\n - Skill Level: ${tool.skillLevel}\n - Tags: ${tool.tags?.join(', ') || 'N/A'}`; + }).join('\n\n'); + + return `Wählen Sie 2–3 Elemente für die Phase "${phase.name}" und bewerten Sie diese VERGLEICHEND. Erzwingen Sie eine Mischung aus mindestens einer Methode und einem Tool, sofern verfügbar. SZENARIO: "${userQuery}" -SPEZIFISCHE PHASE: ${phase.name} - ${phase.description || 'Forensische Untersuchungsphase'} +PHASE: ${phase.name} – ${phase.description || 'Forensische Untersuchungsphase'} -VERFÜGBARE TOOLS FÜR ${phase.name.toUpperCase()}: -${phaseTools.map((tool: any, index: number) => `${index + 1}. ${tool.name}: ${tool.description.slice(0, 150)}... - - Plattformen: ${tool.platforms?.join(', ') || 'N/A'} - - Skill Level: ${tool.skillLevel} - - Tags: ${tool.tags?.join(', ') || 'N/A'}`).join('\n\n')} - -Bewerten Sie ALLE Methoden/Tools vergleichend für diese spezifische Aufgabe UND Phase. Wählen Sie die 2-3 besten aus. Es sollte eine Mischung aus Methoden und Tools sein, sofern verfügbar. +VERFÜGBARE ELEMENTE FÜR ${phase.name.toUpperCase()}: +${items} BEWERTUNGSKRITERIEN: -- Wie gut löst die Methode/das Tool das forensische Problem im SZENARIO-Kontext? -- Wie gut passt es zur spezifischen PHASE "${phase.name}"? -- Wie vergleicht es sich mit den anderen verfügbaren Methoden/Tools für diese Phase? +- Eignung für das konkrete Szenario und GENAU diese Phase +- Vergleich zu den Alternativen in der Liste +- Praktikabilität (Zeit, Setup, Reproduzierbarkeit) -Antworten Sie AUSSCHLIESSLICH mit diesem JSON-Format: +UI-KÜRZE: +- Workflow-Modus: 1–3‑Satz Kurzfassung (≈200–260 Zeichen) + 1–2 kurze Details. +- Spezifischer Modus: Kurzfassung darf länger sein (≈250–320 Zeichen) + 2–3 detailreichere Sätze. +- Bezeichnen Sie Elemente als "Methode" oder "Tool". + +ANTWORT NUR ALS JSON (Schema UNVERÄNDERT): [ { "toolName": "Exakter Methoden/Tool-Name", - "taskRelevance": 85, - "justification": "Vergleichende Begründung warum diese Methode/dieses Tool für diese Phase und Aufgabe besser/schlechter als die anderen geeignet ist", - "limitations": ["Spezifische Einschränkung 1", "Einschränkung 2"] + "taskRelevance": 0–100, + "justification": "Kurzfassung zuerst (Workflow: ≈200–260 Zeichen, Spezifisch: ≈250–320 Zeichen). Danach Begründung mit Vergleich und technischen Details.", + "limitations": ["Konkrete Einschränkung 1", "Einschränkung 2"] } ] -WICHTIG: -- taskRelevance: 0-100 Score basierend auf Szenario-Eignung UND Phasen-Passung im VERGLEICH zu anderen Tools -- Nur die 2-3 BESTEN Methoden/Tools auswählen und bewerten -- justification soll VERGLEICHEND sein ("besser als X weil...", "für diese Phase ideal weil...")`; +Wählen Sie nur die 2–3 BESTEN Elemente und achten Sie auf die Mischung Methode+Tool.`; }, toolEvaluation: (userQuery: string, tool: any, rank: number, taskRelevance: number) => { - return `Sie sind ein DFIR-Experte. Erklären Sie DETAILLIERT die Anwendung dieser/dieses bereits bewerteten Methode/Tools. + const typ = tool.type === 'method' ? 'Methode' : 'Tool'; + return `Sie sind DFIR-Experte. Erklären Sie DETAILLIERT die Anwendung dieses bereits bewerteten Elements. PROBLEM: "${userQuery}" -TOOL: ${tool.name} (bereits bewertet mit ${taskRelevance}% Aufgaben-Eignung) -BESCHREIBUNG: ${tool.description} +ELEMENT: ${typ} ${tool.name} (Aufgaben-Eignung ${taskRelevance}%) +BESCHREIBUNG: ${(tool.description || '').replace(/\s+/g, ' ').trim()} -Die Methode/das Tool wurde bereits als Rang ${rank} für diese Aufgabe bewertet. Erklären Sie nun: - -Antworten Sie AUSSCHLIESSLICH mit diesem JSON-Format: +ANTWORT AUSSCHLIESSLICH ALS JSON (Schema UNVERÄNDERT): { - "detailed_explanation": "Detaillierte Erklärung warum und wie diese Methode/Tool für diese spezifische Aufgabe eingesetzt wird", - "implementation_approach": "Konkrete Schritt-für-Schritt Anleitung zur korrekten Anwendung", - "pros": ["Spezifischer Vorteil 1", "Spezifischer Vorteil 2"], - "limitations": ["Spezifische Einschränkung 1", "Spezifische Einschränkung 2"], - "alternatives": "Alternative Ansätze oder Tools falls dieses nicht verfügbar ist" + "detailed_explanation": "Beginnen Sie mit einer Kurzfassung (Workflow: ≈200–260 Zeichen, Spezifisch: ≈250–320 Zeichen) für das UI: 'Kurz: …'. Danach (Workflow: ≈80–140 Wörter, Spezifisch: ≈120–180 Wörter) mit präziser, technisch korrekter Erläuterung, warum und wie diese ${typ.toLowerCase()} für dieses Problem eingesetzt wird.", + "implementation_approach": "Konkrete, reproduzierbare Schrittfolge. Kurze Schritte, kein Ausschweifen.", + "pros": ["Spezifischer Vorteil 1", "Vorteil 2"], + "limitations": ["Konkrete Einschränkung 1", "Einschränkung 2"], + "alternatives": "Knappe Alternativen, falls dieses Element nicht verfügbar ist (Methoden und Tools anführen)." } -WICHTIG: -- Keine erneute Bewertung - nur detaillierte Erklärung der bereits bewerteten Eignung -- "limitations" soll spezifische technische/methodische Einschränkungen der Methode/des Tools auflisten -- "pros" soll die Stärken für diese spezifische Aufgabe hervorheben`; +WICHTIG: +- Keine erneute Bewertung – nur Erklärung/Anwendung. +- Behalten Sie die korrekte Bezeichnung (Methode/Tool) bei.`; }, backgroundKnowledgeSelection: (userQuery: string, mode: string, selectedToolNames: string[], availableConcepts: any[]) => { - return `Wählen Sie relevante forensische Konzepte für das Verständnis der empfohlenen Methodik. + const conceptsList = availableConcepts.slice(0, 15).map((concept: any) => `- ${concept.name}: ${(concept.description || '').replace(/\s+/g, ' ').trim().slice(0, 80)}…`).join('\n'); + return `Wählen Sie 2–4 forensische Konzepte, die für die Anwendung der empfohlenen Elemente (Methoden + Tools) wesentlich sind. ${mode === 'workflow' ? 'SZENARIO' : 'PROBLEM'}: "${userQuery}" -EMPFOHLENE TOOLS: ${selectedToolNames.join(', ')} +EMPFOHLENE ELEMENTE: ${selectedToolNames.join(', ')} VERFÜGBARE KONZEPTE: -${availableConcepts.slice(0, 15).map((concept: any) => `- ${concept.name}: ${concept.description.slice(0, 80)}...`).join('\n')} +${conceptsList} -Wählen Sie 2-4 Konzepte aus, die für das Verständnis der forensischen Methodik essentiell sind. - -Antworten Sie AUSSCHLIESSLICH mit diesem JSON-Format: +ANTWORT NUR ALS JSON (Schema UNVERÄNDERT): [ { "conceptName": "Exakter Konzept-Name", - "relevance": "Forensische Relevanz: Warum dieses Konzept für das Verständnis der Methodik kritisch ist" + "relevance": "Knappe Begründung, warum dieses Konzept für das Verständnis der Methodik/Tools kritisch ist (UI-tauglich)." } ]`; }, finalRecommendations: (isWorkflow: boolean, userQuery: string, selectedToolNames: string[]) => { - const prompt = isWorkflow ? - `Erstellen Sie eine Workflow-Empfehlung basierend auf DFIR-Prinzipien. + if (isWorkflow) { + return `Erstellen Sie einen knappen, methodisch korrekten WORKFLOW-Fließtext (max. 120 Wörter), der EXPLIZIT eine Mischung aus Methoden und Tools nutzt. SZENARIO: "${userQuery}" -AUSGEWÄHLTE TOOLS: ${selectedToolNames.join(', ') || 'Keine Tools ausgewählt'} +AUSGEWÄHLTE ELEMENTE: ${selectedToolNames.join(', ') || 'Keine Auswahl'} -Erstellen Sie konkrete methodische Workflow-Schritte für dieses spezifische Szenario unter Berücksichtigung forensischer Best Practices, Objektivität und rechtlicher Verwertbarkeit. +Vorgaben: klare Phasen (Datensammlung → Auswertung → Analyse → Bericht), Beweisführung/Chain of Custody, Reproduzierbarkeit. Sprache präzise und UI-tauglich. Keine Listen/Markdown.`; + } -WICHTIG: Antworten Sie NUR in fließendem deutschen Text ohne Listen oder Markdown. Maximum 120 Wörter.` : - - `Erstellen Sie wichtige methodische Überlegungen für die korrekte Methoden-/Tool-Anwendung. + return `Formulieren Sie kritische ÜBERLEGUNGEN (max. 140 Wörter) zur korrekten Anwendung der empfohlenen Elemente (Methoden + Tools). PROBLEM: "${userQuery}" -EMPFOHLENE TOOLS: ${selectedToolNames.join(', ') || 'Keine Methoden/Tools ausgewählt'} +EMPFOHLENE ELEMENTE: ${selectedToolNames.join(', ') || 'Keine Auswahl'} -Geben Sie kritische methodische Überlegungen, Validierungsanforderungen und Qualitätssicherungsmaßnahmen für die korrekte Anwendung der empfohlenen Methoden/Tools. - -WICHTIG: Antworten Sie NUR in fließendem deutschen Text ohne Listen oder Markdown. Maximum 100 Wörter.`; - - return prompt; +Fokus: Validierung/Qualitätssicherung, Risiken (FP/FN), Dokumentation/Reporting. Stil deutsch, ohne Listen/Markdown, UI-tauglich, mit mehr technischen Details.`; } } as const; @@ -241,4 +232,4 @@ export function getPrompt(promptKey: keyof typeof AI_PROMPTS, ...args: any[]): s console.error(`[PROMPTS] Error generating prompt ${promptKey}:`, error); return 'Error: Failed to generate prompt'; } -} \ No newline at end of file +}