引言
Firestore是一种无服务器的文档型数据库,可以灵活扩展以满足各种需求。结合Langchain的集成,Firestore可用于构建AI驱动的体验。本文将介绍如何利用Firestore存储和查询向量,特别是通过FirestoreVectorStore类实现这一目标。
主要内容
前期准备
开始之前,请确保完成以下步骤:
- 创建Google Cloud项目。
- 启用Firestore API。
- 创建Firestore数据库。
- 确认可以在运行环境中访问数据库。
库安装
我们将使用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---