Was ist RAG? Retrieval-Augmented Generation anhand eines Arbeitsbeispiels erklärt

  1. Startseite
  2. Blog
  3. Künstliche Intelligenz

Künstliche Intelligenz

Was ist RAG? Retrieval-Augmented Generation anhand eines Arbeitsbeispiels erklärt

Mit RAG kann ein KI-Modell anhand Ihrer eigenen Dokumente antworten und nicht nur aus dem Speicher. Erfahren Sie, wie die Pipeline funktioniert, führen Sie eine kleine Version in einfachem Python aus und erfahren Sie, warum echte Systeme ausfallen und wie Sie sie testen können.

9 Min. Lesezeit
Was ist RAG? Abruf-erweiterte Generierung anhand eines Arbeitsbeispiels erklärt

Das Wichtigste

  • RAG findet zuerst relevante Informationen, fügt sie der Eingabeaufforderung hinzu und bittet dann das Modell, darauf zu antworten.
  • Dies ist die übliche Methode, ein Sprachmodell mit privaten oder sich häufig ändernden Daten zu verbinden.
  • Die meisten Qualitätsprobleme beginnen beim Abruf und der Datenaufbereitung, nicht im Modell.
  • RAG reduziert erfundene Antworten, eliminiert sie jedoch nicht. Sie müssen es also testen.

Wenn Sie einen allgemeinen KI-Assistenten nach den Rückerstattungsrichtlinien Ihres Unternehmens fragen, kann dieser nur Vermutungen anstellen. Es hat Ihre Dokumente noch nie gesehen. RAG, kurz für Retrieval-Augmented Generation, löst dieses Problem, indem es die richtigen Informationen nachschlägt und sie zusammen mit der Frage an das Modell übergibt.

In dieser Anleitung wird jeder Schritt im Klartext erläutert und anschließend eine kleine Version erstellt, die ausschließlich die Standardbibliothek von Python verwendet. Wir haben diesen Code auf Python 3.13 ausgeführt und die angezeigten Ergebnisse stammen aus diesem Lauf. Es verwendet kein Sprachmodell, demonstriert also das Abrufen und die Eingabeaufforderungserstellung, und wir haben den letzten Antwortschritt nicht getestet.

Was ist RAG?

Retrieval-Augmented Generation ist eine Technik, die einen Suchschritt mit einem Sprachmodell kombiniert. Wenn eine Frage eintrifft, durchsucht das System eine Wissensquelle, fügt der Eingabeaufforderung die besten Ergebnisse hinzu und fordert das Modell auf, auf der Grundlage dieses Materials zu antworten.

Stellen Sie sich eine Open-Book-Prüfung vor. Ein Schüler, der nicht mit geschlossenen Büchern arbeitet, verlässt sich auf sein Gedächtnis und kann sich getrost falsch erinnern. Ein Open-Book-Schüler kann zuerst die richtige Seite nachschlagen. RAG gibt dem Modell dieses Buch und lässt es auch darauf hinweisen, welche Seite es verwendet hat.

Das Problem, das RAG löst

Ein Sprachmodell allein hat drei Grenzen für die geschäftliche Nutzung:

  • Es kennt Ihre privaten Daten nicht. Ihre Richtlinien, Tickets und Verträge waren nicht Teil seiner Schulung.
  • Sein Wissen hat einen Grenzwert. Es kann nichts über einen Preis wissen, den Sie heute Morgen geändert haben.
  • Es kann Antworten erfinden. Wenn es unsicher ist, kann es etwas Plausibles, aber Falsches hervorbringen.

RAG berücksichtigt alle drei Aspekte und Sie müssen nichts neu trainieren. Aktualisieren Sie ein Dokument, indizieren Sie es neu und die nächste Antwort kann es verwenden.

Wie RAG funktioniert, Schritt für Schritt

Ein RAG-System verfügt über zwei Pipelines. Einer bereitet Ihre Daten im Voraus vor und der andere wird für jede Frage ausgeführt.

