📣
TiDB Cloud Essential 开放公测中。此页面由 AI 自动翻译,英文原文请见此处。

使用 Python 快速上手 TiDB + AI



本文档演示了如何使用 Python SDK 在 TiDB 中开始 向量搜索。跟随本文中的步骤,你将构建你的第一个基于 TiDB 的 AI 应用。

通过学习本教程,你将掌握:

  • 使用 TiDB Python SDK 连接 TiDB。
  • 利用主流嵌入模型生成文本嵌入向量。
  • 将向量存储到 TiDB 表中。
  • 使用向量相似度进行语义搜索。

前置条件

  • 访问 tidbcloud.com 免费创建一个 TiDB Cloud Starter 集群,或使用 tiup playground 在本地部署一个 TiDB 集群进行测试。

安装

pytidb 是官方的 TiDB Python SDK,旨在帮助开发者高效构建 AI 应用。

安装 Python SDK,请运行以下命令:

pip install pytidb

如需使用内置嵌入 function,可安装 models 扩展(可选):

pip install "pytidb[models]"

连接数据库

    你可以在 TiDB Cloud 控制台 获取这些连接参数:

    1. 进入 Clusters 页面,点击目标集群名称进入其概览页面。
    2. 点击右上角的 Connect。此时会弹出连接对话框,显示连接参数。

    例如,连接参数如下所示:

    HOST: gateway01.us-east-1.prod.shared.aws.tidbcloud.com PORT: 4000 USERNAME: 4EfqPF23YKBxaQb.root PASSWORD: abcd1234 DATABASE: test CA: /etc/ssl/cert.pem

    对应的 Python 代码如下,用于连接 TiDB Cloud Starter 集群:

    from pytidb import TiDBClient client = TiDBClient.connect( host="gateway01.us-east-1.prod.shared.aws.tidbcloud.com", port=4000, username="4EfqPF23YKBxaQb.root", password="abcd1234", database="test", )

    以下是连接 TiDB 自托管的基本示例:

    from pytidb import TiDBClient client = TiDBClient.connect( host="localhost", port=4000, username="root", password="", database="test", ensure_db=True, )

    连接成功后,你可以使用 client 对象进行表操作、数据查询等。

    创建嵌入 function

    在使用 嵌入模型 时,你可以利用嵌入 function 在插入和查询阶段自动将数据向量化。该功能原生支持 OpenAI、Jina AI、Hugging Face、Sentence Transformers 等主流嵌入模型。

      前往 OpenAI 平台 创建你的 API key 用于嵌入。

      from pytidb.embeddings import EmbeddingFunction text_embed = EmbeddingFunction( model_name="openai/text-embedding-3-small", api_key="<your-openai-api-key>", )

      前往 Jina AI 创建你的 API key 用于嵌入。

      from pytidb.embeddings import EmbeddingFunction text_embed = EmbeddingFunction( model_name="jina/jina-embeddings-v3", api_key="<your-jina-api-key>", )

      创建表

      例如,创建一个名为 chunks 的表,包含以下字段:

      • id (int):chunk 的 ID。
      • text (text):chunk 的文本内容。
      • text_vec (vector):文本的向量嵌入。
      • user_id (int):创建该 chunk 的用户 ID。
      from pytidb.schema import TableModel, Field, VectorField class Chunk(TableModel): id: int | None = Field(default=None, primary_key=True) text: str = Field() text_vec: list[float] = text_embed.VectorField(source_field="text") user_id: int = Field() table = client.create_table(schema=Chunk, if_exists="overwrite")

      创建完成后,你可以使用 table 对象插入数据、搜索数据等。

      插入数据

      现在让我们向表中添加一些示例数据。

      table.bulk_insert([ # 👇 文本会被 Auto Embedding 并填充到 `text_vec` 字段中。 Chunk(text="PyTiDB is a Python library for developers to connect to TiDB.", user_id=2), Chunk(text="LlamaIndex is a framework for building AI applications.", user_id=2), Chunk(text="OpenAI is a company and platform that provides AI models service and tools.", user_id=3), ])

      搜索最近邻

      要搜索给定 query 的最近邻,可以使用 table.search() method。该 method 默认执行 向量搜索

      table.search( # 👇 直接传入 query 文本,会 Auto Embedding 为 query 向量。 "A library for my artificial intelligence software" ) .limit(3).to_list()

      在本例中,向量搜索会将 query 向量与 chunks 表中 text_vec 字段存储的向量进行比较,并根据相似度得分返回最相关的前 3 条结果。

      _distance 越小,表示两个向量越相似。

      [ { 'id': 2, 'text': 'LlamaIndex is a framework for building AI applications.', 'text_vec': [...], 'user_id': 2, '_distance': 0.5719928358786761, '_score': 0.4280071641213239 }, { 'id': 3, 'text': 'OpenAI is a company and platform that provides AI models service and tools.', 'text_vec': [...], 'user_id': 3, '_distance': 0.603133726213383, '_score': 0.396866273786617 }, { 'id': 1, 'text': 'PyTiDB is a Python library for developers to connect to TiDB.', 'text_vec': [...], 'user_id': 2, '_distance': 0.6202191842385758, '_score': 0.3797808157614242 } ]

      删除数据

      要从表中删除指定行,可以使用 table.delete() method:

      table.delete({ "id": 1 })

      删除表

      当你不再需要某个表时,可以使用 client.drop_table() method 删除:

      client.drop_table("chunks")

      后续步骤

      文档内容是否有帮助?