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

Jina AI Embeddings



本文档介绍如何在 TiDB Cloud 中结合 Auto Embedding 使用 Jina AI 嵌入模型,以便通过文本查询执行语义搜索。

可用模型

Jina AI 提供高性能、多模态、多语言、长上下文的嵌入模型,适用于搜索、RAG 和智能体应用。

如果你自带 Jina AI API 密钥(BYOK),所有 Jina AI 模型均可通过 jina_ai/ 前缀使用。例如:

jina-embeddings-v4

  • 名称: jina_ai/jina-embeddings-v4
  • 维度: 2048
  • 距离度量: Cosine, L2
  • 最大输入文本 token 数: 32,768
  • 价格: 由 Jina AI 收费
  • 由 TiDB Cloud 托管: ❌
  • 支持 Bring Your Own Key(BYOK,由用户自行提供 API 密钥): ✅

jina-embeddings-v3

  • 名称: jina_ai/jina-embeddings-v3
  • 维度: 1024
  • 距离度量: Cosine, L2
  • 最大输入文本 token 数: 8,192
  • 价格: 由 Jina AI 收费
  • 由 TiDB Cloud 托管: ❌
  • 支持 Bring Your Own Key(BYOK,由用户自行提供 API 密钥): ✅

完整可用模型列表请参见 Jina AI 文档

使用示例

本示例展示如何创建向量表、插入文档,并使用 Jina AI 嵌入模型进行相似度搜索。

步骤 1:连接数据库

    from pytidb import TiDBClient tidb_client = TiDBClient.connect( host="{gateway-region}.prod.aws.tidbcloud.com", port=4000, username="{prefix}.root", password="{password}", database="{database}", ensure_db=True, )
    mysql -h {gateway-region}.prod.aws.tidbcloud.com \ -P 4000 \ -u {prefix}.root \ -p{password} \ -D {database}

    步骤 2:配置 API 密钥

    Jina AI Platform 创建你的 API 密钥,并自带密钥(BYOK)以使用嵌入服务。

      使用 TiDB Client 为 Jina AI 嵌入提供方配置 API 密钥:

      tidb_client.configure_embedding_provider( provider="jina_ai", api_key="{your-jina-api-key}", )

      通过 SQL 为 Jina AI 嵌入提供方设置 API 密钥:

      SET @@GLOBAL.TIDB_EXP_EMBED_JINA_AI_API_KEY = "{your-jina-api-key}";

      步骤 3:创建向量表

      创建一个包含向量字段的表,使用 jina_ai/jina-embeddings-v4 模型生成 2048 维向量:

        from pytidb.schema import TableModel, Field from pytidb.embeddings import EmbeddingFunction from pytidb.datatype import TEXT class Document(TableModel): __tablename__ = "sample_documents" id: int = Field(primary_key=True) content: str = Field(sa_type=TEXT) embedding: list[float] = EmbeddingFunction( model_name="jina_ai/jina-embeddings-v4" ).VectorField(source_field="content") table = tidb_client.create_table(schema=Document, if_exists="overwrite")
        CREATE TABLE sample_documents ( `id` INT PRIMARY KEY, `content` TEXT, `embedding` VECTOR(2048) GENERATED ALWAYS AS (EMBED_TEXT( "jina_ai/jina-embeddings-v4", `content` )) STORED );

        步骤 4:向表中插入数据

          使用 table.insert()table.bulk_insert() API 添加数据:

          documents = [ Document(id=1, content="Java: Object-oriented language for cross-platform development."), Document(id=2, content="Java coffee: Bold Indonesian beans with low acidity."), Document(id=3, content="Java island: Densely populated, home to Jakarta."), Document(id=4, content="Java's syntax is used in Android apps."), Document(id=5, content="Dark roast Java beans enhance espresso blends."), ] table.bulk_insert(documents)

          使用 INSERT INTO 语句插入数据:

          INSERT INTO sample_documents (id, content) VALUES (1, "Java: Object-oriented language for cross-platform development."), (2, "Java coffee: Bold Indonesian beans with low acidity."), (3, "Java island: Densely populated, home to Jakarta."), (4, "Java's syntax is used in Android apps."), (5, "Dark roast Java beans enhance espresso blends.");

          步骤 5:搜索相似文档

            使用 table.search() API 进行向量搜索:

            results = table.search("How to start learning Java programming?") \ .limit(2) \ .to_list() print(results)

            使用 VEC_EMBED_COSINE_DISTANCE 函数基于余弦距离度量进行向量搜索:

            SELECT `id`, `content`, VEC_EMBED_COSINE_DISTANCE(embedding, "How to start learning Java programming?") AS _distance FROM sample_documents ORDER BY _distance ASC LIMIT 2;

            结果:

            +------+----------------------------------------------------------------+ | id | content | +------+----------------------------------------------------------------+ | 1 | Java: Object-oriented language for cross-platform development. | | 4 | Java's syntax is used in Android apps. | +------+----------------------------------------------------------------+

            选项

            所有 Jina AI 选项 均可通过 EMBED_TEXT() 函数的 additional_json_options 参数进行设置。

            示例:为更优性能指定 “下游任务”

            CREATE TABLE sample ( `id` INT, `content` TEXT, `embedding` VECTOR(2048) GENERATED ALWAYS AS (EMBED_TEXT( "jina_ai/jina-embeddings-v4", `content`, '{"task": "retrieval.passage", "task@search": "retrieval.query"}' )) STORED );

            示例:使用其他维度

            CREATE TABLE sample ( `id` INT, `content` TEXT, `embedding` VECTOR(768) GENERATED ALWAYS AS (EMBED_TEXT( "jina_ai/jina-embeddings-v3", `content`, '{"dimensions":768}' )) STORED );

            所有可用选项请参见 Jina AI 文档

            另请参阅

            文档内容是否有帮助?