Indizierung: Aufbereitung Ihrer Daten

  1. Laden: Sammeln Sie Inhalte aus PDFs, Wikis, Datenbanken oder Tickets.
  2. Bereinigen und aufteilen: Entfernen Sie Müll und teilen Sie die Dokumente dann in kleine Abschnitte auf.
  3. Einbetten: Wandeln Sie jede Passage in eine Liste von Zahlen um, die als Einbettung bezeichnet wird und ihre Bedeutung erfasst.
  4. Speichern: Speichern Sie die Einbettungen in einem durchsuchbaren Index, häufig einer Vektordatenbank.

Abfragen: eine Frage beantworten

  1. Abrufen: Betten Sie die Frage ein und finden Sie die Passagen, die der Bedeutung am ähnlichsten sind.
  2. Erweitern: Fügen Sie diese Passagen in die Eingabeaufforderung ein.
  3. Generieren: Das Modell schreibt eine Antwort unter Verwendung dieses Kontexts.

Für den Abruf müssen keine Vektoren verwendet werden. Dabei kann es sich um eine Stichwortsuche oder sogar eine SQL-Abfrage handeln, je nachdem, welche Informationen die richtigen Informationen für Ihre Daten finden.

Ein kleines funktionierendes Beispiel

Um die beweglichen Teile deutlich zu sehen, hier ein kleiner Retriever ohne Bibliotheken. Es stellt Text als Wortanzahl dar, ein viel einfacherer Ersatz für echte Einbettungen, und bewertet die Ähnlichkeit mithilfe des Kosinusmaßes.

import math, re
from collections import Counter

DOCS = {
    "refunds": "Refunds are paid within 7 days to the original payment method.",
    "shipping": "Standard shipping takes 3 to 5 working days across India.",
    "warranty": "All keyboards include a 2 year warranty against defects.",
}

def vectorize(text):
    return Counter(re.findall(r"[a-z0-9]+", text.lower()))

def similarity(a, b):
    dot = sum(a[word] * b[word] for word in a)
    size = math.sqrt(sum(v * v for v in a.values()))
    size *= math.sqrt(sum(v * v for v in b.values()))
    return dot / size if size else 0

def retrieve(question, k=1):
    q = vectorize(question)
    scored = [(similarity(q, vectorize(t)), name) for name, t in DOCS.items()]
    return sorted(scored, reverse=True)[:k]

def build_prompt(question):
    (score, name), = retrieve(question)
    return (
        "Answer using only the context. If it is not there, say you do not know.\n"
        f"Context: {DOCS[name]}\n"
        f"Question: {question}"
    )

Wenn Sie nach Rückerstattungen fragen, finden Sie die richtige Passage und erstellen diese Eingabeaufforderung:

print(retrieve("How many days until refunds are paid?"))
# [(0.4558..., 'refunds')]

print(build_prompt("How many days until refunds are paid?"))
# Answer using only the context. If it is not there, say you do not know.
# Context: Refunds are paid within 7 days to the original payment method.
# Question: How many days until refunds are paid?

In einem vollständigen System würden Sie diese Eingabeaufforderung nun an ein Sprachmodell senden. Das wichtige Detail ist die Anweisung, zuzugeben, wenn die Antwort fehlt. Mehr dazu erfahren Sie in unserem Leitfaden zum Prompt Engineering.

Was unserem Beispiel entgeht

Versuchen Sie es nun mit einer Frage, die dasselbe bedeutet, aber unterschiedliche Wörter verwendet:

print(retrieve("When can I get my money back?", k=3))
# [(0.0, 'warranty'), (0.0, 'shipping'), (0.0, 'refunds')]

Jede Punktzahl ist Null, da die Frage mit keinem Dokument Wörter gemeinsam hat. „Geld zurück“ bedeutet Rückerstattung an einen Menschen, aber die Anzahl der Worte lässt es nicht sagen. Diese einzelne Ausgabe erklärt, warum echte Systeme Einbettungen verwenden, die so konzipiert sind, dass Texte mit ähnlicher Bedeutung mit ähnlichen Zahlen enden, auch wenn keine Wörter gemeinsam sind.

Aber gehen Sie nicht davon aus, dass Einbettungen alles lösen. Sie können mit genauen Begriffen wie Produktcodes und Fehlernummern zu kämpfen haben, mit denen die Stichwortsuche sehr gut zurechtkommt. Aus diesem Grund verwenden viele Produktionssysteme die Hybridsuche und kombinieren die beiden Ansätze.

