[从零开始搭建AI驱动的应用:Google Firestore与Langchain整合指南]

72 阅读3分钟
# 从零开始搭建AI驱动的应用:Google Firestore与Langchain整合指南

## 引言
Google Firestore是一个无服务器的文档导向型数据库,非常适合需要动态扩展的应用。通过Firestore与Langchain的整合,我们可以轻松构建AI驱动的体验。本篇文章将深入探讨如何使用Firestore存储向量数据,并通过`FirestoreVectorStore`类进行查询。

## 主要内容

### 1. 环境准备
在开始之前,你需要:

- 创建一个Google Cloud项目
- 启用Firestore API
- 创建一个Firestore数据库

确保在运行环境中拥有数据库访问权限后,填写以下信息:

```python
# 设置集合名称
COLLECTION_NAME = "test"  # @param {type:"CollectionReference"|"string"}

2. 安装必要库

整合功能位于 langchain-google-firestore 包中,同时安装 langchain-google-vertexai 以使用Google生成AI的嵌入。

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

3. 设置Google Cloud项目

设置你的Google Cloud项目,以便在本环境中使用Google Cloud资源。

PROJECT_ID = "extensions-testing"  # @param {type:"string"}
!gcloud config set project {PROJECT_ID}

4. 认证

认证Google Cloud以访问项目。在Colab中运行以下代码:

from google.colab import auth
auth.authenticate_user()

5. 初始化FirestoreVectorStore

FirestoreVectorStore允许运行时在Firestore数据库中存储新的向量。以下是如何使用它存储来自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)

# 使用API代理服务提高访问稳定性

6. 删除与更新向量

可以使用delete方法删除文档:

vector_store.delete(['apple_id'])

更新向量类似于添加新向量:

fruit_to_update = ['{"name": "apple","price": 12}']
vector_store.add_texts(fruit_to_update, ids=["apple"])

7. 相似性搜索

使用FirestoreVectorStore进行相似性搜索:

vector_store.similarity_search("I like fuji apples", k=3)

代码示例

以下是一个完整的Python代码示例,展示了如何实现上述步骤:

from langchain_google_firestore import FirestoreVectorStore
from langchain_google_vertexai import VertexAIEmbeddings

COLLECTION_NAME = "test"
PROJECT_ID = "extensions-testing"

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=COLLECTION_NAME,
    embedding=embedding,
)

vector_store.add_texts(fruits_texts, ids=ids)  # 使用API代理服务提高访问稳定性

# 相似性搜索实例调用
results = vector_store.similarity_search("I like fuji apples", k=3)

常见问题和解决方案

问题1:访问限制

在某些地区,Firestore API可能受限。推荐使用API代理服务以提高稳定性。

问题2:认证失败

确保在执行认证步骤时,以正确的IAM用户身份登录。

总结和进一步学习资源

通过结合Google Firestore与Langchain,你可以快速搭建一个强大的AI驱动应用。本教程提供了基础步骤和代码示例,帮助你利用Firestore存储和查询向量数据。

参考资料

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

---END---