GPTCache, LangChain, Forte alleanza
Introduzione a GPTCache
ChatGPT e altri modelli linguistici di grandi dimensioni (LLM) hanno un'incredibile versatilità che può essere utilizzata per un'ampia gamma di sviluppo di applicazioni. Tuttavia, con l'aumentare della popolarità delle applicazioni sviluppate con gli LLM e la crescita dei livelli di traffico, il costo associato alle chiamate API degli LLM può diventare proibitivo. Inoltre, i servizi LLM possono mostrare tempi di risposta lenti quando gestiscono grandi volumi di richieste.
Per affrontare questa sfida, abbiamo creato il progetto GPTCache, dedicato alla creazione di una cache semantica per archiviare le risposte degli LLM.
Introduzione a LangChain
I modelli linguistici di grandi dimensioni (LLM) stanno diventando una tecnologia trasformativa che consente agli sviluppatori di creare applicazioni che in precedenza erano impossibili. Tuttavia, affidarsi esclusivamente a un singolo LLM spesso rende difficile creare un'applicazione davvero potente. Il vero potenziale risiede nel combinarli con altre fonti computazionali o di conoscenza. Pertanto, la libreria LangChain mira ad assistere nello sviluppo di questi tipi di applicazioni.
Stato attuale della cache di LangChain
Prima dell'integrazione di GPTCache, la cache di LangChain era basata sulla corrispondenza di stringhe. Con questo approccio di corrispondenza di stringhe, la richiesta successiva può recuperare i dati corrispondenti dalla cache quando due richieste hanno stringhe identiche. L'implementazione include Memory Cache, SQLite Cache e Redis Cache.
L'utilizzo è approssimativamente il seguente:
import langchain
from langchain.cache import InMemoryCache
langchain.llm_cache = InMemoryCache()
llm = OpenAI(model_name="text-davinci-002", n=2, best_of=2)
// CPU times: user 14.2 ms, sys: 4.9 ms, total: 19.1 ms
// Wall time: 1.1 s
llm("Tell me a joke")
// CPU times: user 162 µs, sys: 7 µs, total: 169 µs
// Wall time: 175 µs
llm("Tell me a joke")
Analisi della cache di LangChain
Dal punto di vista del runtime, è chiaro che se una richiesta raggiunge la cache, ridurrà significativamente il tempo di risposta. Allo stesso tempo, il costo attuale dell'utilizzo degli LLM è relativamente elevato. L'uso di servizi online come OpenAI e Cohere comporta generalmente addebiti tramite token o la distribuzione autonoma del modello LLM corrispondente, con il tempo di inferenza una tantum che dipende dal numero di risorse informatiche, inclusi CPU, memoria, GPU, ecc. Allo stesso tempo, se più richieste vengono elaborate contemporaneamente, vi sono requisiti più elevati per le risorse di calcolo. Se le richieste raggiungono la cache numerose volte, può ridurre la pressione sulle risorse informatiche e destinare più risorse di calcolo ad altre attività.
La condizione affinché LangChain raggiunga la cache è che due domande debbano essere identiche. Sfortunatamente, nell'uso effettivo è ancora difficile raggiungere la cache, e c'è molto margine di miglioramento nel tasso di utilizzo della cache.
Integrazione di GPTCache
L'integrazione di GPTCache migliorerà significativamente la funzionalità del modulo cache di LangChain, aumenterà il tasso di hit della cache e quindi ridurrà i costi di utilizzo degli LLM e i tempi di risposta. Questo perché GPTCache esegue prima operazioni di embedding sull'input per ottenere un vettore e poi conduce una ricerca di approssimazione vettoriale nell'archiviazione della cache. Dopo aver ricevuto i risultati della ricerca, esegue una valutazione della similarità e restituisce il risultato quando viene raggiunta la soglia impostata. Regolare la soglia può modificare l'accuratezza dei suoi risultati di ricerca fuzzy.
Un esempio di utilizzo di GPTCache per la ricerca di similarità in LangChain:
from gptcache import Cache
from gptcache.adapter.api import init_similar_cache
from langchain.cache import GPTCache
import hashlib
def get_hashed_name(name):
return hashlib.sha256(name.encode()).hexdigest()
def init_gptcache(cache_obj: Cache, llm: str):
hashed_llm = get_hashed_name(llm)
init_similar_cache(cache_obj=cache_obj, data_dir=f"similar_cache_{hashed_llm}")
langchain.llm_cache = GPTCache(init_gptcache)
# La prima volta, non è ancora nella cache, quindi dovrebbe richiedere più tempo
# Tempi CPU: user 1.42 s, sys: 279 ms, totale: 1.7 s
# Tempo effettivo: 8.44 s
llm("Tell me a joke")
# Questa è una corrispondenza esatta, quindi la trova nella cache
# Tempi CPU: user 866 ms, sys: 20 ms, totale: 886 ms
# Tempo effettivo: 226 ms
llm("Tell me a joke")
# Questa non è una corrispondenza esatta, ma semanticamente rientra nella distanza, quindi viene trovata!
# Tempi CPU: user 853 ms, sys: 14.8 ms, totale: 868 ms
# Tempo effettivo: 224 ms
llm("Tell me joke")
Continuiamo a sviluppare le funzionalità di GPT-Cache e, se hai l'occasione di provarlo, facci sapere cosa ne pensi. Abbiamo anche diverse ottime risorse da consultare!
Riferimenti:
Continua a leggere

Zilliz Cloud Audit Logs Goes GA: Security, Compliance, and Transparency at Scale
Zilliz Cloud Audit Logs are now GA, giving enterprises real-time visibility, compliance-ready trails, and stronger security across AWS, GCP, and Azure.

Zilliz Cloud Update: Smarter Autoscaling for Cost Savings, Stronger Compliance with Audit Logs, and More
What's new in Zilliz Cloud? Smarter autoscaling with scale-down, audit logs GA, enhanced SSO, and Milvus 2.6 in Private Preview.

1 Table = 1000 Words? Foundation Models for Tabular Data
TableGPT2 automates tabular data insights, overcoming schema variability, while Milvus accelerates vector search for efficient, scalable decision-making.



