Packaging & Context Handling (DE)
Packaging & Context Handling ist eine Sammlung von Techniken zur Auswahl, Komprimierung, Anordnung und Bereitstellung von extrahierten Wissensfragmenten im Kontext von LLMs im Rahmen der Retrieval‑Augmented Generation (RAG). Das Ziel ist es, den Nutzen eines begrenzten Token-Budgets zu maximieren, die Genauigkeit und Stabilität der Antworten zu erhöhen und eine nachverfolgbare Zitierung der Quellen zu gewährleisten. Unter „Packaging“ versteht man nicht nur die Erstellung einer Liste von Fragmenten, sondern auch deren Komprimierung, Reihenfolge, Gruppierung und die an das Modell gerichteten Anweisungen, einschließlich der Strategien stuff, map‑reduce, refine und tree‑of‑chunks.[1][2]
Definition und Motivation
In RAG-Systemen wird die Qualität der endgültigen Antwort nicht nur durch das Retrieval bestimmt, sondern auch dadurch, wie die ausgewählten Fragmente in den Prompt gelangen. Kontextbeschränkungen und Token-Kosten erfordern einen Ausgleich zwischen Vollständigkeit und Genauigkeit: Zusätzliche Fragmente erhöhen das Risiko des „Lost-in-the-Middle“-Phänomens (lost‑in‑the‑middle) und verlängern die Latenz, während eine aggressive Filterung/Komprimierung wichtige Belege entfernen kann.[3] Im klassischen RAG dienen die Quellen als externer „nicht-parametrischer Speicher“, der Aktualität und Zitierfähigkeit gewährleistet, sofern das Packaging es der LLM ermöglicht, zuverlässig mit Fakten und Referenzen zu arbeiten.[1]
Chunking und Inhalts-Extraktion
Die Segmentierungsstrategie (chunking) bestimmt die Größe und Überlappung der Chunks, die Normalisierung und die Granularität (document→passage→sentence). Typische Ansätze sind:
- Feste Größe (nach Zeichen/Tokens) mit Überlappung, um die Kohärenz zwischen den Chunks zu wahren;[4][5]
- Semantisches Chunking (Grenzen basierend auf der Ähnlichkeit von Embeddings), das „semantische Brüche“ reduziert.[6]
- Sentence‑window retrieval — Zunächst werden Sätze indiziert; beim Retrieval werden relevante Sätze zusammen mit einem Fenster benachbarter Sätze (davor und danach) extrahiert, um den lokalen Kontext wiederherzustellen.[7]
- Indexierung auf Passage-Ebene — Die Aufteilung der Wikipedia in Passagen von etwa 100 Wörtern wurde zum Standard im Open-Domain QA (DPR), was den Nutzen einer feinen Granularität in den frühen Phasen unterstreicht.[8]
- Normalisierung und Bereinigung (Entfernen von überflüssigen Inhalten, Kopf-/Fußzeilen, Vereinheitlichung von Leerzeichen), Nachverfolgung von Quellen/Seiten/Offsets auf Metadatenebene zur Rückverfolgbarkeit.[9]
- Deduplizierung von Kandidaten-Chunks (exakte und near-duplicate): Shingles + MinHash/LSH zur Reduzierung von Wiederholungen.[10]
Diversifizierung und Auswahl (MMR u. a.)
Bei der Zusammenstellung des Kontextes sind hohe Relevanz und geringe Redundanz erforderlich. Die klassische Funktion der Maximal Marginal Relevance wählt das nächste Fragment unter Berücksichtigung seiner Nähe zur Anfrage und der maximalen Ähnlichkeit mit den bereits ausgewählten Fragmenten aus (Abzug für Duplikate):
.[11]
Kombination von Signalen: Hybrides Retrieval (BM25 + Dense) → Fusion (z. B. Reciprocal Rank Fusion, RRF) → Reranking mit Cross-Encoder/ColBERT:
- RRF: Ein einfaches und effektives, unüberwachtes Verfahren zur Fusion von Ranglisten aus heterogenen Retrievern.[12]
- Cross-Encoder-Reranker (BERT/MonoT5/moderne kommerzielle APIs) verbessern die Top-k-Präzision erheblich, erhöhen jedoch die Latenz.[13][14]
- Multivektor-Retriever ColBERT (late interaction) dient oft als effektiver Reranker oder First-Level-Retriever für große Korpora.[15]
- Hybride Suche (BM25F + Vektor) ist in industriellen Suchmaschinen und Bibliotheken mit konfigurierbaren Gewichtungen/Fusion-Methoden (Alpha, RRF usw.) implementiert.[16][17]
Kontextkomprimierung
Die Reduzierung des Kontextvolumens ohne Verlust von Fakten ist entscheidend für Kosten und Latenz:
- Extraktive Kompression (Extraktion von Schlüsselsätzen/-phrasen); abstraktive Zusammenfassung (Paraphrasierung/Verdichtung). Die klassische Perspektive wird von Nenkova & McKeown dargelegt.[18]
- Query-guided / instruction-guided Kompression: Zusammenfassung basierend auf der Anfrage/Aufgabe (Hervorhebung von Belegen und Entfernung irrelevanter Informationen).
- Prompt/Context Compression mittels LLM-basierter Filterung/Token-Pruning (z. B. LLMLingua/LLMLingua-2) reduziert das Token-Budget bei geringem Qualitätsverlust, erfordert jedoch eine sorgfältige Validierung der Faithfulness (Fakten-Treue).[19]
- Kompression ist ein Kompromiss zwischen Qualität↔Kosten↔Latenz: Eine aggressive Verdichtung erhöht das Risiko, Nuancen oder Voraussetzungen zu übersehen, und verschlechtert die Zuordnung von Fakten zu ihren Quellen.[20]
Packaging-Strategien (stuff/map‑reduce/refine/tree)
Im Folgenden werden vier grundlegende Schemata zur Anordnung von Quellen im Prompt und typische Anwendungsszenarien vorgestellt (siehe auch die Vergleichstabelle).
- Stuff (Direkte Eingabe)
- Die ausgewählten Fragmente (nach möglicher Komprimierung) werden zusammengefügt und als Ganzes übergeben. Diese Methode ist einfach und schnell, aber durch die Kontextlänge begrenzt und anfällig für das lost‑in‑the‑middle-Problem bei langen Eingaben.[2]
- Map‑Reduce
- In der map-Phase wird für jedes Fragment/Dokument lokal eine Antwort generiert oder eine Zusammenfassung erstellt. In der reduce-Phase werden diese Ergebnisse aggregiert (Vergleich, Abstimmung, Zusammenführung). Diese Methode skaliert gut mit der Anzahl der Quellen und reduziert die Last auf einen einzelnen Prompt, birgt aber bei naiver Aggregation das Risiko, die Zusammenhänge zwischen den Quellen zu verlieren.[2][21]
- Refine
- Sequentielle Verbesserung: Eine erste Antwort wird auf Basis des ersten Fragments generiert und dann iterativ unter Berücksichtigung der nachfolgenden Fragmente verfeinert (refine) (Hinzufügen/Korrigieren). Dies ist nützlich, wenn die Reihenfolge der Quellen wichtig ist; es besteht jedoch das Risiko, bei frühen Fehlern „stecken zu bleiben“ und Verzerrungen anzuhäufen.[22]
- Tree‑of‑chunks
- Hierarchische Komprimierung/Zusammenfassung: Lokale Zusammenfassungen auf Chunk-Ebene → Zusammenfassungen auf Abschnittsebene → endgültige Gesamtzusammenfassung. Nützlich für lange Dokumente; erfordert eine sorgfältige Weitergabe von Quellen-IDs zwischen den Ebenen für eine korrekte Zuordnung.[23]
| Strategie | Idee | Kosten/Latenz | Risiko des Kontextverlusts | Anwendungsfälle | Quellen |
|---|---|---|---|---|---|
| Stuff | Alle Fragmente direkt in einem Prompt | Niedrig (bis zum Kontextlimit) | Hoch bei langen Eingaben (lost‑in‑the‑middle) | Geringes Volumen, einfache Fragen | [2][3] |
| Map‑Reduce | Lokale Antworten → Aggregation | Mittel/Hoch (viele API-Aufrufe) | Mittel (abhängig von der Qualität der Reduce-Phase) | Viele Quellen, Skalierbarkeit erforderlich | [2][21] |
| Refine | Sequentielle Verbesserung der Antwort | Mittel | Abhängigkeit von der Reihenfolge, Risiko der Verfestigung von Fehlern | Wenn Reihenfolge/Entwicklung der Antwort wichtig ist | [22] |
| Tree‑of‑chunks | Hierarchische Zusammenfassungen | Mittel/Hoch | Detailverlust auf höheren Ebenen | Lange Dokumente/Sammlungen | [23] |
Reihenfolge und Positionierung der Quellen
LLMs nutzen Informationen aus der Mitte eines langen Kontexts weniger effektiv; nützliche Fakten sollten daher am Anfang oder Ende platziert, nach Themen/Quellen gruppiert und mit Überschriften und IDs gekennzeichnet werden. Ein Reranking, das die query-aware Wichtigkeit und Diversifizierung berücksichtigt, hilft dabei, die wichtigsten Fragmente an den Anfang zu verschieben.[3][13]
Integration in die RAG-Pipeline (fusion → rerank → packaging)
Eine typische mehrstufige Pipeline sieht wie folgt aus: hybrid retrieval (BM25 + dense) → fusion (RRF/gewichtete Mischung) → rerank (Cross‑Encoder/ColBERT) → packaging (eine der Strategien) → Generierung + Zitierung. Die hybride Suche und RRF sind robust gegenüber inkompatiblen Scores verschiedener Retriever; ein Cross-Encoder erhöht die Präzision der an die LLM übergebenen Eingaben und spart dadurch Tokens.[16][12][14][15]
Evaluierung und Ablationsstudien
Die Evaluierung erfolgt auf den Ebenen Retrieval, Packaging und Generierung:
- Retrieval: Recall@k, nDCG@k, MRR – Standardmetriken des Information Retrieval.[24]
- Faithfulness/Groundedness: Der Anteil der Aussagen, die durch Zitate gestützt werden; automatische Frameworks (RAGAS, TruLens) + manuelle Validierung der Zuordnung.[25][26][27]
- End‑to‑end QA: EM/F1/ROUGE, abhängig von der Aufgabe/dem Datensatz (NQ/HotpotQA usw.).[1]
- Effizienz: Latenz p50/p95, Anzahl der Tokens, $-Kosten; Vergleich von Packaging-Strategien und Kompressionsstufen nach dem Kriterium Qualität↔Kosten.
- Ablationsstudien: Deaktivierung von MMR/Deduplizierung/Kompression/Änderung der Reihenfolge, um den Beitrag jeder Komponente zu messen (Stand 2025-09-10 empfiehlt die Forschungspraxis im Bereich RAG, k, λ, Chunk-Größen und Token-Limits klar zu dokumentieren).[28]
Praktische Empfehlungen und Checkliste
- k und Diversifizierung: Beginnen Sie mit k=20–40 Kandidaten aus dem hybriden Retrieval; wenden Sie MMR mit λ≈0.5–0.8 an; bestrafen Sie Duplikate basierend auf URL/ID/Text-Hash streng.[11][16]
- Chunking: 200–400 Tokens mit 10–20 % Überlappung bei fester Chunk-Größe; für juristische und technische Dokumente ist oft das Sentence/Window-Schema hilfreicher.[4][7]
- Kompression: Verwenden Sie anfragebasierte extraktive Filterung und vorsichtige Abstraktion; passen Sie LLMLingua-ähnliche Methoden basierend auf der Faithfulness Ihrer Daten an (A/B-Validierung ist unerlässlich).[19][27]
- Reihenfolge: Wichtige/hoch bewertete Fragmente an den Anfang des Prompts stellen; nach Quellen/Themen gruppieren, IDs und Überschriften explizit kennzeichnen; den lost‑in‑the‑middle-Effekt berücksichtigen (die Wiederholung einer Schlüsselaussage am Anfang und Ende kann helfen).[3]
- Rerank: Wenn es das Budget erlaubt, fügen Sie vor dem Packaging einen Cross-Encoder/ColBERT für die Top-k (k≈50–200) hinzu – dies spart Generierungs-Tokens und erhöht die Genauigkeit.[13][15]
- Fallback-Strategien: (1) Mangel an Fakten → Anforderung zusätzlicher Quellen; (2) Überschreitung des Token-Limits → Umschalten von stuff auf refine oder Aktivierung der Kompression; (3) Geringe Konfidenz/Widersprüche → Verweigerung der Antwort mit einer expliziten Liste der fehlenden IDs (siehe Vorlage unten).
Pseudocode für die Packaging-Pipeline
# Eingabe: Anfrage q cands = retrieve(q, K_sparse, K_dense) # Suche mit BM25, DPR usw. cands = diversify_MMR(cands, lambda=0.7) # Diversifizierung (MMR) snips = compress(query=q, items=cands, mode="extractive|abstractive", budget=tokens) pkg = package(snips, strategy="stuff|map_reduce|refine|tree") resp = generate(prompt=build_prompt(q, pkg), citations=True) # LLM mit Zitaten
Skelett einer Prompt-Vorlage (Ausschnitt)
[BENUTZERANFRAGE]
{q}
[QUELLEN]
{# Jedes Fragment mit ID, Titel und Link #}
- [{id}] {title} — {url}
{content_snippet}
[ANFORDERUNGEN]
1) Verwende nur Fakten aus den Quellen und verweise auf die [ID].
2) Wenn die Daten nicht ausreichen, weise darauf hin und bitte um Klärung/zusätzliche Quellen.
3) Behalte die Antwortstruktur bei und gib eine Liste der verwendeten [IDs] an.
Einschränkungen und offene Fragen
- Halluzinationen und Aggregation bei Map-Reduce/Refine: Abstraktive Zusammenfassungen können neue Fakten einführen; klare Anweisungen zur Quellenangabe und Mechanismen zur Überprüfung von Zitaten sind entscheidend.[20][27]
- Detailverlust bei aggressiver oder hierarchischer Kompression; es ist wichtig, Rückverweise zur Originalquelle/Seite/Offset zu speichern.
- Domänenübertragbarkeit von Retrievern, Rerankern und Kompressoren; eine Anpassung/Feinabstimmung auf domänenspezifischen Korpora ist erforderlich.[28]
- Datenschutz/PII und Memorisierung durch LLMs: Bei der Generierung ohne striktes Grounding können private Informationen preisgegeben werden; setzen Sie Filter, private Speicher und eine Verweigerungsrichtlinie ein.[29][30]
- Trainierbare „Packer“, adaptive Anordnung/Layouts, RLHF/Feedback-Schleifen zur Verbesserung der Faithfulness, mehrsprachiger und extrem langer Kontext – dies sind aktive Forschungsbereiche.[28][3]
Weblinks
- LangChain: Summarization (stuff/map_reduce/refine). [29]
- LangChain: Text splitters. [30]
- LlamaIndex: Response Synthesizers (refine/tree). [31]
- LlamaIndex: Node Parsers / SentenceSplitter / SemanticSplitter. [32]
- Haystack: SentenceWindowRetriever. [33]
- Haystack: PreProcessors / DocumentSplitter. [34]
- Weaviate: Hybrid search. [35]
- Pinecone: Hybrid search. [36]
- Cohere: Rerank API. [37]
- RAGAS (repo/docs). [38] [39]
- TruLens (docs). [40]
Literatur
- Manning, C. D., Raghavan, P., Schütze, H. (2008). Introduction to Information Retrieval. Cambridge University Press. ISBN 978‑0521865715.
- Nenkova, A., McKeown, K. (2011). Automatic Summarization. FnT IR, 5(2–3), 103–233. DOI:10.1561/1500000015.
- Lewis, P., et al. (2020). Retrieval‑Augmented Generation for Knowledge‑Intensive NLP Tasks. NeurIPS. arXiv:2005.11401.
- Khattab, O., Zaharia, M. (2020). ColBERT. SIGIR’20. DOI:10.1145/3397271.3401075.
- Izacard, G., Grave, E. (2021). Fusion‑in‑Decoder. EACL. arXiv:2007.01282.
- Ji, Z., et al. (2023). Survey of Hallucination in NLG. ACM CS. DOI:10.1145/3571730.
- Gao, S., et al. (2024). RAG for LLM: A Survey. arXiv:2312.10997.
Einzelnachweise
- ↑ 1.0 1.1 1.2 Lewis, P., Perez, E., Piktus, A., Petroni, F., Karpukhin, V., et al. (2020). Retrieval‑Augmented Generation for Knowledge‑Intensive NLP Tasks. NeurIPS. arXiv:2005.11401. [1]
- ↑ 2.0 2.1 2.2 2.3 2.4 LangChain Docs. Summarization (stuff/map_reduce/refine/map_rerank). (abgerufen am 2025‑09‑10). [2]
- ↑ 3.0 3.1 3.2 3.3 3.4 Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F., Liang, P. (2024). Lost in the Middle: How Language Models Use Long Contexts. TACL. arXiv:2307.03172. [3]
- ↑ 4.0 4.1 LangChain Docs. Text splitters (RecursiveCharacter/TokenTextSplitter). (abgerufen am 2025‑09‑10). [4]
- ↑ LlamaIndex Docs. SentenceSplitter / TokenTextSplitter / SemanticSplitter. (abgerufen am 2025‑09‑10). [5] [6] [7]
- ↑ LlamaIndex Docs. SemanticSplitterNodeParser. (abgerufen am 2025‑09‑10). [8]
- ↑ 7.0 7.1 Haystack Docs. SentenceWindowRetriever. (abgerufen am 2025‑09‑10). [9]
- ↑ Karpukhin, V., Oguz, B., Min, S., Lewis, P., Wu, L., Edunov, S., Chen, D., Yih, W.‑T. (2020). Dense Passage Retrieval for Open‑Domain Question Answering. EMNLP. arXiv:2004.04906. [10]
- ↑ Haystack Docs. PreProcessors / DocumentSplitter. (abgerufen am 2025‑09‑10). [11] [12]
- ↑ Broder, A. Z. (1997). On the Resemblance and Containment of Documents. Compression and Complexity of Sequences. [13]
- ↑ 11.0 11.1 Carbonell, J., Goldstein, J. (1998). The Use of MMR, Diversity‑Based Reranking for Reordering Documents and Producing Summaries. SIGIR’98, pp. 335–336. DOI:10.1145/290941.291025.
- ↑ 12.0 12.1 Cormack, G. V., Clarke, C. L. A., Büttcher, S. (2009). Reciprocal Rank Fusion outperforms Condorcet and Individual Rank Learning Methods. SIGIR’09, pp. 758–759. DOI:10.1145/1571941.1572114. [14]
- ↑ 13.0 13.1 13.2 Nogueira, R., Cho, K. (2019). Passage Re‑ranking with BERT. arXiv:1901.04085. [15]
- ↑ 14.0 14.1 Cohere Docs. Rerank API overview. (abgerufen am 2025‑09‑10). [16]
- ↑ 15.0 15.1 15.2 Khattab, O., Zaharia, M. (2020). ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT. SIGIR’20, pp. 39–48. DOI:10.1145/3397271.3401075. arXiv:2004.12832.
- ↑ 16.0 16.1 16.2 Weaviate Docs. Hybrid search (BM25F + vector). (abgerufen am 2025‑09‑10). [17]
- ↑ Pinecone Docs. Hybrid search. (abgerufen am 2025‑09‑10). [18]
- ↑ Nenkova, A., McKeown, K. (2011). Automatic Summarization. Foundations and Trends in Information Retrieval, 5(2–3), 103–233. DOI:10.1561/1500000015.
- ↑ 19.0 19.1 Zhu, Y., Shao, Z., Li, M., et al. (2023). LLMLingua: Compressing Prompts for Accelerating LLM Inference. arXiv:2310.05736. [19]
- ↑ 20.0 20.1 Ji, Z., Lee, N., Frieske, R., et al. (2023). Survey of Hallucination in Natural Language Generation. ACM Computing Surveys, 55(12), Art.248. DOI:10.1145/3571730.
- ↑ 21.0 21.1 Izacard, G., Grave, E. (2021). Leveraging Passage Retrieval with Generative Models for Open‑Domain QA (Fusion‑in‑Decoder). EACL. arXiv:2007.01282. [20]
- ↑ 22.0 22.1 LlamaIndex Docs. Response Synthesizers: refine. (abgerufen am 2025‑09‑10). [21]
- ↑ 23.0 23.1 LlamaIndex Docs. Tree Summarize. (abgerufen am 2025‑09‑10). [22]
- ↑ Manning, C. D., Raghavan, P., Schütze, H. (2008). Introduction to Information Retrieval. Cambridge Univ. Press. (siehe Kapitel über nDCG/MRR). [23]
- ↑ Es, S., et al. (2023). RAGAS: Automated Evaluation of Retrieval‑Augmented Generation. arXiv:2309.15217. [24]
- ↑ TruLens Docs. Evaluating RAG (groundedness, relevance). (abgerufen am 2025‑09‑10). [25]
- ↑ 27.0 27.1 27.2 Rashkin, H., Nakov, P., et al. (2023). Measuring Attribution in Natural Language Generation. Computational Linguistics, 49(4), 1207–1261. DOI:10.1162/coli_a_00486.
- ↑ 28.0 28.1 28.2 Gao, S., et al. (2024). Retrieval‑Augmented Generation for Large Language Models: A Survey. arXiv:2312.10997. [26]
- ↑ Carlini, N., Tramèr, F., et al. (2021). Extracting Training Data from Large Language Models. USENIX Security. [27]
- ↑ Shokri, R., Stronati, M., Song, C., Shmatikov, V. (2017). Membership Inference Attacks Against ML Models. IEEE S&P. [28]