Chunking: der Schritt, den die Leute unterschätzen

Dokumente werden in Blöcke aufgeteilt, da ganze Dateien zu lang und ungenau zum Abrufen sind. Die von Ihnen gewählte Größe erfordert einen echten Kompromiss:

Stückgröße Vorteil Risiko
Zu klein Präzise Übereinstimmungen Der Kontext geht verloren, z. B. für welches Produkt eine Regel gilt
Zu groß Behält den Kontext Verwässert die Bedeutung und verwendet mehr von der Aufforderung
Nach Struktur aufgeteilt Respektiert Überschriften und Abschnitte Benötigt sauberere Quelldokumente

Ein paar hundert Wörter mit einigen Überschneidungen zwischen den Blöcken sind ein üblicher Ausgangspunkt, aber betrachten Sie das als erste Vermutung zum Testen. Teilen Sie, wenn möglich, entlang natürlicher Grenzen, z. B. Überschriften, auf. Fügen Sie außerdem Metadaten wie Dokumenttitel, Datum und Abteilung hinzu, damit Sie Ergebnisse filtern und Quellen zitieren können.

Verbesserung des Abrufs

Wenn die Antworten schlecht sind, sind dies die Upgrades, die es am meisten wert sind, ausprobiert zu werden, ungefähr in dieser Reihenfolge:

  • Bereinigen Sie die Daten. Entfernen Sie zunächst veraltete und doppelte Dokumente. Kein Algorithmus behebt widersprüchliche Quellen.
  • Verwenden Sie die Hybridsuche. Kombinieren Sie bedeutungsbasierte Ergebnisse und Schlüsselwortergebnisse.
  • Fügen Sie einen Re-Ranker hinzu. Rufen Sie mehr Kandidaten ab und verwenden Sie dann ein spezielles Modell, um sie nach Relevanz neu zu ordnen.
  • Nach Metadaten filtern. Schränken Sie die Ergebnisse vor der Suche nach Produkt, Region oder Datum ein.
  • Formulieren Sie die Abfrage neu. Verwandeln Sie eine vage Antwort wie „Was ist mit der zweiten Frage?“ in eine vollständige Frage.

Tipp: Bevor Sie dem Modell die Schuld geben, schauen Sie sich an, was der Abruf tatsächlich zurückgegeben hat. Wenn die richtige Passage nicht im Kontext stünde, hätte kein Modell darauf richtig antworten können.

RAG vs. Feinabstimmung

Frage RAG Feinabstimmung
Was fügt es hinzu? Wissen zur Fragestunde Geschultes Verhalten oder Stil
Informationen aktualisieren Indexieren Sie das Dokument neu Trainiere wieder
Kann es Quellen zitieren? Ja Nicht zuverlässig
Am besten für Fakten, die sich ändern Konsistentes Format oder Ton

Sie schließen sich gegenseitig nicht aus. Unser Vergleich von RAG vs. Feinabstimmung vs. Prompt Engineering befasst sich ausführlicher mit der Auswahl.

So testen Sie ein RAG-System

RAG ist Software und erfordert Tests wie jede andere Software. Erstellen Sie eine Reihe realer Fragen sowie die erwarteten Passagen und Antworten und messen Sie dann die beiden Phasen getrennt:

Bühne Frage, die man stellen muss Gebräuchlicher Name
Abruf Haben wir die richtige Passage gefunden? Kontexterinnerung
Abruf Wie viel von dem, was wir geholt haben, war nützlich? Kontextpräzision
Generation Wird die Antwort durch den Kontext unterstützt? Treue
Generation Beantwortet es tatsächlich die Frage? Antwortrelevanz

Beziehen Sie auch heikle Fälle ein: Fragen, auf die es in Ihren Daten keine Antwort gibt, Fragen mit unterschiedlichen Formulierungen und Fragen mit widersprüchlichen Quellen. Führen Sie diesen Satz jedes Mal erneut aus, wenn Sie Chunking, Modelle oder Eingabeaufforderungen ändern, genau wie eine Regressionssuite. Unser Pytest-Tutorial zeigt, wie Sie viele Eingaben in einem einzigen Test ausführen.

