使用 Google Firestore 实现向量存储与查询的实战指南

技术背景介绍

Firestore 是 Google Cloud 提供的无服务器文档数据库,它具备强大的扩展能力,可以满足各种需求。结合 Firestore 的 Langchain 集成,我们可以为数据库应用程序构建出色的 AI 驱动体验。本文将演示如何使用 Firestore 来存储和查询向量。

核心原理解析

Firestore 提供了一种存储非结构化数据的便捷方式,其与 Langchain 的集成允许我们将向量存储到 Firestore 中,并提供高效的查询机制。这种结合可以用于处理需要快速检索相似数据的应用场景,例如推荐系统和自然语言处理任务。

代码实现演示

在接下来的示例中,我们将使用 Firestore 来存储简单的水果名称及其相对应的向量,并展示如何通过向量搜索来检索相似的文档。

首先,请确保已创建 Google Cloud 项目、启用 Firestore API 并创建 Firestore 数据库。然后安装必要的库:

%pip install --upgrade --quiet langchain-google-firestore langchain-google-vertexai

接着,设置 Google Cloud 项目 ID:

# 设置项目 ID
PROJECT_ID = "your-google-cloud-project-id"  # 替换为实际项目 ID
!gcloud config set project {PROJECT_ID}

进行身份认证:

from google.colab import auth
auth.authenticate_user()

初始化 FirestoreVectorStore 并存储向量:

from langchain_google_firestore import FirestoreVectorStore
from langchain_google_vertexai import VertexAIEmbeddings

# 配置嵌入模型
embedding = VertexAIEmbeddings(
    model_name="textembedding-gecko@latest",
    project=PROJECT_ID,
)

# 示例数据
ids = ["apple", "banana", "orange"]
fruits_texts = ['{"name": "apple"}', '{"name": "banana"}', '{"name": "orange"}']

# 创建向量存储
vector_store = FirestoreVectorStore(
    collection="fruits",
    embedding=embedding,
)

# 添加数据到向量存储
vector_store.add_texts(fruits_texts, ids=ids)

应用场景分析

向量存储的一个常见应用场景是相似性搜索。例如,在电商平台中,通过描述词语搜索相似商品,或在社交媒体上寻找相似主题的帖子。通过较快的向量检索能力,Firestore 可帮助构建高效的内容推荐系统。

实践建议

  1. 批量处理:尽可能批量添加数据,以减少 API 调用次数,提高效率。
  2. 异构数据管理:结合 Firestore 的多种数据类型支持,管理复杂的数据结构。
  3. 安全性:利用 Firestore 的访问控制功能,确保数据访问安全。

示例代码的更多功能

删除和更新向量非常简单,提供文档 ID 即可操作:

# 删除向量
vector_store.delete(ids)

# 更新向量
fruit_to_update = ['{"name": "apple","price": 12}']
vector_store.add_texts(fruit_to_update, ids=["apple"])

进行相似性搜索:

# 相似性搜索
results = vector_store.similarity_search("I like fuji apples", k=3)
print(results)

# 增强的相似性搜索
results = vector_store.max_marginal_relevance_search("fuji", 5)
print(results)

如果遇到问题欢迎在评论区交流。

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值