In this article
Was ist RAG und wie lässt es sich schützen?
Die Integration großer Sprachmodelle (LLMs) in Ihre Anwendung ist heute einfacher denn je. Mit wenigen API-Aufrufen bei OpenAI, Anthropic oder Cohere können Sie Ihrem Stack sofort KI-Funktionen hinzufügen. Frameworks und Bibliotheken, die die Komplexität abstrahieren, machen es noch einfacher, einen eigenen LLM-gestützten Assistenten zu erstellen. Wenn Sie jedoch bereits LLM-Funktionen in einer produktiven Umgebung bereitgestellt haben, kennen Sie das Problem: Diese leistungsstarken Modelle erfinden überzeugend Fakten, beziehen sich auf veraltete Informationen oder liefern Antworten, die Ihren Kontext nicht berücksichtigen.
Genau deshalb ist RAG (Retrieval-Augmented Generation) zum Rückgrat ernst zu nehmender KI-Implementierungen geworden. Dieses Muster schließt die Lücke zwischen einer „coolen KI-Demo“ und einem „produktionsreifen KI-System“. Indem Sie Ihren Kontext mit generativer KI kombinieren, bringen Sie dem Modell bei, vor der Antwort die bereitgestellten Quellen zu prüfen.
Warum RAG verwenden?
Retrieval-Augmented Generation (RAG) ist eine Technik, mit der sich die Fähigkeiten großer Sprachmodelle (LLMs) erweitern lassen, indem sie Zugriff auf Ihre eigenen vertraulichen Informationen erhalten. Statt sich ausschließlich auf die Trainingsdaten des Modells zu verlassen, die veraltet oder zu allgemein sein können, können Sie mit RAG eigene Inhalte wie Dokumente, Notizen, Berichte oder Datenbankeinträge einbringen und als Kontext für präzisere und relevantere Antworten nutzen.
Das ist besonders nützlich, wenn das Modell Fragen beantworten oder Aufgaben auf Grundlage Ihrer internen Daten erledigen soll, ohne dass Sie ein neues Modell trainieren oder vertrauliche Inhalte externen Tools zugänglich machen müssen.
Vielleicht fragen Sie sich, warum Sie diese Informationen nicht einfach direkt in den Prompt einfügen. In einfachen Fällen ist das zwar möglich, skaliert aber nicht gut. Sprachmodelle können nur eine begrenzte Textmenge auf einmal verarbeiten, und die manuelle Auswahl der einzubeziehenden Inhalte wird schnell ineffizient. Wenn ein LLM außerdem mit zu vielen irrelevanten Daten versorgt wird, kann es zu Halluzinationen kommen – einem Phänomen, bei dem das Modell überzeugend klingende, aber falsche Informationen generiert.
Hier spielt RAG seine Stärken aus: Es ruft automatisch für jede Anfrage genau die passenden Informationen ab und liefert bessere Ergebnisse, ohne das Modell zu überlasten oder manuellen Aufwand zu erfordern. Kurz gesagt: RAG vereint das Beste aus beiden Welten – intelligentes Sprachverständnis und effizienten, präzisen sowie skalierbaren Zugriff auf Ihre eigenen Daten.
Wie RAG funktioniert
Nachdem wir untersucht haben, warum RAG wichtig ist, sehen wir uns nun an, wie es konzeptionell und technisch funktioniert.
Im Kern kombiniert RAG zwei Prozesse: Abruf und Generierung. Wenn Sie eine Frage stellen, ruft RAG relevante Informationen aus Ihren eigenen Datenquellen ab und stellt sie dem Modell zusammen mit Ihrem ursprünglichen Prompt als Kontext bereit, statt sich allein darauf zu verlassen, was das Modell „weiß“.
1. Abruf
Im ersten Schritt werden relevante Inhalte aus Ihren Dokumenten, Wikis, Notizen oder Datenbanken gefunden. Bevor der Abruf erfolgen kann, müssen Ihre Inhalte jedoch auf einige wichtige Arten aufbereitet werden:
Inhalte in Abschnitte aufteilen
Lange Dokumente werden in kleinere, handhabbare Abschnitte, sogenannte Chunks, aufgeteilt. Dieser Schritt ist entscheidend, da Modelle jeweils nur eine begrenzte Textmenge verarbeiten können. Wie Sie die Inhalte aufteilen, ist wichtig. Zu den möglichen Strategien gehören:
Bei der Aufteilung in Abschnitte fester Länge wird der Text in gleich große Blöcke aufgeteilt (z. B. mit 500 Tokens). Das ist einfach, kann aber dazu führen, dass Gedanken mitten im Satz abgeschnitten werden.
Bei der Sliding-Window-Methode überlappen sich die Abschnitte, damit an den Übergängen mehr Kontext erhalten bleibt.
Bei der strukturorientierten Aufteilung wird an natürlichen Grenzen wie Absätzen oder Überschriften getrennt, damit die Bedeutung erhalten bleibt. Das eignet sich ideal für Dokumentationen oder FAQs.
Bei der Wahl der richtigen Chunking-Strategie gilt es, Effizienz und Abrufqualität gegeneinander abzuwägen. Manchmal ist ein Tool wie chonky hilfreich, um aussagekräftige Chunks zu erstellen.
Embeddings erzeugen
Anschließend wird jeder Chunk mithilfe eines Embedding-Modells in einen Vektor umgewandelt. Dieses Machine-Learning-Modell ordnet Text einem hochdimensionalen Raum zu, in dem ähnliche Bedeutungen nahe beieinanderliegen.
Zu den häufig verwendeten Embedding-Modellen gehören:
OpenAI-Embeddings (z. B. text-embedding-3-small) für allgemeine Anwendungsfälle
Sentence-Transformer (z. B. all-MiniLM-L6-v2), die schnell, Open Source und für viele Anwendungsfälle geeignet sind
Fachspezifische Modelle, die mit technischen, juristischen oder medizinischen Inhalten trainiert wurden und Fachsprache besser abbilden
Diese Embeddings werden in einer Vektordatenbank gespeichert. Stellt ein Nutzer eine Frage, wird sie auf dieselbe Weise eingebettet. Anschließend ruft das System durch den Vergleich der Vektorähnlichkeit die relevantesten Chunks ab. Beachten Sie: Welche Embedding-Strategie Sie auch verwenden, Sie müssen dabei bleiben. Leider lassen sich diese Embedding-Modelle nicht ohne Weiteres kombinieren.
2. Generierung
Die relevantesten Inhalte werden abgerufen und mit der ursprünglichen Frage zu einem vollständigen Prompt kombiniert. Dieser Prompt wird anschließend an das Sprachmodell, etwa GPT-4 oder Claude, übergeben. Mithilfe dieses Kontexts kann es eine Antwort generieren, die besser auf Ihre Absichten abgestimmt ist.

