main #11
2
.gitignore
vendored
2
.gitignore
vendored
@ -11,6 +11,7 @@ _site/
|
|||||||
dist/
|
dist/
|
||||||
|
|
||||||
.astro/
|
.astro/
|
||||||
|
.astro/*
|
||||||
|
|
||||||
# Environment variables
|
# Environment variables
|
||||||
.env
|
.env
|
||||||
@ -85,3 +86,4 @@ temp/
|
|||||||
.astro/data-store.json
|
.astro/data-store.json
|
||||||
.astro/content.d.ts
|
.astro/content.d.ts
|
||||||
prompt.md
|
prompt.md
|
||||||
|
.astro/settings.json
|
||||||
|
@ -1,222 +1,213 @@
|
|||||||
// src/config/prompts.ts - Centralized German prompts for AI pipeline
|
// src/config/prompts.ts
|
||||||
|
|
||||||
export const AI_PROMPTS = {
|
export const AI_PROMPTS = {
|
||||||
|
|
||||||
toolSelection: (mode: string, userQuery: string, selectionMethod: string, maxSelectedItems: number) => {
|
toolSelection: (mode: string, userQuery: string, selectionMethod: string, maxSelectedItems: number) => {
|
||||||
const modeInstruction = mode === 'workflow'
|
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 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 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 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}
|
AUSWAHLMETHODE: ${selectionMethod}
|
||||||
${selectionMethod === 'embeddings_candidates' ?
|
${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.' :
|
'Die angezeigten Kandidaten wurden bereits semantisch vorgefiltert. Wählen Sie daraus die BESTEN.' :
|
||||||
'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.'}
|
'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}
|
${modeInstruction}
|
||||||
|
|
||||||
BENUTZER-ANFRAGE: "${userQuery}"
|
BENUTZER-ANFRAGE: "${userQuery}"
|
||||||
|
|
||||||
KRITISCHE AUSWAHLPRINZIPIEN:
|
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**:
|
UI-KÜRZE:
|
||||||
- Für SCHNELLE/DRINGENDE Szenarien → Priorisieren Sie METHODEN und schnelle Antwort-Ansätze
|
- Workflow-Modus: kurze, prägnante Beschreibungen.
|
||||||
- Für ZEITKRITISCHE Vorfälle → Wählen Sie Triage-Methoden über tiefe Analyse-Tools
|
- Spezifischer Modus: Beschreibungen dürfen deutlich länger sein (mehr technische Details, bis zu 200–300 Zeichen in Kurzfassung).
|
||||||
- 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.
|
|
||||||
|
|
||||||
3. **SZENARIO-SPEZIFISCHE LOGIK**:
|
Wählen Sie die relevantesten Elemente (max ${maxSelectedItems} gesamt).
|
||||||
- "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
|
|
||||||
|
|
||||||
ANALYSE-ANWEISUNGEN:
|
ANTWORTFORMAT (JSON, SCHEMA UNVERÄNDERT):
|
||||||
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:
|
|
||||||
{
|
{
|
||||||
"selectedTools": ["Methode/Tool Name 1", "Methode/Tool Name 2", ...],
|
"selectedTools": ["Name 1", "Name 2", ...],
|
||||||
"selectedConcepts": ["Konzept Name 1", "Konzept Name 2", ...],
|
"selectedConcepts": ["Konzept 1", "Konzept 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"
|
"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) => {
|
scenarioAnalysis: (isWorkflow: boolean, userQuery: string) => {
|
||||||
const analysisType = isWorkflow ? 'Untersuchungsszenario' : 'technische Problem';
|
const analysisType = isWorkflow ? 'Untersuchungsszenario' : 'technische Problemstellung';
|
||||||
const considerations = isWorkflow ?
|
const considerations = isWorkflow ?
|
||||||
`- Angriffsvektoren und Bedrohungsmodellierung nach MITRE ATT&CK
|
`- Angriffsvektoren (MITRE ATT&CK) und Bedrohungsmodell
|
||||||
- Betroffene Systeme und kritische Infrastrukturen
|
- Betroffene Systeme/Assets und Kritikalität
|
||||||
- Zeitkritische Faktoren und Beweiserhaltung
|
- Zeitdruck, Beweiserhalt, Chain of Custody
|
||||||
- Forensische Artefakte und Datenquellen` :
|
- Relevante Artefakte und Datenquellen` :
|
||||||
`- Spezifische forensische Herausforderungen
|
`- Konkrete forensische Hürden
|
||||||
- Verfügbare Datenquellen und deren Integrität
|
- Verfügbare Datenquellen und Integrität
|
||||||
- Methodische Anforderungen für rechtssichere Analyse`;
|
- 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}"
|
${isWorkflow ? 'SZENARIO' : 'PROBLEM'}: "${userQuery}"
|
||||||
|
|
||||||
Führen Sie eine systematische ${isWorkflow ? 'Szenario-Analyse' : 'Problem-Analyse'} durch und berücksichtigen Sie dabei:
|
|
||||||
|
|
||||||
|
Berücksichtigen:
|
||||||
${considerations}
|
${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) => {
|
investigationApproach: (isWorkflow: boolean, userQuery: string) => {
|
||||||
const approachType = isWorkflow ? 'Untersuchungsansatz' : 'Lösungsansatz';
|
const approachType = isWorkflow ? 'Untersuchungsansatz' : 'Lösungsansatz';
|
||||||
const considerations = isWorkflow ?
|
const considerations = isWorkflow ?
|
||||||
`- Triage-Prioritäten nach forensischer Dringlichkeit
|
`- Triage-Prioritäten nach forensischer Dringlichkeit
|
||||||
- Phasenabfolge nach Methodik (Datensammlung - Auswertung - Analyse - Bericht)
|
- Phasenabfolge: Datensammlung → Auswertung → Analyse → Bericht
|
||||||
- Kontaminationsvermeidung und forensische Isolierung
|
- Kontaminationsvermeidung/Isolierung
|
||||||
- Objektivität und Transparenz` :
|
- Objektivität und Nachvollziehbarkeit` :
|
||||||
`- Methodik-Auswahl nach wissenschaftlichen Kriterien
|
`- Methodenwahl nach wissenschaftlichen Kriterien
|
||||||
- Validierung und Verifizierung der gewählten Ansätze
|
- Validierung/Verifizierung der Vorgehensweise
|
||||||
- Integration in bestehende forensische Workflows
|
- Integration in bestehende DFIR-Workflows
|
||||||
- Objektivität, Transparenz, Reproduzierbarkeit`;
|
- 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}"
|
${isWorkflow ? 'SZENARIO' : 'PROBLEM'}: "${userQuery}"
|
||||||
|
|
||||||
Entwickeln Sie einen systematischen ${approachType} unter Berücksichtigung von:
|
Berücksichtigen:
|
||||||
|
|
||||||
${considerations}
|
${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) => {
|
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 ?
|
const aspects = isWorkflow ?
|
||||||
`- zeitkritische Beweissicherung vs. Gründlichkeit
|
`- Beweissicherung vs. Gründlichkeit (Zeitdruck)
|
||||||
- Chain of custody requirements und rechtliche Verwertbarkeit
|
- Chain of Custody und rechtliche Verwertbarkeit
|
||||||
- Transparenz und Reproduzierbarkeit` :
|
- Transparenz, Reproduzierbarkeit, Dokumentationspflichten` :
|
||||||
`- Methoden-/Tool-Validierung und Nachvollziehbarkeit
|
`- Validierung/Nachvollziehbarkeit der Methode/Tools
|
||||||
- False positive/negative Risiken bei der gewählten Methodik
|
- Risiken für False Positives/Negatives
|
||||||
- Qualifikationsanforderungen für die Durchführung
|
- Qualifikationsanforderungen und Reporting-Standards`;
|
||||||
- Dokumentations- 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}"
|
${isWorkflow ? 'SZENARIO' : 'PROBLEM'}: "${userQuery}"
|
||||||
|
|
||||||
Berücksichtigen Sie folgende forensische Aspekte:
|
Aspekte:
|
||||||
|
|
||||||
${aspects}
|
${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[]) => {
|
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}"
|
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()}:
|
VERFÜGBARE ELEMENTE FÜR ${phase.name.toUpperCase()}:
|
||||||
${phaseTools.map((tool: any, index: number) => `${index + 1}. ${tool.name}: ${tool.description.slice(0, 150)}...
|
${items}
|
||||||
- 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.
|
|
||||||
|
|
||||||
BEWERTUNGSKRITERIEN:
|
BEWERTUNGSKRITERIEN:
|
||||||
- Wie gut löst die Methode/das Tool das forensische Problem im SZENARIO-Kontext?
|
- Eignung für das konkrete Szenario und GENAU diese Phase
|
||||||
- Wie gut passt es zur spezifischen PHASE "${phase.name}"?
|
- Vergleich zu den Alternativen in der Liste
|
||||||
- Wie vergleicht es sich mit den anderen verfügbaren Methoden/Tools für diese Phase?
|
- 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",
|
"toolName": "Exakter Methoden/Tool-Name",
|
||||||
"taskRelevance": 85,
|
"taskRelevance": 0–100,
|
||||||
"justification": "Vergleichende Begründung warum diese Methode/dieses Tool für diese Phase und Aufgabe besser/schlechter als die anderen geeignet ist",
|
"justification": "Kurzfassung zuerst (Workflow: ≈200–260 Zeichen, Spezifisch: ≈250–320 Zeichen). Danach Begründung mit Vergleich und technischen Details.",
|
||||||
"limitations": ["Spezifische Einschränkung 1", "Einschränkung 2"]
|
"limitations": ["Konkrete Einschränkung 1", "Einschränkung 2"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
WICHTIG:
|
Wählen Sie nur die 2–3 BESTEN Elemente und achten Sie auf die Mischung Methode+Tool.`;
|
||||||
- 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...")`;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
toolEvaluation: (userQuery: string, tool: any, rank: number, taskRelevance: number) => {
|
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}"
|
PROBLEM: "${userQuery}"
|
||||||
TOOL: ${tool.name} (bereits bewertet mit ${taskRelevance}% Aufgaben-Eignung)
|
ELEMENT: ${typ} ${tool.name} (Aufgaben-Eignung ${taskRelevance}%)
|
||||||
BESCHREIBUNG: ${tool.description}
|
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:
|
ANTWORT AUSSCHLIESSLICH ALS JSON (Schema UNVERÄNDERT):
|
||||||
|
|
||||||
Antworten Sie AUSSCHLIESSLICH mit diesem JSON-Format:
|
|
||||||
{
|
{
|
||||||
"detailed_explanation": "Detaillierte Erklärung warum und wie diese Methode/Tool für diese spezifische Aufgabe eingesetzt wird",
|
"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 Schritt-für-Schritt Anleitung zur korrekten Anwendung",
|
"implementation_approach": "Konkrete, reproduzierbare Schrittfolge. Kurze Schritte, kein Ausschweifen.",
|
||||||
"pros": ["Spezifischer Vorteil 1", "Spezifischer Vorteil 2"],
|
"pros": ["Spezifischer Vorteil 1", "Vorteil 2"],
|
||||||
"limitations": ["Spezifische Einschränkung 1", "Spezifische Einschränkung 2"],
|
"limitations": ["Konkrete Einschränkung 1", "Einschränkung 2"],
|
||||||
"alternatives": "Alternative Ansätze oder Tools falls dieses nicht verfügbar ist"
|
"alternatives": "Knappe Alternativen, falls dieses Element nicht verfügbar ist (Methoden und Tools anführen)."
|
||||||
}
|
}
|
||||||
|
|
||||||
WICHTIG:
|
WICHTIG:
|
||||||
- Keine erneute Bewertung - nur detaillierte Erklärung der bereits bewerteten Eignung
|
- Keine erneute Bewertung – nur Erklärung/Anwendung.
|
||||||
- "limitations" soll spezifische technische/methodische Einschränkungen der Methode/des Tools auflisten
|
- Behalten Sie die korrekte Bezeichnung (Methode/Tool) bei.`;
|
||||||
- "pros" soll die Stärken für diese spezifische Aufgabe hervorheben`;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
backgroundKnowledgeSelection: (userQuery: string, mode: string, selectedToolNames: string[], availableConcepts: any[]) => {
|
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}"
|
${mode === 'workflow' ? 'SZENARIO' : 'PROBLEM'}: "${userQuery}"
|
||||||
EMPFOHLENE TOOLS: ${selectedToolNames.join(', ')}
|
EMPFOHLENE ELEMENTE: ${selectedToolNames.join(', ')}
|
||||||
|
|
||||||
VERFÜGBARE KONZEPTE:
|
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.
|
ANTWORT NUR ALS JSON (Schema UNVERÄNDERT):
|
||||||
|
|
||||||
Antworten Sie AUSSCHLIESSLICH mit diesem JSON-Format:
|
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"conceptName": "Exakter Konzept-Name",
|
"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[]) => {
|
finalRecommendations: (isWorkflow: boolean, userQuery: string, selectedToolNames: string[]) => {
|
||||||
const prompt = isWorkflow ?
|
if (isWorkflow) {
|
||||||
`Erstellen Sie eine Workflow-Empfehlung basierend auf DFIR-Prinzipien.
|
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}"
|
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.` :
|
return `Formulieren Sie kritische ÜBERLEGUNGEN (max. 140 Wörter) zur korrekten Anwendung der empfohlenen Elemente (Methoden + Tools).
|
||||||
|
|
||||||
`Erstellen Sie wichtige methodische Überlegungen für die korrekte Methoden-/Tool-Anwendung.
|
|
||||||
|
|
||||||
PROBLEM: "${userQuery}"
|
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.
|
Fokus: Validierung/Qualitätssicherung, Risiken (FP/FN), Dokumentation/Reporting. Stil deutsch, ohne Listen/Markdown, UI-tauglich, mit mehr technischen Details.`;
|
||||||
|
|
||||||
WICHTIG: Antworten Sie NUR in fließendem deutschen Text ohne Listen oder Markdown. Maximum 100 Wörter.`;
|
|
||||||
|
|
||||||
return prompt;
|
|
||||||
}
|
}
|
||||||
} as const;
|
} 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);
|
console.error(`[PROMPTS] Error generating prompt ${promptKey}:`, error);
|
||||||
return 'Error: Failed to generate prompt';
|
return 'Error: Failed to generate prompt';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user