探索TiDB Serverless中的内置向量搜索,让AI应用开发更简单!
引言
TiDB Cloud是一款全面的数据库即服务(DBaaS)解决方案,提供了专用和无服务器选项。特别是TiDB Serverless现已将内置向量搜索集成到MySQL中。借助此功能,开发者无需新的数据库或其他技术栈即可轻松开发AI应用。今天,我们将深入探讨如何使用TiDBLoader从TiDB加载数据到Langchain中进行处理。
主要内容
1. 前置条件
在开始使用TiDBLoader之前,需要安装以下依赖:
%pip install --upgrade --quiet langchain
2. 配置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)
3. 从TiDB加载数据
您可以通过以下方式自定义TiDBLoader的行为:
query(str): 要执行的SQL查询。page_content_columns(Optional[List[str]]): 指定要包括在每个Document对象的页面内容中的列名。metadata_columns(Optional[List[str]]): 指定要包括在每个Document对象元数据中的列名。
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
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)
常见问题和解决方案
-
连接失败: 检查连接字符串中的用户和密码,并确保你的网络环境允许访问TiDB Cloud。
-
数据加载问题: 确保你的SQL查询语法正确,并检查列名是否存在。
总结和进一步学习资源
TiDB Serverless通过内置向量搜索以及与Langchain的集成,使AI应用开发变得不再复杂。想深入了解更多,可以参阅以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---