技术背景介绍
Firestore 是 Google Cloud 提供的无服务器文档数据库,它具备强大的扩展能力,可以满足各种需求。结合 Firestore 的 Langchain 集成,我们可以为数据库应用程序构建出色的 AI 驱动体验。本文将演示如何使用 Firestore 来存储和查询向量。
核心原理解析
Firestore 提供了一种存储非结构化数据的便捷方式,其与 Langchain 的集成允许我们将向量存储到 Firestore 中,并提供高效的查询机制。这种结合可以用于处理需要快速检索相似数据的应用场景,例如推荐系统和自然语言处理任务。
代码实现演示
在接下来的示例中,我们将使用 Firestore 来存储简单的水果名称及其相对应的向量,并展示如何通过向量搜索来检索相似的文档。
首先,请确保已创建 Google Cloud 项目、启用 Firestore API 并创建 Firestore 数据库。然后安装必要的库:
%pip install --upgrade --quiet langchain-google-firestore langchain-google-vertexai
接着,设置 Google Cloud 项目 ID:
# 设置项目 ID
PROJECT_ID = "your-google-cloud-project-id" # 替换为实际项目 ID
!gcloud config set project {PROJECT_ID}
进行身份认证:
from google.colab import auth
auth.authenticate_user()
初始化 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)
应用场景分析
向量存储的一个常见应用场景是相似性搜索。例如,在电商平台中,通过描述词语搜索相似商品,或在社交媒体上寻找相似主题的帖子。通过较快的向量检索能力,Firestore 可帮助构建高效的内容推荐系统。
实践建议
- 批量处理:尽可能批量添加数据,以减少 API 调用次数,提高效率。
- 异构数据管理:结合 Firestore 的多种数据类型支持,管理复杂的数据结构。
- 安全性:利用 Firestore 的访问控制功能,确保数据访问安全。
示例代码的更多功能
删除和更新向量非常简单,提供文档 ID 即可操作:
# 删除向量
vector_store.delete(ids)
# 更新向量
fruit_to_update = ['{"name": "apple","price": 12}']
vector_store.add_texts(fruit_to_update, ids=["apple"])
进行相似性搜索:
# 相似性搜索
results = vector_store.similarity_search("I like fuji apples", k=3)
print(results)
# 增强的相似性搜索
results = vector_store.max_marginal_relevance_search("fuji", 5)
print(results)
如果遇到问题欢迎在评论区交流。
—END—