解锁Google Firestore的潜力:使用Firestore VectorStore实现AI驱动的数据库应用

73 阅读2分钟

解锁Google Firestore的潜力:使用Firestore VectorStore实现AI驱动的数据库应用

引言

Google Firestore 是一种无服务器文档导向数据库,能够根据需求进行扩展。随着AI技术的快速发展,将你的数据库应用扩展到AI驱动的体验变得尤为重要。本文将介绍如何利用Firestore的Langchain集成,通过Firestore VectorStore类来存储向量和进行查询。

主要内容

1. 准备工作

在开始之前,确保您已完成以下步骤:

  • 创建一个Google Cloud项目
  • 启用Firestore API
  • 创建一个Firestore数据库

一旦确认在Notebook的运行环境中可以访问数据库,填写如下值并运行。

COLLECTION_NAME = "test"  # @param {type:"string"}

2. 安装必要的库

Firestore 与Langchain的集成位于单独的langchain-google-firestore包中,因此需要安装它。同时,我们也需要安装langchain-google-genai以使用Google生成AI的嵌入。

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

3. 设置Google Cloud项目

设置Google Cloud项目,以便在本笔记本中使用Google Cloud资源。

PROJECT_ID = "your-project-id"  # @param {type:"string"}
!gcloud config set project {PROJECT_ID}

4. 身份验证

使用以下代码进行身份验证:

from google.colab import auth
auth.authenticate_user()

代码示例

下面的代码示例展示了如何使用FirestoreVectorStore存储和查询向量。这些示例旨在帮助您理解如何在Firestore中存储和管理向量数据。

from langchain_google_firestore import FirestoreVectorStore
from langchain_google_vertexai import VertexAIEmbeddings

# 使用API代理服务提高访问稳定性
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)

常见问题和解决方案

1. 如何删除向量?

您可以使用delete方法通过文档ID删除数据库中的向量。

vector_store.delete(ids)

2. 如何更新向量?

使用add方法,通过提供文档ID和新向量来更新向量。

fruit_to_update = ['{"name": "apple","price": 12}']
apple_id = "apple"
vector_store.add_texts(fruit_to_update, ids=[apple_id])

3. 如何进行相似性搜索?

您可以使用similarity_search进行相似性搜索。

vector_store.similarity_search("I like fuji apples", k=3)

4. 网络限制问题

由于某些地区的网络限制,开发者可以考虑使用API代理服务来提升访问稳定性。

总结和进一步学习资源

通过Firestore VectorStore,您可以轻松地将Firestore数据库扩展为支持AI的应用。我们探讨了如何存储和管理向量数据,并进行了相似性搜索。

进一步学习资源

参考资料

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

---END---