模型即服務,尤其高并發低延遲場景下不能每次都調用LLM。響應時間長占用資源多,最後肯定需要LLM-Cache。Langchain也支援內建Cache,而且品類非常多。
1.InMemoryCache
記憶體性質,大資料緩存記憶體資源比較高
最簡單的memory:就是”硬“緩存更新删除
2.RedisCache
redis的memory:對prompt+llmstring做hash-md5
3.RedisSemanticCache
Redis的STS插件例如RedisSemantic語義檢索
4.SQLAlchemyCache
利用資料庫做Cache,SQLAlchemy支援的資料庫都可以考慮
5.SQLiteCache
測試實驗性質科研,你懂的
6.GPTCache
完整級别解決方案(涵蓋Embedding Model,Cache Storage,Vector Store,Cache Manager[LRU,LFU,FIFO],Similarity Evaluator等),就是那個向量資料庫Milvus營運商Zilliz推出解決方案
簡單使用樣例:
初始化實作
簡單舉例:
#cache選擇mysql
cache_base = CacheBase('mysql',sql_url='mysql+pymysql://root:[email protected]:3306/mysql')
#使用milvus作為vectordb
vector_base = VectorBase('milvus', host='127.0.0.1', port='19530', dimension=hf.dimension)
#data管理器
data_manager = get_data_manager(cache_base, vector_base)
cache.init(
pre_embedding_func=None,#沒有自定義函數可以為空
embedding_func=hf.to_embeddings,
data_manager=data_manager,
similarity_evaluation=SearchDistanceEvaluation(), ##相似性算法評估
)
7.MomentoCache:三方服務key收費,要錢的始終不能幹[捂臉]
介紹這麼多Cache,最後考慮成本開源安全高效可靠:建議還是采用Redis/RedisSemantic或者VectorDB做緩存,然後相似性比對檢索。也可以考慮GPTCache複雜度高且對竟對vectordb産品支援度有限主推自己産品[笑哭]。上述Cache方式繼承BaseCache實作lookup,update,clear抽象方法。