探索Google Memorystore for Redis:高效构建AI驱动的应用缓存

66 阅读3分钟

探索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进行向量嵌入存储和检索。如果你想了解更多信息,可以参考以下资源:

参考资料

  1. Google Cloud Memorystore for Redis 官方文档
  2. Langchain GitHub 仓库
  3. Vector Store Conceptual Guide
  4. Langchain Vector Store How-to Guides

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---