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.
- 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
- Laden: Sammeln Sie Inhalte aus PDFs, Wikis, Datenbanken oder Tickets.
- Bereinigen und aufteilen: Entfernen Sie Müll und teilen Sie die Dokumente dann in kleine Abschnitte auf.
- Einbetten: Wandeln Sie jede Passage in eine Liste von Zahlen um, die als Einbettung bezeichnet wird und ihre Bedeutung erfasst.
- Speichern: Speichern Sie die Einbettungen in einem durchsuchbaren Index, häufig einer Vektordatenbank.
Abfragen: eine Frage beantworten
- Abrufen: Betten Sie die Frage ein und finden Sie die Passagen, die der Bedeutung am ähnlichsten sind.
- Erweitern: Fügen Sie diese Passagen in die Eingabeaufforderung ein.
- 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
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.
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.
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 →DevOpsErklä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 →SoftwareentwicklungAPI-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 →TestautomatisierungSpott 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 →SoftwaretestsCode-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 & SQLDELETE 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 & SQLErklä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 →SoftwareentwicklungTypeScript-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 →SoftwareentwicklungPython *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 →SoftwareentwicklungPython-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 IntelligenzWas 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 →DevOpsDocker-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 →TestautomatisierungTDD 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 →SoftwaretestsBenutzerakzeptanztests (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 & SQLErklä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 & SQLSQL 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 →SoftwareentwicklungWas 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 →SoftwareentwicklungErklä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 →SoftwareentwicklungErklä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 IntelligenzWas 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 →DevOpsBlau-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 →TestautomatisierungFlaky-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 →SoftwaretestsLasttest 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 →SoftwaretestsTestfall 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 & SQLSQL-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 & SQLSQL 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 →SoftwareentwicklungTutorial 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 →SoftwareentwicklungUmgang 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 →SoftwareentwicklungPython-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 IntelligenzWas 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 →DevOpsLinux-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 →TestautomatisierungSelenium 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 →SoftwaretestsSchweregrad 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 & SQLTutorial 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 & SQLSQL-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 →SoftwareentwicklungSpickzettel 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 →SoftwareentwicklungErklä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 →SoftwareentwicklungPython-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 IntelligenzWas 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 →DevOpsTerraform-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 →DevOpsDocker 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 →TestautomatisierungPytest-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 →SoftwaretestsSoftware 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 →SoftwareentwicklungGit 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 →SoftwareentwicklungPython 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 & SQLSQL 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 →