使用 TiDB Loader 在 LangChain 中加载数据的实战指南

技术背景介绍

在AI应用开发过程中,数据库的选择至关重要。TiDB Cloud 提供了一种全面的数据库即服务 (DBaaS) 解决方案,包括专用和无服务器选项。特别是 TiDB Serverless 的引入,使得在 MySQL 上无缝集成向量搜索成为现实。此项功能使得开发者不需要额外的新数据库或技术栈,就能轻松开发AI应用。我们今天将介绍如何使用 TiDB Loader 从 TiDB 加载数据到 LangChain。

核心原理解析

通过 TiDB Loader,开发者可以利用简单的 SQL 查询从 TiDB 数据库中提取数据,并将这些数据结构化为 LangChain 支持的 Document 对象。这些对象不仅包含页面内容,还可以包括元数据,这使得数据的处理和分析更加灵活和强大。

代码实现演示

环境配置

首先,我们需要安装所需的依赖:

# 安装 langchain
%pip install --upgrade --quiet langchain

数据库连接配置

接下来,我们将配置与 TiDB 的连接。这里我们会使用 TiDB Cloud 提供的方法来建立一个安全且高效的数据库连接。

import getpass

# 从 TiDB Cloud 控制台复制,替换为你自己的信息
tidb_connection_string_template = "mysql+pymysql://<USER>:<PASSWORD>@<HOST>:4000/<DB>?ssl_ca=/etc/ssl/cert.pem&ssl_verify_cert=true&ssl_verify_identity=true"
tidb_password = getpass.getpass("Input your TiDB password:")
tidb_connection_string = tidb_connection_string_template.replace(
    "<PASSWORD>", tidb_password
)

加载数据

我们将使用 SQLAlchemy 来创建一个示例表,并插入一些数据。之后,我们将通过 TiDB Loader 来加载这些数据。

from sqlalchemy import Column, Integer, MetaData, String, Table, create_engine

# 连接到数据库
engine = create_engine(tidb_connection_string)
metadata = MetaData()
table_name = "test_tidb_loader"

# 创建表
test_table = Table(
    table_name,
    metadata,
    Column("id", Integer, primary_key=True),
    Column("name", String(255)),
    Column("description", String(255)),
)
metadata.create_all(engine)

# 插入数据
with engine.connect() as connection:
    transaction = connection.begin()
    try:
        connection.execute(
            test_table.insert(),
            [
                {"name": "Item 1", "description": "Description of Item 1"},
                {"name": "Item 2", "description": "Description of Item 2"},
                {"name": "Item 3", "description": "Description of Item 3"},
            ],
        )
        transaction.commit()
    except:
        transaction.rollback()
        raise

使用 TiDB Loader 加载数据

from langchain_community.document_loaders import TiDBLoader

# 设置 TiDBLoader 以检索数据
loader = TiDBLoader(
    connection_string=tidb_connection_string,
    query=f"SELECT * FROM {table_name};",
    page_content_columns=["name", "description"],
    metadata_columns=["id"],
)

# 加载数据
documents = loader.load()

# 显示加载的文档
for doc in documents:
    print("-" * 30)
    print(f"content: {doc.page_content}\nmetadata: {doc.metadata}")

API 参考: TiDBLoader

------------------------------
content: name: Item 1
description: Description of Item 1
metadata: {'id': 1}
------------------------------
content: name: Item 2
description: Description of Item 2
metadata: {'id': 2}
------------------------------
content: name: Item 3
description: Description of Item 3
metadata: {'id': 3}

最后,清理创建的表:

test_table.drop(bind=engine)

应用场景分析

这种方法非常适用于需要从 TiDB 中提取数据,并将其结构化为 LangChain 支持的 Document 对象的场景。无论是进行数据分析、机器学习模型训练,还是建立AI驱动的应用,TiDB Loader 都能提供高效且可靠的支持。

实践建议

  1. 确保 SQL 查询是高效的,避免加载不必要的数据。
  2. 尽量使用加密连接,确保数据传输的安全性。
  3. 定期检查和更新依赖项,保持环境的稳定性和安全性。

如果遇到问题欢迎在评论区交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值