[Amazon MemoryDB 向量搜索与LangChain集成指南:一步步构建智能应用]

41 阅读3分钟

Amazon MemoryDB 向量搜索与LangChain集成指南

引言

Amazon MemoryDB 是一种兼容 Redis 的内存数据存储服务,提供了微秒级读取和单数字毫秒写入延迟。最近,MemoryDB 添加了向量搜索功能,为构建更智能的机器学习和生成式AI应用提供了支持。在这篇文章中,我们将讨论如何使用 MemoryDB 的向量搜索与 LangChain 集成,帮助开发者打造更智能的应用。

主要内容

什么是 MemoryDB?

MemoryDB 是 AWS 的一种内存数据库服务,完全兼容 Redis OSS。它为应用提供了快速的读写性能,并支持多可用区的数据持久化。MemoryDB 的向量搜索扩展了其功能,允许开发者在现有的数据基础上构建复杂的 AI 用例,如异常检测、文档检索和实时推荐。

MemoryDB 的向量搜索

向量搜索功能允许在 MemoryDB 中使用向量相似性检索,支持以下功能:

  1. 多字段索引(支持 Redis 哈希和 JSON)
  2. 向量相似性搜索(HNSW 或 FLAT 算法)
  3. 向量范围搜索
  4. 增量索引

设置环境

首先,我们需要安装 Redis 的 Python 客户端以及与 LangChain 的集成工具。

%pip install --upgrade --quiet redis langchain-aws

然后,使用 Redis URL 连接到 MemoryDB。你可以选择加密连接(rediss://)。

redis_url = "rediss://cluster_endpoint:6379/ssl=True ssl_cert_reqs=none" # 使用API代理服务提高访问稳定性

代码示例

接下来,我们演示如何使用 MemoryDB 进行向量搜索和数据操作。

初始化向量存储

from langchain_aws.vectorstores.inmemorydb import InMemoryVectorStore
from langchain_aws.embeddings import BedrockEmbeddings

embeddings = BedrockEmbeddings()

vds = InMemoryVectorStore.from_texts(
    embeddings,
    redis_url=redis_url,
)

print(vds.index_name)  # 输出:'users'

查询操作

内存向量存储提供多种查询方式:

# 相似性搜索
results = vds.similarity_search("foo")
print(results[0].page_content)

# 带有得分的相似性搜索
results = vds.similarity_search_with_score("foo", k=5)
for result in results:
    print(f"Content: {result[0].page_content} --- Score: {result[1]}")

添加新文档

新文档可以通过以下方式添加到存储中:

new_document = ["baz"]
new_metadata = [{"user": "sam", "age": 50, "job": "janitor", "credit_score": "high"}]
vds.add_texts(new_document, new_metadata)

使用 MemoryDB 作为检索器

MemoryDB 可以用作强大的信息检索器:

retriever = vds.as_retriever(search_type="similarity", search_kwargs={"k": 4})
docs = retriever.invoke("foo")
print(docs)

常见问题和解决方案

  • 网络限制问题:在某些地区,访问 MemoryDB 可能会受到网络限制。建议使用 API 代理服务提升连接的稳定性和速度。

  • 性能优化:对于大规模数据集,建议使用增量索引来减少性能损失。

总结和进一步学习资源

Amazon MemoryDB 的向量搜索功能为开发者提供了创建智能应用的新选择。通过与 LangChain 的集成,我们可以轻松实现高效的信息检索和智能推荐。

参考资料

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

---END---