PingKai Logo下载

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,
)

步骤 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}",
)

步骤 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")

步骤 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)

步骤 5:搜索相似文档

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

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

选项

所有 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 文档

另请参阅