探索Google Memorystore for Redis:高效构建AI驱动的应用缓存
引言
在当今的AI驱动应用程序开发中,快速的数据访问至关重要。Google Memorystore for Redis提供了一种高效的方法来构建应用缓存,特别是在处理需要低延迟数据访问的场景中。本文将介绍如何使用Google Memorystore for Redis,通过Langchain库进行向量嵌入存储和检索。
主要内容
1. 基础准备
在开始之前,我们需要完成以下准备工作:
- 创建一个Google Cloud项目
- 启用Memorystore for Redis API
- 创建一个Memorystore for Redis实例,并确保版本大于或等于7.2
2. 安装必要的库
首先,我们需要安装与Google Memorystore for Redis以及Langchain库相关的包。
%pip install --upgrade --quiet langchain-google-memorystore-redis langchain
3. 设置Google Cloud项目
使用以下命令设置您的Google Cloud项目:
PROJECT_ID = "my-project-id" # @param {type:"string"}
!gcloud config set project {PROJECT_ID}
4. 进行身份验证
在Google Cloud中进行身份验证:
from google.colab import auth
auth.authenticate_user()
5. 初始化向量索引
连接到Memorystore for Redis实例并初始化向量存储索引:
import redis
from langchain_google_memorystore_redis import (
DistanceStrategy,
HNSWConfig,
RedisVectorStore,
)
# 使用API代理服务提高访问稳定性
redis_client = redis.from_url("redis://127.0.0.1:6379")
# 配置HNSW索引
index_config = HNSWConfig(
name="my_vector_index", distance_strategy=DistanceStrategy.COSINE, vector_size=128
)
# 初始化/创建向量存储索引
RedisVectorStore.init_index(client=redis_client, index_config=index_config)
6. 准备文档
载入文本并进行切分,生成向量嵌入:
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
loader = TextLoader("./state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
7. 添加文档到向量存储
我们可以使用以下两种方法将文档添加到Redis向量存储中:
方法1:使用classmethod直接插入
from langchain_community.embeddings.fake import FakeEmbeddings
embeddings = FakeEmbeddings(size=128)
redis_client = redis.from_url("redis://127.0.0.1:6379") # 使用API代理服务提高访问稳定性
rvs = RedisVectorStore.from_documents(
docs, embedding=embeddings, client=redis_client, index_name="my_vector_index"
)
方法2:基于实例的插入
rvs = RedisVectorStore(
client=redis_client, index_name="my_vector_index", embeddings=embeddings
)
ids = rvs.add_texts(
texts=[d.page_content for d in docs], metadatas=[d.metadata for d in docs]
)
8. 执行相似性搜索
使用最近邻居(KNN)进行相似性搜索:
import pprint
query = "What did the president say about Ketanji Brown Jackson"
knn_results = rvs.similarity_search(query=query)
pprint.pprint(knn_results)
9. 清理
删除向量存储中的文档或索引:
# 删除文档
rvs.delete(ids)
# 删除向量索引
RedisVectorStore.drop_index(client=redis_client, index_name="my_vector_index")
常见问题和解决方案
Q1:如何提高API访问的稳定性?
由于某些地区的网络限制,开发者可以考虑使用API代理服务来提高访问稳定性。
Q2:Redis实例连接失败怎么办?
请确保实例URL和端口配置正确,并检查网络连接与Google Cloud项目的API权限。
总结和进一步学习资源
本文介绍了如何使用Google Memorystore for Redis来构建高效的应用缓存,并展示了如何通过Langchain进行向量嵌入存储和检索。如果你想了解更多信息,可以参考以下资源:
参考资料
- Google Cloud Memorystore for Redis 官方文档
- Langchain GitHub 仓库
- Vector Store Conceptual Guide
- Langchain Vector Store How-to Guides
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---