Warum RAG-Systeme scheitern

  • Die Antwort ist nicht in den Daten enthalten. Das Modell versucht möglicherweise immer noch eine, also sagen Sie ihm, wie es ablehnen soll.
  • Der richtige Block wurde nicht abgerufen. Dies ist oft ein Chunking- oder Suchproblem.
  • Zu viel Kontext. Irrelevante Passagen können das Modell ablenken und die Kosten erhöhen.
  • Veraltete Dokumente. Eine alte Richtlinie kann genauso sicher wie die aktuelle abgerufen werden.
  • Tabellen und PDFs wurden schlecht geparst. Wenn der Text durch die Extraktion durcheinander gebracht wird, wird der Abruf nie wiederhergestellt.
  • Testen nur mit Demo-Fragen. Echte Benutzer formulieren die Dinge ganz anders.

Sicherheit und Berechtigungen

RAG bringt zwei Risiken mit sich, die leicht zu übersehen sind. Erstens, Zugriffskontrolle: Wenn der Index HR-Dateien enthält, darf die Frage eines Nachwuchsmitarbeiters diese nicht abrufen. Wenden Sie beim Abruf die Berechtigungen jedes Benutzers an, da die Anweisung an das Modell, Geheimnisse zu bewahren, kein zuverlässiger Schutz ist.

Zweitens, schnelle Injektion. Eine abgerufene Webseite oder ein abgerufenes Dokument könnte Text wie „Ignorieren Sie Ihre Anweisungen“ enthalten. Behandeln Sie abgerufene Inhalte als nicht vertrauenswürdige Daten, schränken Sie die Aktionen des Modells ein und verlangen Sie, dass ein Mensch sensible Inhalte genehmigt.

Fazit

RAG ist eine einfache Idee mit vielen praktischen Details: Finden Sie die richtigen Informationen und bitten Sie das Modell, sie zu verwenden. Beginnen Sie mit einem kleinen, sauberen Satz Dokumente und etwa zwanzig echten Fragen. Sorgen Sie dafür, dass der Abruf funktioniert, bevor Sie die Komplexität erhöhen, denn eine bescheidene Pipeline mit guten Daten ist in der Regel besser als eine ausgefeilte mit schlechten Daten.

Häufige Fragen

Wofür steht RAG in der KI?

RAG steht für Retrieval-Augmented Generation. Ein System ruft relevante Informationen ab, fügt sie der Eingabeaufforderung hinzu und das Modell generiert daraus eine Antwort.

Stoppt RAG AI-Halluzinationen?

Es reduziert sie, indem es dem Modell echte Quellen gibt, entfernt sie jedoch nicht. Ein Modell kann den Kontext immer noch falsch interpretieren. Testen Sie daher die Antworten und zeigen Sie Zitate an.

Benötige ich eine Vektordatenbank für RAG?

Nicht immer. Kleine Projekte können einen In-Memory-Index, eine Schlüsselwortsuche oder SQL verwenden. Vektordatenbanken helfen bei großen Sammlungen und der bedeutungsbasierten Suche.

Was ist der Unterschied zwischen RAG und Feinabstimmung?

Die RAG stellt in der Fragestunde Informationen zur Verfügung, so dass Aktualisierungen schnell erfolgen. Durch die Feinabstimmung wird ein Modell trainiert, sein Verhalten oder seinen Stil zu ändern, und es ist weniger geeignet, Fakten zu ändern.

Was ist eine Einbettung?

Eine Einbettung ist eine Liste von Zahlen, die die Bedeutung eines Textes darstellen. Passagen mit ähnlicher Bedeutung haben ähnliche Nummern, was eine bedeutungsbasierte Suche ermöglicht.

Lerne weiter

Arbeiten Sie mit Stack Quora

Benötigen Sie Hilfe beim Testen, WordPress oder SEO?

Wir helfen Teams, bessere Software zu liefern und ihre Websites zu erweitern. Sagen Sie uns, woran Sie gerade arbeiten, und wir schlagen Ihnen einen klaren nächsten Schritt vor.

Lesen Sie weiter

