Un cache clasic se potrivește doar pe text identic. Un cache semantic transformă întrebarea în embedding, caută cea mai apropiată întrebare salvată și, dacă distanța este sub un prag, întoarce răspunsul salvat fără să mai apeleze modelul. Câștigul (cost, latență) depinde de cât de des se repetă întrebările în aplicația ta.
RedisVL (biblioteca Python Redis pentru vectori) are clasa SemanticCache: check() caută, store() salvează, distance_threshold este pragul de distanță cosinus (0–2 în Redis, valoare mai mică = potrivire mai strictă), ttl face intrările să expire, iar filterable_fields permite separarea pe utilizator. LiteLLM Proxy are și el cache semantic, cu tipurile redis-semantic, valkey-semantic și qdrant-semantic.
GPTCache (Zilliz) a fost una dintre primele biblioteci de acest tip. Ultima versiune publicată pe PyPI este 0.1.44 (august 2024), iar adaptorul OpenAI din README folosește API-ul vechi openai.ChatCompletion, anterior SDK-ului OpenAI 1.x. Pentru proiecte noi, verifică întâi dacă se potrivește cu versiunile tale de SDK.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
distance_threshold |
Pragul de distanță (nu de similaritate). La RedisVL valoarea implicită din exemplu este 0,1; set_threshold() îl schimbă ulterior. |
ttl |
Durata de viață a intrărilor. În RedisVL, un check() reușit reîmprospătează TTL-ul intrărilor găsite. |
filterable_fields |
Câmpuri de filtrare (de exemplu user_id de tip tag), folosite la store(..., filters=...) și check(..., filter_expression=...). |
vectorizer |
Modelul de embedding folosit pentru întrebări. |
drop() / clear() |
Șterg intrări individuale sau tot cache-ul. |
Exemple practice și scenarii reale
Exemplul 1: Cache separat pe utilizator (RedisVL)
from redisvl.extensions.cache.llm import SemanticCache
from redisvl.query.filter import Tag
cache = SemanticCache(
name="cache_privat",
filterable_fields=[{"name": "user_id", "type": "tag"}],
)
cache.store(prompt="Ce telefon am în cont?", response="0722...",
filters={"user_id": "abc"})
hit = cache.check(prompt="Ce număr de telefon am în cont?",
filter_expression=Tag("user_id") == "abc")
Exemplul 2: Expirarea intrărilor
cache.set_ttl(3600) # o oră
cache.set_ttl() # fără expirare
Exemplul 3: Cache semantic în LiteLLM Proxy
Configurația completă (model de embedding, prag) este în pagina „Semantic caching” din documentația LiteLLM.
litellm_settings:
cache: true
cache_params:
type: redis-semantic
Greșeli frecvente și capcane
- Confunzi pragul de distanță cu pragul de similaritate. La RedisVL, un
distance_thresholdmai mare acceptă întrebări mai diferite și crește riscul de răspunsuri greșite. - Folosești cache semantic pentru întrebări care depind de timp (curs valutar, stoc) sau de utilizator (sold, comenzi) fără TTL și fără filtru pe utilizator.
- Nu măsori rata de potrivire. Fără ea nu știi dacă pragul este prea strict (puține potriviri) sau prea larg (răspunsuri nepotrivite).
Întrebări & Exemple practice:
Cache semantic pentru LLM: RedisVL, GPTCache și LiteLLMAi o întrebare despre Cache semantic pentru LLM: RedisVL, GPTCache și LiteLLM sau ai descoperit un truc, prompt sau fragment de cod util? Distribuie-l cu ceilalți membri ai comunității!
Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau resurse pentru această pagină. Dacă ai testat un prompt sau ai un snippet util, adaugă-l mai jos pentru comunitate.