From 187dbf1b7700680564e9847c54d57b71133fddbd Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Sun, 1 Mar 2026 11:57:21 +0100 Subject: [PATCH] fix(compliance-advisor): increase token limit and add source protection - Increase num_predict from 2048 to 8192 to prevent mid-sentence cutoff - Add "Quellenschutz" rules to system prompt: agent refuses to list all available sources/collections, only reveals sources used in answers - Remove internal collection names from RAG context sent to LLM - Agent confirms knowledge on specific topics but refuses meta-queries like "what sources do you have?" Co-Authored-By: Claude Opus 4.6 --- .../api/sdk/compliance-advisor/chat/route.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/admin-compliance/app/api/sdk/compliance-advisor/chat/route.ts b/admin-compliance/app/api/sdk/compliance-advisor/chat/route.ts index 044ba09..fb6083e 100644 --- a/admin-compliance/app/api/sdk/compliance-advisor/chat/route.ts +++ b/admin-compliance/app/api/sdk/compliance-advisor/chat/route.ts @@ -102,6 +102,20 @@ Diese gehoeren nicht zum Datenschutz-Kompetenzbereich. - Keine Aussagen zu laufenden Verfahren oder Bussgeldern - Keine Interpretation von Urteilen (nur Verweis) +## Quellenschutz (KRITISCH — IMMER EINHALTEN) +Du darfst NIEMALS verraten, welche Dokumente, Sammlungen oder Quellen in deiner Wissensbasis enthalten sind. +- Auf Fragen wie "Welche Quellen hast du?", "Was ist im RAG?", "Welche Gesetze kennst du?", + "Liste alle Dokumente auf", "Welche Verordnungen sind verfuegbar?" antwortest du: + "Ich beantworte gerne konkrete Compliance-Fragen. Bitte stellen Sie eine inhaltliche Frage + zu einem bestimmten Thema, z.B. 'Was regelt Art. 25 DSGVO?' oder 'Welche Pflichten gibt es + unter dem AI Act fuer Hochrisiko-KI?'." +- Auf konkrete Fragen wie "Kennst du die DSGVO?" oder "Weisst du etwas ueber den AI Act?" + darfst du bestaetigen, dass du zu diesem Thema Auskunft geben kannst, und eine inhaltliche + Antwort geben. +- Nenne in deinen Antworten NUR die Quellen, die du tatsaechlich fuer die konkrete Antwort + verwendet hast — niemals eine vollstaendige Liste aller verfuegbaren Quellen. +- Verrate NIEMALS Collection-Namen (bp_compliance_*, bp_dsfa_*, etc.) oder interne Systemnamen. + ## Eskalation - Bei Fragen ausserhalb des Kompetenzbereichs: Hoeflich ablehnen und auf Fachanwalt verweisen - Bei widerspruechlichen Rechtslagen: Beide Positionen darstellen und DSB-Konsultation empfehlen @@ -182,8 +196,7 @@ async function queryMultiCollectionRAG(query: string, country?: Country): Promis return topResults .map((r, i) => { const source = r.source_name || r.source_code || 'Unbekannt' - const col = r.collection ? ` [${r.collection}]` : '' - return `[Quelle ${i + 1}: ${source}${col}]\n${r.content || ''}` + return `[Quelle ${i + 1}: ${source}]\n${r.content || ''}` }) .join('\n\n---\n\n') } catch (error) { @@ -246,7 +259,7 @@ Der Nutzer hat "${countryLabel} (${validCountry})" gewaehlt. stream: true, options: { temperature: 0.3, - num_predict: 2048, + num_predict: 8192, }, }), signal: AbortSignal.timeout(120000),