Weitere Anleitungen finden Sie unter Tests, KI und moderne Entwicklung

Hat Ihnen dieser Artikel gefallen? Wählen Sie ein Thema und springen Sie direkt in unsere neuesten Tutorials.

Künstliche Intelligenz

KI-Halluzinationen erklärt: Warum Sprachmodelle Dinge erfinden und wie man sie reduziert

KI-Halluzinationen erklärt: Was sie sind, warum Sprachmodelle sie produzieren, gängige Typen, wie man sie mit Erdung und Eingabeaufforderungen reduz…

Artikel lesen →
DevOps

Erklärte Umgebungsvariablen: .env-Dateien, Geheimnisse und Konfiguration richtig gemacht

Umgebungsvariablen anhand von Python-Beispielen erklärt, die wir ausgeführt haben: Sie lesen und festlegen, warum jeder Wert ein String ist, .env-Da…

Artikel lesen →
Softwareentwicklung

API-Ratenbegrenzung erklärt: Algorithmen, Header und Behandlung von 429-Fehlern

API-Ratenbegrenzung anhand einer von uns durchgeführten Simulation erklärt: Token-Bucket, festes Fenster, gleitendes Fenster, 429 Antworten, Ratenbe…

Artikel lesen →
Testautomatisierung

Spott in Python: unittest.mock, Patch und die Fehler, die Tests zum Lügen machen

Mocking in Python mit unittest.mock, getestet: Mock und return_value, side_effect, Patchen, wo ein Name verwendet wird, Spezifikation und Autospec, …

Artikel lesen →
Softwaretests

Code-Abdeckung erklärt: Leitungs- und Zweigstellenabdeckung und was 100 % wirklich bedeutet

Erklärung der Codeabdeckung anhand eines echten Coverage.py-Laufs: Zeilen-, Zweig- und Bedingungsabdeckung, Lesen eines Berichts, warum bei 100 % Ab…

Artikel lesen →
Datenbanken & SQL

DELETE vs. TRUNCATE vs. DROP in SQL: Unterschiede, Rollback und Verwendungszweck

DELETE vs. TRUNCATE vs. DROP erklärt mit getestetem SQL: was jeweils entfernt wird, Rollback, Trigger, Identitätsrücksetzung, Geschwindigkeit und wi…

Artikel lesen →
Datenbanken & SQL

Erklärte SQL-Ansichten: Erstellen, nutzen und vermeiden Sie Fallstricke mit Beispielen

SQL-Ansichten anhand der von uns ausgeführten Abfragen erklärt: Erstellen einer Ansicht, Live-Ergebnisse, Ausblenden von Spalten, Leistung, aktualis…

Artikel lesen →
Softwareentwicklung

TypeScript-Schnittstelle vs. Typ: Echte Unterschiede, getestet mit dem Compiler

TypeScript-Schnittstelle vs. Typ, überprüft mit dem echten Compiler: Was beide können, was nur einer kann, Deklarationszusammenführung, Erweiterunge…

Artikel lesen →
Softwareentwicklung

Python *args und **kwargs erklärt: Flexible Funktionen mit klaren Beispielen

Python *args und **kwargs erklärt mit Code, den wir ausgeführt haben: Packen und Entpacken, Parameterreihenfolge, Nur-Schlüsselwort- und Nur-Positio…

Artikel lesen →
Softwareentwicklung

Python-Lambda-Funktionen: Syntax, tatsächliche Verwendung und wann man sie nicht verwendet

Python-Lambda-Funktionen erklärt mit Code, den wir ausgeführt haben: Syntax, Sortierung mit Schlüssel, Karte und Filter, Abschlüsse, die Late-Bindin…

Artikel lesen →
Künstliche Intelligenz

Was sind KI-Agenten? Wie sie funktionieren, mit einer einfachen Agentenschleife, die Sie ausführen können

Was sind KI-Agenten? Eine einfache Anleitung zur Agentenschleife, zu Tools, Speicher und Leitplanken, mit einer kleinen Python-Schleife, die wir aus…

Artikel lesen →
DevOps

Überwachung vs. Beobachtbarkeit: Der wahre Unterschied, mit Protokollen, Metriken und Traces

