Sofortantwort
Query Expansion einfach erklärt
Suchanfragen werden automatisch erweitert oder umformuliert, damit mehr relevante Dokumente gefunden werden.
- Kurz gesagt
- Erweitert Suchanfragen mit Synonymen, verwandten Begriffen oder Umformulierungen
- Typischer Einsatz
- RAG-Systeme, Enterprise-Suche, Chatbots
- Wichtig zu wissen
- Verbessert Recall in RAG-Systemen signifikant bei geringem Mehraufwand
Query Expansion im Überblick
Wenn ein Nutzer in einem KI-System nach etwas sucht, ist die ursprüngliche Anfrage oft zu kurz, zu vage oder nutzt andere Begriffe als die gespeicherten Dokumente. Query Expansion löst genau dieses Problem: Die Anfrage wird automatisch erweitert oder umformuliert, bevor die eigentliche Suche startet.
Ein einfaches Beispiel: Die Anfrage „Kosten senken” wird zu „Kosten senken, Ausgaben reduzieren, Budget optimieren, Effizienz steigern” – all das beschreibt dasselbe Ziel, aber mit unterschiedlichen Wörtern. Das System findet damit deutlich mehr relevante Dokumente.
Die vier wichtigsten Techniken:
| Technik | Wie es funktioniert | Bestes für |
|---|---|---|
| Synonym Expansion | Klassische Thesaurus-Suche | Einfache Keyword-Systeme |
| Query Rewriting | LLM formuliert Anfrage um | Vage Nutzerfragen |
| Multi-Query | LLM erzeugt 3–5 Varianten | RAG mit hohem Recall-Bedarf |
| HyDE | LLM generiert hypothetisches Dokument | Technische Wissensbasen |
Technisch betrachtet
Multi-Query Retrieval
Suche mit der Originalfrage und ausgewählten Varianten. Führe Treffer anhand ihrer Chunk-ID zusammen. Bei diesem Einstieg stammen die Varianten aus einer festen Liste. Ein Sprachmodell kann sie ebenfalls erzeugen, sofern du Thema und gewünschte Anzahl begrenzt.
Die Beispiele verwenden collection und model aus dem RAG-Guide.
question = "How long can I return an unopened product?"
queries = [
question,
"What is the return window for unopened items?",
"Deadline for returns from the date of purchase",
]
result = collection.query(
query_texts=queries,
n_results=min(3, collection.count()),
include=["documents"],
)
hits = {}
for ids, documents in zip(result["ids"], result["documents"] or [], strict=True):
for chunk_id, text in zip(ids, documents, strict=True):
hits.setdefault(chunk_id, text)
Die Deduplizierung erhält die Reihenfolge des ersten Auftretens. Für die gemeinsame Rangfolge kannst du Rangfusion oder einen Reranker einsetzen. Vergleiche das Ergebnis mit der Suche über die Originalfrage allein.
HyDE (Hypothetical Document Embeddings)
Ein Modell erstellt einen hypothetischen Text zur Nutzerfrage. Die Embedding-Funktion der Sammlung bettet diesen Text als Suchanfrage ein. Für die Antwort verwendest du die gefundenen Dokumente als Belege.
draft = model.invoke([
("system", "Schreibe eine kurze hypothetische Richtlinienpassage "
"für die Dokumentensuche. Sie dient nur als Suchsignal."),
("human", question),
]).text
hyde_result = collection.query(
query_texts=[draft],
n_results=min(3, collection.count()),
include=["documents"],
)
Teste HyDE gegen die Originalfrage. Erfundenes im Entwurf kann die Suche auf unpassende Dokumente lenken.
Step-Back Prompting
Eine weniger bekannte, aber effektive Variante: Die Anfrage wird auf eine abstraktere Ebene gehoben, bevor gesucht wird.
step_back_prompt = """
Du bist ein hilfreicher Assistent. Formuliere eine allgemeinere Frage,
die hilft, die folgende spezifische Frage zu beantworten.
Spezifische Frage: {question}
Allgemeinere Frage:"""
# "Welche Lernrate soll ich für GPT-2 Fine-Tuning nehmen?"
# → "Wie wählt man Hyperparameter beim Fine-Tuning von Sprachmodellen?"
Wann welche Methode?
- Synonym Expansion: Einfach, deterministisch, kein LLM nötig – gut für Produktsuche
- Query Rewriting: Wenn Nutzersprache stark von Dokumentsprache abweicht
- Multi-Query: Wenn zusätzliche Suchläufe relevante Treffer liefern. Mehrere Varianten können aus einem einzigen Modellaufruf stammen.
- HyDE: Wenn Anfragen sehr kurz sind und Dokumente ausführliche Texte sind
- Step-Back: Wenn Anfragen sehr spezifisch sind und allgemeines Hintergrundwissen benötigt wird