使用Google Firestore与Langchain构建AI驱动的应用

50 阅读3分钟

引言

Firestore是一种无服务器的文档型数据库,可以灵活扩展以满足各种需求。结合Langchain的集成,Firestore可用于构建AI驱动的体验。本文将介绍如何利用Firestore存储和查询向量,特别是通过FirestoreVectorStore类实现这一目标。

主要内容

前期准备

开始之前,请确保完成以下步骤:

  1. 创建Google Cloud项目。
  2. 启用Firestore API。
  3. 创建Firestore数据库。
  4. 确认可以在运行环境中访问数据库。

库安装

我们将使用langchain-google-firestore包进行集成,同时安装langchain-google-vertexai以使用Google生成式AI嵌入。

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

设置Google Cloud项目

请设置您的Google Cloud项目以利用相关资源。

PROJECT_ID = "your-google-cloud-project-id"  # @param {type:"string"}

# 设置项目ID
!gcloud config set project {PROJECT_ID}

认证

如果使用Colab,可以执行以下代码进行认证:

from google.colab import auth
auth.authenticate_user()

基本用法

初始化FirestoreVectorStore

FirestoreVectorStore允许您在Firestore数据库中存储新的向量。您可以用它来存储来自任何模型的嵌入,包括Google生成式AI。

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)

删除与更新向量

你可以通过delete方法删除存储中的向量:

vector_store.delete(ids)

也可以通过add_texts方法更新已有向量:

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

相似性查询

使用FirestoreVectorStore进行相似性搜索:

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

代码示例

以下是一个完整的示例代码,展示如何使用Firestore与Langchain进行向量存储和查询:

from langchain_google_firestore import FirestoreVectorStore
from langchain_google_vertexai import VertexAIEmbeddings
from google.cloud.firestore_v1.base_query import FieldFilter

embedding = VertexAIEmbeddings(
    model_name="textembedding-gecko@latest",
    project=PROJECT_ID,
)

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

# 使用API代理服务提高访问稳定性
vector_store = FirestoreVectorStore(
    collection="fruits",
    embedding=embedding,
)

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

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

常见问题和解决方案

网络限制

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

认证问题

确保在Google Cloud中正确设置了IAM权限,并在需要时通过代码进行用户身份验证。

总结和进一步学习资源

通过本文,我们了解了如何使用Google Firestore与Langchain进行AI驱动的应用构建,并介绍了基本用法、查询和更新技巧。

进一步学习资源:

参考资料

  • Google Firestore API 文档
  • Langchain Google Firestore 包文档

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

---END---