Prompt Engineering
Die Kunst und Technik, Anweisungen für KI-Sprachmodelle so zu formulieren, dass sie optimale und zielgerichtete Ergebnisse liefern.
Techniken, um Prompts zu verkürzen ohne wesentliche Informationen zu verlieren – für geringere Token-Kosten, niedrigere Latenz und bessere Nutzung des Kontextfensters.
Jedes Token kostet Geld und Zeit. Bei RAG-Systemen werden oft mehrere Dokumente in den Prompt eingefügt – viele davon enthalten redundante oder irrelevante Informationen. Prompt Compression entfernt diese überflüssigen Teile, bevor der Prompt an das LLM gesendet wird.
Das Ziel: Gleiche oder bessere Antwortqualität bei deutlich weniger Tokens.
Kompressionsstrategien:
| Methode | Ansatz | Kompressionsrate |
|---|---|---|
| Extraktion | Wichtigste Sätze behalten | 2–5x |
| Zusammenfassung | LLM fasst zusammen | 5–20x |
| LLMLingua | Token-Level-Kompression | 2–6x |
| Selective Context | Self-Information-basiert | 2–4x |
from llmlingua import PromptCompressor
compressor = PromptCompressor(
model_name="microsoft/llmlingua-2-bert-base-multilingual-cased-meetingbank",
use_llmlingua2=True,
)
# Langer RAG-Kontext
context = """
[Dokument 1] ... sehr langer Text ...
[Dokument 2] ... weiterer langer Text ...
[Dokument 3] ... noch mehr Text ...
"""
compressed = compressor.compress_prompt(
context,
rate=0.5, # 50% der Tokens behalten
force_tokens=['\n'], # Zeilenumbrüche immer behalten
)
print(f"Original: {compressed['origin_tokens']} Tokens")
print(f"Komprimiert: {compressed['compressed_tokens']} Tokens")
print(f"Einsparung: {compressed['ratio']:.1f}x")
async def rag_with_compression(query: str) -> str:
# 1. Dokumente abrufen
docs = await vector_db.search(query, top_k=10)
context = "\n\n".join([d.text for d in docs])
# 2. Kontext komprimieren (vor LLM-Call)
compressed = compressor.compress_prompt(
context,
question=query, # Query-aware Kompression
rate=0.4,
)
# 3. LLM mit komprimiertem Kontext aufrufen
response = await llm.generate(
f"Kontext:\n{compressed['compressed_prompt']}\n\nFrage: {query}"
)
return response Prompt Compression ist wie das Packen eines Koffers für eine Reise: Du nimmst nicht alles mit, was du besitzt, sondern nur das Wesentliche. Ein erfahrener Packer (Kompressionsalgorithmus) weiß, was wirklich gebraucht wird und was weggelassen werden kann – ohne dass die Reise schlechter wird.
Reduziert Token-Anzahl im Prompt – direkte Kostenersparnis bei API-Calls
Besonders relevant bei RAG: Abgerufene Dokumente oft redundant oder irrelevant
Methoden: Extraktion, Zusammenfassung, Selective Context, LLMLingua
RAG-Optimierung
Abgerufene Dokumente vor dem Einfügen in den Prompt komprimieren – weniger Tokens, gleiche Qualität
Long-Context-Verarbeitung
Lange Dokumente auf das Wesentliche reduzieren, bevor sie ins Kontextfenster passen müssen
Kostenreduktion
Bei hohem API-Volumen können 50% weniger Input-Tokens die Kosten halbieren
Es gibt immer einen Trade-off zwischen Kompressionsrate und Informationserhalt. Gute Algorithmen wie LLMLingua erreichen 2-5x Kompression mit minimalem Qualitätsverlust. Für kritische Anwendungen sollte man die Kompressionsrate begrenzen und die Ausgabequalität evaluieren.
Besonders bei RAG-Systemen mit langen abgerufenen Dokumenten, bei hohem API-Volumen (Kostenersparnis), wenn das Kontextfenster ausgeschöpft ist, oder wenn Latenz kritisch ist. Für kurze Prompts ist der Overhead des Kompressionsschritts oft nicht gerechtfertigt.
Chunking teilt Dokumente in kleinere Teile auf, bevor sie in die Vektordatenbank gespeichert werden – ein Preprocessing-Schritt. Prompt Compression reduziert den bereits ausgewählten Text kurz vor dem LLM-Call – ein Inference-Schritt. Beide ergänzen sich in RAG-Pipelines.