Überwachung vs. Beobachtbarkeit erklärt: bekannte und unbekannte Fehler, Protokolle, Metriken und Spuren, eine exemplarische Vorgehensweise für Chec…

Artikel lesen →
DevOps

Docker-Volumes vs. Bind Mounts: Containerdaten auf die richtige Art und Weise beibehalten

Docker-Volumes vs. Bind-Mounts erklärt: Warum Containerdaten verschwinden, benannte Volumes, Bind-Mounts, tmpfs, Compose-Beispiele, Backups, Berecht…

Artikel lesen →
Testautomatisierung

TDD vs. BDD: Hauptunterschiede, eine Funktion, die auf beide Arten entwickelt wurde und wann sie jeweils verwendet werden sollte

TDD vs. BDD erklärt mit einer Rabattfunktion, die in beide Richtungen aufgebaut ist: Rot-Grün-Refaktor mit Code, den wir ausgeführt haben, Gegeben-W…

Artikel lesen →
Softwaretests

Benutzerakzeptanztests (UAT): Prozess, Checkliste und reale Beispiele

Benutzerakzeptanztests erklärt: Wer führt ihn durch, wie unterscheidet er sich von der Qualitätssicherung, ein siebenstufiger Prozess, eine UAT-Test…

Artikel lesen →
Datenbanken & SQL

Erklärte SQL-NULL-Werte: IS NULL, COALESCE, NULLIF und die zu vermeidenden Fallen

SQL-NULL-Werte, die mit von uns ausgeführten Abfragen erklärt wurden: dreiwertige Logik, IS NULL, COALESCE, NULLIF, wie Aggregate, Joins und Sortier…

Artikel lesen →
Datenbanken & SQL

SQL CASE WHEN-Anweisung: Syntax, reale Beispiele und häufige Fehler

SQL CASE WHEN anhand der von uns ausgeführten Abfragen erklärt: einfache und durchsuchte Formulare, Bedingungsreihenfolge, Pivots mit SUM, COUNT-Tri…

Artikel lesen →
Softwareentwicklung

Was ist JWT? JSON-Web-Tokens anhand eines funktionierenden Beispiels erklärt

Was ist JWT? JSON Web Tokens erklärt: die drei Teile, ein Token, das in dem von uns ausgeführten Code erstellt und manipuliert wurde, JWT vs. Sitzun…

Artikel lesen →
Softwareentwicklung

Erklärte JavaScript-Ereignisschleife: Aufrufstapel, Mikrotasks und Timer mit Beispielen

Die JavaScript-Ereignisschleife wurde mit dem von uns ausgeführten Code erklärt: Aufrufstapel, Aufgaben- und Mikrotask-Warteschlangen, warum setTime…

Artikel lesen →
Softwareentwicklung

Erklärung von Python-Generatoren und -Ertrag: Sparen Sie Speicher mit echten Beispielen

Python-Generatoren und Yield anhand des von uns ausgeführten Codes erklärt: wie sie angehalten und fortgesetzt werden, gemessene Speichereinsparunge…

Artikel lesen →
Künstliche Intelligenz

Was sind Einbettungen? Vektoren und Kosinusähnlichkeit einfach erklärt

Was sind Einbettungen? Ein Leitfaden in einfacher Sprache zu Vektoren, Kosinusähnlichkeit und semantischer Suche, mit einem kleinen Beispiel, das wi…

Artikel lesen →
DevOps

Blau-Grün vs. Canary-Bereitstellung: Unterschiede, Kompromisse und Auswahl

Blue-Green vs. Canary-Bereitstellung erklärt: Funktionsweise, Kosten, Risiko und Rollback, stabiles Benutzer-Bucketing, das wir getestet haben, Date…

Artikel lesen →
Testautomatisierung

Flaky-Tests: Was sie verursacht und wie man sie endgültig behebt

Flaky-Tests wurden anhand von Demos erklärt, die wir durchgeführt haben: die Hauptursachen, wie man sie bestätigt und diagnostiziert, richtige Korre…

Artikel lesen →
Softwaretests

Lasttest vs. Stresstest: Unterschiede, Metriken und k6-Beispiele

