Redis缓存#
- class langchain_redis.cache.RedisCache(redis_url: str = 'redis://localhost:6379', ttl: int | None = None, prefix: str | None = 'redis', redis_client: Redis | None = None)[source]#
LangChain的Redis缓存实现。
该类为LangChain提供了一个基于Redis的缓存机制,允许存储和检索语言模型的响应。
- ttl#
缓存条目的生存时间,以秒为单位。 如果为None,则条目不会过期。
- Type:
可选[int]
- prefix#
存储在Redis中的所有键的前缀。
- Type:
可选[str]
- Parameters:
示例
from langchain_redis import RedisCache from langchain_core.globals import set_llm_cache # Create a Redis cache instance redis_cache = RedisCache(redis_url="redis://localhost:6379", ttl=3600) # Set it as the global LLM cache set_llm_cache(redis_cache) # Now, when you use an LLM, it will automatically use this cache
注意
此缓存实现使用 Redis 的 JSON 功能来存储结构化数据。
缓存键是使用提示和LLM字符串的MD5哈希创建的。
如果设置了TTL,缓存条目将在指定持续时间后自动过期。
前缀可用于命名空间缓存条目。
方法
__init__
([redis_url, ttl, prefix, redis_client])aclear
(**kwargs)异步清除缓存,可以接受额外的关键字参数。
alookup
(prompt, llm_string)基于提示和llm_string的异步查找。
aupdate
(prompt, llm_string, return_val)基于提示和llm_string异步更新缓存。
clear
(**kwargs)清除Redis缓存中与缓存前缀匹配的所有条目。
lookup
(prompt, llm_string)在Redis缓存中查找之前语言模型调用的结果。
update
(prompt, llm_string, return_val)使用给定提示和语言模型的新结果更新缓存。
- __init__(redis_url: str = 'redis://localhost:6379', ttl: int | None = None, prefix: str | None = 'redis', redis_client: Redis | None = None)[source]#
- Parameters:
redis_url (str)
ttl (int | None)
prefix (str | None)
redis_client (Redis | None)
- async aclear(**kwargs: Any) None #
异步清除缓存,可以接受额外的关键字参数。
- Parameters:
kwargs (任意)
- Return type:
无
- async alookup(prompt: str, llm_string: str) Sequence[Generation] | None #
基于提示和llm_string的异步查找。
缓存实现预计会从提示和llm_string的二元组生成一个键(例如,通过用分隔符连接它们)。
- Parameters:
prompt (str) – 提示的字符串表示。 在聊天模型的情况下,提示是将提示非平凡地序列化为语言模型。
llm_string (str) – LLM配置的字符串表示。 这用于捕获LLM的调用参数 (例如,模型名称、温度、停止标记、最大标记等)。 这些调用参数被序列化为字符串 表示。
- Returns:
在缓存未命中时,返回 None。在缓存命中时,返回缓存的值。 缓存的值是 Generations(或其子类)的列表。
- Return type:
序列[生成] | 无
- async aupdate(prompt: str, llm_string: str, return_val: Sequence[Generation]) None #
根据提示和llm_string异步更新缓存。
提示和llm_string用于生成缓存的键。 该键应与查找方法的键匹配。
- Parameters:
prompt (str) – 提示的字符串表示。 在聊天模型的情况下,提示是将提示非平凡地序列化为语言模型。
llm_string (str) – LLM配置的字符串表示。 这用于捕获LLM的调用参数 (例如,模型名称、温度、停止标记、最大标记等)。 这些调用参数被序列化为字符串 表示。
return_val (Sequence[Generation]) – 要缓存的值。该值是一个Generations(或其子类)的列表。
- Return type:
无
- clear(**kwargs: Any) None [source]#
清除Redis缓存中与缓存前缀匹配的所有条目。
此方法删除所有以指定前缀开头的缓存条目。
- Parameters:
**kwargs (Any) – 额外的关键字参数。目前未使用,但包含用于潜在的未来扩展。
- Returns:
无
- Return type:
无
示例
cache = RedisCache( redis_url="redis://localhost:6379", prefix="my_cache" ) # Add some entries to the cache cache.update("prompt1", "llm1", [Generation(text="Result 1")]) cache.update("prompt2", "llm2", [Generation(text="Result 2")]) # Clear all entries cache.clear() # After this, all entries with keys starting with "my_cache:" # will be removed
注意
此方法使用 Redis SCAN 来遍历键,这对于大型数据集是安全的。
它以100个键为一批进行删除,以优化性能。
只有以指定前缀开头的键(默认为“redis:”)才会被删除。
此操作不可逆。在调用此方法之前,请确保您想要清除所有缓存的数据。
如果没有键匹配前缀,该方法将无任何错误地完成。
- lookup(prompt: str, llm_string: str) Sequence[Generation] | None [source]#
在Redis缓存中查找之前语言模型调用的结果。
此方法检查给定的提示和语言模型组合是否有缓存结果。
- Parameters:
prompt (str) – 用于查找缓存结果的输入提示。
llm_string (str) – 语言模型及其参数的字符串表示。
- Returns:
- 如果找到缓存结果,则返回缓存结果,否则返回 None
不在缓存中。
结果通常是一个包含单个 Generation 对象的列表。
- Return type:
可选[RETURN_VAL_TYPE]
示例
cache = RedisCache(redis_url="redis://localhost:6379") prompt = "What is the capital of France?" llm_string = "openai/gpt-3.5-turbo" result = cache.lookup(prompt, llm_string) if result: print("Cache hit:", result[0].text) else: print("Cache miss")
注意
该方法使用提示和llm_string的MD5哈希来创建缓存键。
缓存的值以JSON格式存储,并解析回Generation对象。
如果键存在但值为None或无法解析,则返回None。
此方法通常由LangChain内部调用,但也可以直接用于手动缓存交互。
- update(prompt: str, llm_string: str, return_val: Sequence[Generation]) None [source]#
使用给定提示和语言模型的新结果更新缓存。
此方法将新结果存储在Redis缓存中,用于指定的提示和语言模型组合。
- Parameters:
prompt (str) – 与结果相关的输入提示。
llm_string (str) – 语言模型及其参数的字符串表示。
return_val (RETURN_VAL_TYPE) – 要缓存的结果,通常是一个包含单个Generation对象的列表。
- Returns:
无
- Return type:
无
示例
from langchain_core.outputs import Generation cache = RedisCache(redis_url="redis://localhost:6379", ttl=3600) prompt = "What is the capital of France?" llm_string = "openai/gpt-3.5-turbo" result = [Generation(text="The capital of France is Paris.")] cache.update(prompt, llm_string, result)
注意
该方法使用提示和llm_string的MD5哈希来创建缓存键。
结果以JSON格式存储在Redis中。
如果在初始化缓存时指定了TTL(生存时间),它将应用于此条目。
此方法通常由LangChain在语言模型生成响应后内部调用,但也可以直接用于手动缓存更新。
如果缓存中已经存在此提示和llm_string的条目,它将被覆盖。
使用 RedisCache 的示例