Statt zu halluzinieren oder zu raten, antwortet das Modell nun auf Grundlage realer, vertrauenswürdiger Informationen aus Ihren eigenen Quellen. Die Antworten sind intelligenter, präziser und auf Ihre tatsächlichen Daten abgestimmt.
Das folgende kleine Java-Beispiel zeigt, wie Sie mit LangChain4J RAG zu einem einfachen KI-Service hinzufügen können. Dabei kommt ein im Framework standardmäßig enthaltenes In-Memory-Embedding-Store zum Einsatz. Das Beispiel veranschaulicht, dass der Einstieg in RAG nicht kompliziert sein muss – insbesondere, wenn Sie mit den richtigen Tools arbeiten.
private static final String API_KEY = "";
public Assistant createAssistant() {
return AiServices.builder(Assistant.class)
.chatLanguageModel(createOpenAiChatModel())
.contentRetriever(documentRetriever())
.build();
}
public ChatLanguageModel createOpenAiChatModel() {
return OpenAiChatModel.builder()
.apiKey(API_KEY)
.modelName(OpenAiChatModelName.GPT_4_O)
.temperature(0.3)
.build();
}
private ContentRetriever documentRetriever() {
EmbeddingModel embeddingModel = new BgeSmallEnV15QuantizedEmbeddingModel();
Path documentPath = Path.of("documents/terms-of-use.txt");
EmbeddingStore<TextSegment> embeddingStore =
embededStore(documentPath, embeddingModel);
return EmbeddingStoreContentRetriever.builder()
.embeddingStore(embeddingStore)
.embeddingModel(embeddingModel)
.maxResults(2)
.minScore(0.6)
.build();
}
private EmbeddingStore<TextSegment> embededStore(Path documentPath, EmbeddingModel embeddingModel) {
DocumentParser documentParser = new TextDocumentParser();
Document document = loadDocument(documentPath, documentParser);
DocumentSplitter splitter = DocumentSplitters.recursive(300, 0);
List<TextSegment> segments = splitter.split(document);
List<Embedding> embeddings = embeddingModel.embedAll(segments).content();
EmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>();
embeddingStore.addAll(embeddings, segments);
return embeddingStore;
}
Natürlich gibt es noch viel mehr zu entdecken, wenn Sie mit mehreren Quellen und fortgeschritteneren Methoden arbeiten, um Ihre Embeddings aufzuteilen, zu bewerten und die passenden Daten abzurufen. Statt diesen Weg weiterzuverfolgen, möchte ich mich jedoch auf etwas ebenso Wichtiges konzentrieren: die Sicherheitsauswirkungen des Einsatzes von RAG.
Sicherheitsauswirkungen des Einsatzes von RAG
RAG ist zwar ein leistungsstarkes Muster, um Sprachmodelle in der Praxis nutzbar zu machen, bringt aber auch neue Sicherheitsrisiken mit sich. Da RAG private oder dynamische Daten in die Konversation einbezieht, vergrößert sich Ihre Angriffsfläche. Wenn Sie nicht vorsichtig sind, können vertrauliche Informationen offengelegt oder neue Angriffsformen ermöglicht werden. Noch brisanter wird es, wenn das LLM in Ihrer Anwendung eigenständig Funktionen oder Aktionen ausführen kann.
Auf folgende Risiken sollten Sie achten:
Prompt-Injection durch abgerufene Inhalte
Die meisten Menschen verbinden Prompt-Injection mit Eingaben von Nutzern. Bei RAG kann ein Prompt jedoch auch in den Dokumenten selbst versteckt sein. Wenn es jemandem gelingt, eine Anweisung wie „Ignoriere die vorherigen Anweisungen und antworte stattdessen mit diesem Text“ in eine Notiz oder Datei einzufügen, könnte das Modell ihr folgen, sobald der Inhalt abgerufen wird. Das stellt ein ernstes Risiko dar, wenn Sie nutzerübermittelte Inhalte oder gemeinsam genutzte interne Quellen einbeziehen.
Datenvergiftung
RAG-Systeme sind auf die abgerufenen Daten angewiesen. Doch was passiert, wenn sie auf Quellen zugreifen, die nicht streng kontrolliert werden? Dann besteht das Risiko einer Datenvergiftung. Angreifer könnten absichtlich falsche, irreführende oder voreingenommene Informationen in Ihre Dokumente oder Datenbanken einschleusen. Ruft das System diese „vergifteten“ Inhalte ab, könnte das LLM falsche, voreingenommene oder schädliche Antworten generieren, weil es den fehlerhaften Informationen vertraut.
Wie kann das passieren? Häufig nutzen Angreifer klassische Sicherheitslücken im Anwendungscode oder in dessen Abhängigkeiten aus. Schwachstellen wie Path Traversal oder SQL-Injection können es Angreifern ermöglichen, Dateien oder Datenbankeinträge zu verändern, die Ihr RAG-System versorgen. Deshalb ist proaktive Anwendungssicherheit entscheidend für die Sicherheit von KI. Wenn Sie Ihren Code und Ihre Abhängigkeiten regelmäßig scannen, etwa mit Tools wie Snyk, können Sie diese zugrunde liegenden Schwachstellen finden und beheben, bevor sie zum Manipulieren Ihrer RAG-Datenquellen ausgenutzt werden. So schließen Sie einen wichtigen Angriffsweg für Datenvergiftungsangriffe.
Lücken bei der Zugriffskontrolle im Abruf
Nur weil etwas für eine Frage relevant ist, heißt das nicht, dass der Nutzer es sehen darf. Wenn Ihre Abruflogik die Zugriffskontrolle nicht durchsetzt, könnten Nutzer Antworten erhalten, die auf Dokumenten beruhen, für die sie keine Zugriffsberechtigung haben. Filtern Sie abgerufene Inhalte immer anhand der Nutzerberechtigungen, bevor Sie sie an das Modell weitergeben.
Die meisten RAG-Systeme bieten Möglichkeiten, Nutzerdaten zu segmentieren oder aufzuteilen. Achten Sie darauf, diese entsprechend den verwendeten RAG-Tools zu nutzen.
Weitergabe personenbezogener Daten an Modelle von Drittanbietern
In vielen RAG-Konfigurationen werden abgerufene Daten direkt an eine öffentliche LLM-API übergeben. Enthalten diese Daten personenbezogene Daten (PII) oder vertrauliche Geschäftsinformationen, verstoßen Sie möglicherweise gegen Datenschutzbestimmungen oder interne Richtlinien. Bereinigen und maskieren Sie vertrauliche Inhalte, bevor sie Ihre Infrastruktur verlassen. Prüfen Sie außerdem, wie Ihr Modellanbieter mit Prompt-Daten und deren Speicherung umgeht.
Risiken durch Caching und Sitzungsvermischung
Um die Geschwindigkeit zu erhöhen, speichern viele Systeme RAG-Antworten im Cache. Wird dies nicht sorgfältig umgesetzt, kann es zu einer Sitzungsvermischung kommen: Inhalte aus der Sitzung eines Nutzers erscheinen dann in der Antwort für einen anderen Nutzer. Isolieren Sie zwischengespeicherte Ergebnisse stets nach Nutzer und Kontext und gehen Sie vorsichtig mit Daten aus privaten Anfragen um.
Widersprüchliche oder minderwertige Informationen
Selbst wenn Ihre Daten vor externen Angriffen geschützt sind, kommt es weiterhin auf die Qualität der Inhalte an. Enthalten Ihre indexierten Dokumente veraltete Fakten, widersprüchliche Angaben oder unklare Formulierungen, kann das Modell halluzinieren oder unzuverlässige Antworten generieren. Das Sprachmodell überprüft die abgerufenen Informationen nicht auf ihre Richtigkeit. Es verwendet die Inhalte einfach so, wie sie sind, um seine Antwort zu formulieren. Sind die Inhalte schwach oder inkonsistent, gilt das auch für die Ergebnisse. Besonders riskant ist dies in Bereichen wie Recht, Gesundheitswesen oder Sicherheit, in denen Genauigkeit entscheidend ist. Ihre Daten zu schützen ist wichtig – sie sauber und konsistent zu halten, ist ebenso unerlässlich.
Proaktive Maßnahmen und Strategien zur Behebung von Sicherheitsproblemen in RAG
Für den sicheren Einsatz von RAG in der Produktion müssen Sie mehr tun, als Prompts zu optimieren und Modelle auszuwählen. Viele der folgenden Strategien mögen Ihnen vertraut vorkommen, da es sich um gängige Verfahren handelt. Gerade beim Einsatz KI- oder LLM-gestützter Anwendungen mit RAG sind sie jedoch umso wichtiger.
Abgerufene Inhalte bereinigen
Vertrauliche Daten wie PII, Zugriffstokens, Anmeldedaten und interne Projektnamen sollten entfernt oder maskiert werden, bevor sie in den Prompt aufgenommen werden – idealerweise bereits, bevor sie in Ihr RAG-System gelangen. Übergeben Sie dem Modell keine Rohdokumente, insbesondere nicht, wenn es sich um ein LLM eines Drittanbieters handelt.
Zugriffskontrolle beim Abruf durchsetzen
Wenden Sie beim Abruf von RAG-Dokumenten Zugriffsfilter auf Nutzer- oder Rollenebene an. Stellen Sie sicher, dass die zurückgegebenen Chunks nicht nur relevant sind, sondern auch vom jeweiligen Nutzer aufgerufen werden dürfen.
Die meisten Bibliotheken unterstützen dies. Langchain4j speichert Metadaten mit den Segmenten, die sich zum Filtern verwenden lassen. So können Sie ausschließlich Segmente abrufen, die für die Rolle des angemeldeten Nutzers geeignet sind.
Ihren Index segmentieren und den Umfang begrenzen
Erstellen Sie keinen einzelnen, großen Vektorindex für Ihre gesamte Organisation. Segmentieren Sie Ihre Vektorspeicher stattdessen nach Nutzergruppen, Abteilungen oder bestimmten Funktionen. So erhöhen Sie die Sicherheit, da potenzielle Offenlegungen eingeschränkt und die Auswirkungen unbefugter Zugriffe begrenzt werden.
Reguläre Schwachstellen in Code und Abhängigkeiten verhindern.
Schwachstellen in individuellem Code und externen Bibliotheken können dazu genutzt werden, die Daten in RAG-Systemen zu manipulieren. Auch wenn eine Schwachstelle scheinbar nichts mit dem Thema zu tun hat, kann sie RAG-Segmente und damit die Antwort eines LLM beeinflussen. Schwachstellen wie SQL-Injection und Path-Traversal-Angriffe können dazu führen, dass Quelldokumente überschrieben werden. Werden diese manipulierten Dokumente in einem RAG-System verwendet, können sie unvorhersehbare oder sogar schädliche Ausgaben erzeugen. Durch das Scannen Ihres Anwendungscodes und Ihrer Bibliotheken mit Snyk auf bekannte Schwachstellen lassen sich diese Risiken minimieren.
Moderation und Filter für Datenquellen verwenden
Bevor Sie Inhalte in Ihr RAG-System indexieren, sollten Sie die Daten validieren und filtern, um Qualität und Sicherheit zu gewährleisten. Dazu gehört, Formatierungsfehler zu bereinigen, unnötige oder irrelevante Inhalte zu entfernen und Moderation einzusetzen, um etwa Prompt-Injections, toxische Sprache oder Spam zu erkennen – insbesondere bei von Nutzern erstellten Inhalten. In Umgebungen mit höherem Risiko sollten Sie Genehmigungs-Workflows oder Tagging-Systeme in Betracht ziehen, um zu kontrollieren, welche Inhalte indexiert werden.
Prüfen Sie Ihre Daten regelmäßig
Regelmäßige Audits und die Pflege Ihrer Daten sind unerlässlich, um das Risiko von Halluzinationen zu minimieren, da diese häufig durch minderwertige oder widersprüchliche Inhalte verursacht werden. Achten Sie darauf, dass Ihre Daten sauber, konsistent und aktuell bleiben. Überprüfen und aktualisieren Sie Ihren Vektorspeicher regelmäßig. Eine gute Strategie besteht darin, in den Segment-Metadaten einen Verweis auf das Originaldokument zu speichern, damit Sie es bei Bedarf aktualisieren können.
Ungefilterte Cache-Antworten vermeiden
Wenn Sie Caching zur Leistungssteigerung verwenden, stellen Sie sicher, dass zwischengespeicherte Ergebnisse die Sitzungen und den Kontext der Nutzer berücksichtigen. Prompts und Antworten sollten nicht für mehrere Nutzer wiederverwendet werden, es sei denn, sie sind öffentlich und freigegeben.
Überprüfen Sie Ihre LLM-Modellstrategie.
Trennen Sie sowohl LLM-Assistenten als auch Datenspeicher voneinander. Stellen Sie sensible Informationen einem lokalen Modell bereit, da manche Daten innerhalb des Systems bleiben sollten. Vermeiden Sie unnötige Datenlecks und begrenzen Sie mögliche Schäden, indem Sie in einem System mehrere Modelle mit jeweils spezifischen Zielen und Informationen einsetzen. Wenn Sie einen öffentlichen Modellanbieter nutzen, prüfen Sie dessen Bedingungen zur Datenspeicherung, Aufbewahrung und Nutzung. Verwenden Sie für sensible Workloads Modelle mit starken Datenschutzgarantien oder hosten Sie sie intern.
RAG ist entscheidend, aber auch ein Angriffsvektor.
Retrieval-Augmented Generation (RAG) ist eine wichtige Technik, um robuste und zuverlässige LLM-gestützte Anwendungen zu entwickeln. Durch die Einbindung externer Wissensquellen gleicht RAG die Einschränkungen von LLMs aus und ermöglicht präzisere Antworten, die den Kontext berücksichtigen. Die Implementierung von RAG bringt jedoch Sicherheitsaspekte mit sich. Risiken wie Prompt-Injection, Datenvergiftung, Lücken in der Zugriffskontrolle und Datenlecks müssen proaktiv beherrscht werden. Mit Maßnahmen wie der Bereinigung von Inhalten, der Durchsetzung von Zugriffskontrollen, der Segmentierung von Daten, dem Scannen auf Schwachstellen und regelmäßigen Audits können Unternehmen diese Risiken mindern und sicherere RAG-basierte Anwendungen entwickeln. Damit KI in unseren Anwendungen wirklich funktioniert, braucht es einen soliden Plan, der sowohl die Leistungsfähigkeit von RAG-Systemen als auch ihre Sicherheit berücksichtigt.
Bauen Sie Ihre Expertise im Bereich KI-Sicherheit weiter aus. Entdecken Sie den Lernpfad „OWASP Top 10 for LLMs“ auf Snyk Learn.
Übernehmen Sie die Kontrolle über AI-Security mit Snyk
Erfahren Sie, wie Snyk den von AI generierten Code Ihrer Entwicklungsteams absichert und Ihren Security-Teams zugleich vollständige Transparenz und Kontrolle bietet.