Erläuterungen zu Lasttests und Stresstests: Was die einzelnen Tests beweisen, Spike- und Soak-Tests, welche Kennzahlen wichtig sind, warum Durchschn…

Artikel lesen →
Softwaretests

Testfall vs. Testszenario: Hauptunterschiede, Beispiele und wann man sie jeweils verwendet

Testfall vs. Testszenario erklärt: klare Definitionen, eine Tabelle nebeneinander, eine Funktion zum Zurücksetzen von Passwörtern, die von Szenarios…

Artikel lesen →
Datenbanken & SQL

SQL-Abfrageoptimierung: Ausführungspläne lesen und langsame Abfragen mit Zeitvorgaben beheben

An einer Million Zeilen getestete SQL-Abfrageoptimierung: Ausführungspläne lesen, die richtigen Indizes hinzufügen, nicht sargierbare Filter korrigi…

Artikel lesen →
Datenbanken & SQL

SQL UNION vs. UNION ALL: Unterschiede, Beispiele und getestete Leistung

SQL UNION vs. UNION ALL anhand der von uns ausgeführten Abfragen erklärt: Duplikate, die Regeln, denen beide folgen, ein echter Datenfehler, gemesse…

Artikel lesen →
Softwareentwicklung

Tutorial zur JavaScript-Abruf-API: GET, POST, Fehlerbehandlung und Zeitüberschreitungen

Ein JavaScript-Abruf-API-Tutorial, das auf einem lokalen Server getestet wurde: GET und POST, warum 404 nicht ausgelöst wird, ein wiederverwendbarer…

Artikel lesen →
Softwareentwicklung

Umgang mit Python-Dateien: Lesen, Schreiben, CSV, JSON und Pathlib mit Beispielen

Die Handhabung von Python-Dateien wird anhand des von uns ausgeführten Codes erklärt: Öffnungsmodi, Lesen großer Dateien, CSV, JSON, Pathlib, Binärd…

Artikel lesen →
Softwareentwicklung

Python-Klassen und -Objekte: OOP-Tutorial mit echten Beispielen

Python-Klassen und -Objekte erklärt mit Code, den wir ausgeführt haben: __init__, Methoden, Klassen- und Instanzattribute, Vererbung, Eigenschaften,…

Artikel lesen →
Künstliche Intelligenz

Was ist ein großes Sprachmodell? Wie LLMs funktionieren, ohne großen Hype erklärt

Was ist ein großes Sprachmodell? LLMs im Klartext erklärt: Token, Einbettungen, Aufmerksamkeit, Training, Temperatur- und Kontextfenster, eine klein…

Artikel lesen →
DevOps

Linux-Befehle für Anfänger: Der grundlegende Terminal-Leitfaden mit Beispielen

Linux-Befehle für Anfänger, gruppiert nach Aufgaben: Navigation, Dateien, Anzeigen von Protokollen, Grep, Pipes, Berechtigungen, Prozesse und Archiv…

Artikel lesen →
Testautomatisierung

Selenium vs. Playwright: Hauptunterschiede, Code im Vergleich und welche Sie wählen sollten

Selenium vs. Playwright im Vergleich: Architektur, Wartezeit, Browser- und Sprachunterstützung, Debugging, der gleiche Test in beiden Tools, Migrati…

Artikel lesen →
Softwaretests

Äquivalenzpartitionierung: Testdesigntechnik anhand von Beispielen erklärt

Erklärung der Äquivalenzpartitionierung: Wie man gültige und ungültige Partitionen findet, Beispiele für Alter, Passwörter und Gutscheine, von uns d…

Artikel lesen →
Softwaretests

Schweregrad vs. Priorität beim Softwaretest: Unterschiede, Matrix und reale Beispiele

Schweregrad vs. Priorität beim Softwaretest erklärt: klare Definitionen, eine Vier-Wege-Matrix mit Beispielen, Stufenskalen, wer die einzelnen Punkt…

Artikel lesen →
Datenbanken & SQL

Tutorial zu SQL-Unterabfragen: Typen, korrelierte Unterabfragen und EXISTS mit Beispielen

Ein SQL-Unterabfrage-Tutorial mit Abfragen, die wir ausgeführt haben: Skalar-, IN-, FROM- und SELECT-Unterabfragen, korrelierte Unterabfragen, EXIST…

