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的缓存机制,允许存储和检索语言模型的响应。

redis#

Redis 客户端实例。

Type:

Redis

ttl#

缓存条目的生存时间,以秒为单位。 如果为None,则条目不会过期。

Type:

可选[int]

prefix#

存储在Redis中的所有键的前缀。

Type:

可选[str]

Parameters:
  • redis_url (str) – 要连接的Redis实例的URL。 默认为“redis://localhost:6379”。

  • ttl (可选[int]) – 缓存条目的生存时间,以秒为单位。 默认为 None(无过期时间)。

  • prefix (可选[str]) – 存储在Redis中的所有键的前缀。默认为“redis”。

  • redis (可选[Redis]) – 一个现有的 Redis 客户端实例。 如果提供了,redis_url 将被忽略。

  • redis_client (可选[Redis])

示例

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 的示例