Semantic Caching
Semantisches Caching gibt eine gespeicherte LLM-Antwort zurück, wenn eine neue Anfrage dasselbe bedeutet wie eine frühere. Dabei werden Embeddings abgeglichen, Modellaufrufe übersprungen und Kosten gesenkt.
Semantisches Caching speichert Antworten eines Sprachmodells (LLM) oder eines anderen generativen Modells und verwendet sie erneut für neue Anfragen, die dasselbe bedeuten wie eine frühere Anfrage, selbst wenn sie anders formuliert sind. Der Cache wandelt jeden Prompt in ein Embedding um, findet den ähnlichsten gespeicherten Prompt und gibt dessen gespeicherte Antwort zurück, wenn die Ähnlichkeit einen Schwellenwert überschreitet. Bei einem Treffer entfällt der Modellaufruf vollständig. Dadurch sinkt die Latenz auf wenige Millisekunden, und die Anfrage verbraucht keine Token. Da der Abgleich auf der Bedeutung beruht, nutzen „Ich habe mein Passwort vergessen“ und „Wie kann ich mein Passwort zurücksetzen?“ dieselbe gespeicherte Antwort. Ein Cache mit exaktem Abgleich, der auf dem Prompttext basiert, müsste sie hingegen zweimal speichern. Zilliz veröffentlichte 2023 die quelloffene Bibliothek GPTCache für dieses Verfahren. Vektordatenbanken und API-Gateways bieten es inzwischen als integrierte Funktion an.
So funktioniert ein semantischer Cache#
Ein Satz-Embedding-Modell codiert den eingehenden Prompt, und eine Vektorsuche vergleicht ihn mit den Embeddings zuvor beantworteter Prompts, meist anhand der Kosinusähnlichkeit. Kleine Caches lassen sich im Arbeitsspeicher unterbringen, während große Caches in einer Vektordatenbank mit einem Index für ungefähre nächste Nachbarn liegen. Bei einem Cache-Fehltreffer generiert das Modell eine neue Antwort. Anschließend werden das neue Prompt-Embedding und die Antwort gemeinsam gespeichert, in der Regel mit einer Ablaufzeit.
Der Cache-Schlüssel muss alle übrigen Faktoren berücksichtigen, die die richtige Antwort beeinflussen. Antworten, die mit einem anderen System-Prompt, einer anderen Modellversion, einer anderen Berechtigungsstufe des Nutzers oder einer anderen Menge abgerufener Dokumente generiert wurden, werden in getrennten Bereichen gespeichert. So wird die zwischengespeicherte Antwort eines Kunden niemals einem anderen Kunden ausgegeben. Auch bei der Aktualität ist Sorgfalt nötig: Ändert sich ein Preis, eine Richtlinie oder ein Quelldokument, passen Einträge auf Basis der alten Version weiterhin zu neuen Prompts. Daher erhält jeder Eintrag eine Gültigkeitsdauer, und der betroffene Bereich wird gelöscht, wenn sich seine Quelldaten ändern.
Den Ähnlichkeitsschwellenwert auswählen#
Der Schwellenwert bestimmt, wie stark sich zwei Prompts unterscheiden dürfen, um noch dieselbe Antwort zu verwenden. Dieses Beispiel verwendet das Modell all-MiniLM-L6-v2 von Sentence Transformers als Encoder für einen Cache mit drei Einträgen:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("all-MiniLM-L6-v2")
# Earlier prompts whose answers are already stored in the cache
cached = ["How do I reset my password?", "What are your opening hours?", "How do I cancel my subscription?"]
cached_embeddings = model.encode(cached)
# Each new prompt reuses the closest cached answer if it clears the threshold
queries = ["I forgot my password, how can I change it?", "When does the store open?", "How do I cancel my order?"]
for query in queries:
query_embedding = model.encode(query)
scores = model.similarity(query_embedding, cached_embeddings)[0]
best = scores.argmax().item()
status = "hit" if scores[best] >= 0.7 else "miss"
print(f"{query} -> {cached[best]} ({scores[best]:.2f}, {status})")Die Umformulierung zur Passwortfrage erreicht 0.89 und ist ein korrekter Treffer. Die Umformulierung zu den Öffnungszeiten erreicht nur 0.61 und führt zu keinem Treffer. „Wie kann ich meine Bestellung stornieren?“ erreicht gegenüber „Wie kann ich mein Abonnement kündigen?“ den Wert 0.71 und würde die falsche Anleitung zurückgeben. Die Einbettungsähnlichkeit misst gemeinsame Formulierungen und Themen. Daher trennt kein einzelner Schwellenwert diese drei Fälle. Produktiv eingesetzte Caches verringern das Problem, indem sie den Encoder anhand von Fine-Tuning mit Umformulierungs-Paaren aus dem eigenen Anfrageverkehr anpassen, Schwellenwerte je Kategorie festlegen oder jeden möglichen Treffer an einen Reranker weitergeben, der die beiden Prompts gemeinsam bewertet, bevor die zwischengespeicherte Antwort ausgegeben wird.
Wo semantisches Caching zum Einsatz kommt#
Semantisches Caching lohnt sich dort, wo viele Nutzer dieselben Fragen stellen und sich die Antworten nur langsam ändern: bei Support-Chatbots, internen Helpdesks und Assistenten mit Retrieval-Augmented Generation (RAG), die auf stabiler Dokumentation basieren. Bei personalisierten, zeitkritischen oder kreativen Anfragen bringt es wenig, da eine wiederverwendete Antwort falsch oder redundant sein kann.
Zwei weitere Caches bei der Bereitstellung von LLMs arbeiten auf anderen Ebenen:
- Prompt-Caching: Der Modellserver speichert die berechneten Zustände eines exakt wiederholten Prompt-Präfixes. Dadurch verkürzt sich die Vorverarbeitung, während das Modell weiterhin eine neue Antwort generiert.
- KV-Cache: Schlüssel und Werte früherer Token werden während einer einzelnen Generierung gespeichert, sodass sie für jedes neue Token nicht erneut berechnet werden müssen.
Die semantische Suche verwendet denselben Einbettungsabruf, um Dokumente zu einer Anfrage zu finden. Ein semantischer Cache nutzt ihn, um fertige Antworten abzurufen, häufig innerhalb eines KI-Gateways zwischen Anwendungen und Modellanbietern.
Auch Bilder können auf dieselbe Weise als Cache-Schlüssel dienen. embed() in Ultralytics YOLO liefert für jedes Bild einen Merkmalsvektor. Ein für die Bildklassifizierung trainiertes YOLO26-Modell kann daher den Suchschlüssel bereitstellen, mit dem nahezu identische Kamerabilder die frühere Beschreibung eines Vision-Language-Modells wiederverwenden.










