Redis
Redis (远程字典服务器) 是一个开源的内存存储, 用作分布式的内存键值数据库、缓存和消息代理,具有可选的持久性。 因为它将所有数据保存在内存中,并且由于其设计,
Redis
提供低延迟的读写, 使其特别适合需要缓存的用例。Redis 是最受欢迎的 NoSQL 数据库, 也是最受欢迎的数据库之一。
本页面介绍如何在 LangChain 中使用 Redis 生态系统。 它分为两个部分:安装和设置,然后是对特定 Redis 封装的引用。
安装和设置
安装 Python SDK:
pip install redis
要在本地运行Redis,您可以使用Docker:
docker run --name langchain-redis -d -p 6379:6379 redis redis-server --save 60 1 --loglevel warning
要停止容器:
docker stop langchain-redis
要再次启动它:
docker start langchain-redis
连接
我们需要一个redis URL连接字符串来连接到数据库,支持独立的Redis服务器 或具有复制和Redis Sentinel的高可用性设置。
Redis独立连接URL
对于独立的Redis
服务器,可以使用官方redis连接URL格式,如Python redis模块中所述
"from_url()"方法 Redis.from_url
示例:redis_url = "redis://:secret-pass@localhost:6379/0"
Redis Sentinel 连接 URL
对于 Redis Sentinel 设置 连接方案为 "redis+sentinel"。 这是一种非官方扩展,适用于官方 IANA 注册的协议方案,只要没有连接 URL。 对于可用的 Sentinel。
示例: redis_url = "redis+sentinel://:secret-pass@sentinel-host:26379/mymaster/0"
格式为 redis+sentinel://[[用户名]:[密码]]@[主机或IP]:[端口]/[服务名称]/[数据库编号]
如果未明确设置,默认值为 "服务名称 = mymaster" 和 "数据库编号 = 0"。
服务名称是配置在 Sentinel 中的 Redis 服务器监控组名称。
当前的 URL 格式将连接字符串限制为仅一个 Sentinel 主机(不能给出列表),并且 Redis 服务器和 Sentinel 必须设置相同的密码(如果使用)。
Redis 集群连接 URL
目前所有需要 "redis_url" 参数的方法不支持 Redis 集群。
使用 Redis 集群的唯一方法是使用接受预配置 Redis 客户端的 LangChain 类,如 RedisCache
(下面是示例)。
缓存
缓存包装器允许将 Redis 用作 LLM 提示和响应的远程、低延迟、内存缓存。
标准缓存
标准缓存是全球 开源 和 企业 用户在生产中使用的 Redis 的基础。
from langchain.cache import RedisCache
要将此缓存与您的 LLM 一起使用:
from langchain.globals import set_llm_cache
import redis
redis_client = redis.Redis.from_url(...)
set_llm_cache(RedisCache(redis_client))
语义缓存
语义缓存允许用户根据用户输入与先前缓存结果之间的语义相似性来检索缓存的提示词。在底层,它将Redis作为缓存和向量存储结合使用。
from langchain.cache import RedisSemanticCache
要将此缓存与您的大型语言模型一起使用:
from langchain.globals import set_llm_cache
import redis
# use any embedding provider...
from tests.integration_tests.vectorstores.fake_embeddings import FakeEmbeddings
redis_url = "redis://localhost:6379"
set_llm_cache(RedisSemanticCache(
embedding=FakeEmbeddings(),
redis_url=redis_url
))
向量存储
向量存储包装器将Redis转变为低延迟的向量数据库,用于语义搜索或大型语言模型内容检索。
from langchain_community.vectorstores import Redis
有关Redis向量存储包装器的更详细说明,请参见此笔记本。
检索器
Redis向量存储检索器包装器将向量存储类泛化以执行
低延迟文档检索。要创建检索器,只需
在基础向量存储类上调用.as_retriever()
。
内存
Redis 可以用于持久化大型语言模型对话。
向量存储检索器记忆
有关 VectorStoreRetrieverMemory
包装器的更详细说明,请参见 此笔记本。
聊天消息历史记忆
有关使用 Redis 缓存对话消息历史的详细示例,请参见 此笔记本。