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哨兵的高可用性设置。
Redis 单机连接 URL
对于独立的Redis
服务器,可以使用官方redis连接URL格式,如python redis模块中的"from_url()"方法所述 Redis.from_url
示例:redis_url = "redis://:secret-pass@localhost:6379/0"
Redis Sentinel 连接 URL
对于Redis哨兵设置,连接方案是"redis+sentinel"。 这是一个非官方的扩展,用于官方IANA注册的协议方案,只要没有可用的哨兵连接URL。
示例:redis_url = "redis+sentinel://:secret-pass@sentinel-host:26379/mymaster/0"
格式为 redis+sentinel://[[username]:[password]]@[host-or-ip]:[port]/[service-name]/[db-number]
如果未明确设置,默认值为 "service-name = mymaster" 和 "db-number = 0"。
service-name 是 Sentinel 中配置的 Redis 服务器监控组名称。
当前的URL格式限制连接字符串只能使用一个哨兵主机(不能提供列表),并且Redis服务器和哨兵必须设置相同的密码(如果使用)。
Redis集群连接URL
目前不支持所有需要“redis_url”参数的方法使用Redis集群。
使用Redis集群的唯一方法是使用接受预配置的Redis客户端的LangChain类,例如RedisCache
(示例如下)。
缓存
缓存包装器允许将Redis用作LLM提示和响应的远程、低延迟、内存缓存。
标准缓存
标准缓存是Redis在生产环境中的主要用例,适用于全球的开源和企业用户。
from langchain.cache import RedisCache
要将此缓存与您的LLMs一起使用:
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
要将此缓存与您的LLMs一起使用:
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转变为用于语义搜索或LLM内容检索的低延迟向量数据库。
from langchain_community.vectorstores import Redis
有关Redis向量存储包装器的更详细演练,请参阅此笔记本。
检索器
Redis向量存储检索器包装器将向量存储类泛化以执行低延迟文档检索。要创建检索器,只需在基础向量存储类上调用.as_retriever()
。
内存
Redis 可以用于持久化 LLM 对话。
向量存储检索器内存
有关VectorStoreRetrieverMemory
包装器的更详细演练,请参阅此笔记本。
聊天消息历史记忆
有关使用Redis缓存对话消息历史的详细示例,请参阅此笔记本。