Artikel lesen →
Datenbanken & SQL

SQL-Transaktionen und ACID erklärt: COMMIT, ROLLBACK und Isolationsstufen

SQL-Transaktionen und ACID anhand einer von uns durchgeführten Banküberweisung erklärt: COMMIT, ROLLBACK, Sicherungspunkte, Sperren, Isolationsstufe…

Artikel lesen →
Softwareentwicklung

Spickzettel für Git-Befehle: Die Befehle, die Sie tatsächlich verwenden, mit Beispielen

Ein Git-Befehls-Spickzettel, gruppiert nach Aufgabe: Setup, Staging, Branches, Remotes, Stash, Verlauf und Rückgängigmachen von Fehlern, mit Ausgabe…

Artikel lesen →
Softwareentwicklung

Erklärte JavaScript-Versprechen: Dann, Catch, Promise.all und häufige Fehler

JavaScript-Versprechen erklärt mit Code, den wir ausgeführt haben: Zustände, dann und Fangketten, Fehlerbehandlung, Promise.all, allSettled, Rennen …

Artikel lesen →
Softwareentwicklung

Python-Wörterbuch-Tutorial: Methoden, Beispiele und gängige Muster

Ein Python-Wörterbuch-Tutorial mit Code, den wir ausgeführt haben: Diktate erstellen, lesen und aktualisieren, Schlüsselmethoden, Zusammenführung, V…

Artikel lesen →
Künstliche Intelligenz

Was ist RAG? Retrieval-Augmented Generation anhand eines Arbeitsbeispiels erklärt

Was ist RAG? Abruf-erweiterte Generierung Schritt für Schritt erklärt: Indizierung, Chunking, Einbettungen, Abruf, ein kleines funktionierendes Pyth…

Artikel lesen →
DevOps

Terraform-Tutorial für Anfänger: Infrastruktur als Code von der ersten Datei bis zu den Modulen

Ein Terraform-Tutorial für Anfänger: Beginnen Sie ohne Cloud-Konto, lernen Sie Init, Planen und Anwenden, dann Variablen, Ausgaben, Status, Module u…

Artikel lesen →
DevOps

Docker vs. Kubernetes: Hauptunterschiede, wie sie zusammenarbeiten und was Sie brauchen

Docker vs. Kubernetes erklärt: Was jeder tut, die gleiche App läuft mit beiden, Docker Compose und Swarm im Vergleich, die Dockershim-Änderung und w…

Artikel lesen →
Testautomatisierung

Pytest-Tutorial für Anfänger: Vorrichtungen, Parametrisierung und reale Beispiele

Ein Pytest-Tutorial für Anfänger mit Tests, die wir auf Pytest 9.2 durchgeführt haben: Assertions, Fixtures, Parametrize, Conftest, Markers, tmp_pat…

Artikel lesen →
Softwaretests

Software Testing Life Cycle (STLC): 6 Phasen, Einstiegs- und Ausstiegskriterien, Beispiel

Der Softwaretest-Lebenszyklus erklärt: sechs STLC-Phasen mit Ein- und Ausstiegskriterien, Ergebnisse, ein Beispiel für eine funktionierende Anmeldef…

Artikel lesen →
Softwareentwicklung

Git merge vs rebase: Unterschiede, Beispiele und wann man was nutzt

Git merge vs rebase erklärt mit echter Log-Ausgabe, einer Vergleichstabelle, der goldenen Regel des Rebase und einem sicheren Team-Workflow.

Artikel lesen →
Softwareentwicklung

Python List Comprehension: Syntax, Beispiele und wann man darauf verzichtet

Python List Comprehension erklärt: Syntax, Filter, if-else, verschachtelte Schleifen, gemessene Zeiten und Fälle, in denen eine normale for-Schleife…

Artikel lesen →
Datenbanken & SQL

SQL Joins erklärt mit Beispielen (Inner, Left, Right, Full)

SQL Joins Schritt für Schritt mit Beispieltabellen und Abfragen verstehen: INNER, LEFT, RIGHT, FULL, CROSS und SELF, plus typische Fehler und Perfor…

Artikel lesen →