跳到主要内容

Jina AI

Jina AI 的嵌入模型是高性能的文本嵌入模型,可以将文本输入转换为数值表示,捕获文本的语义。这些模型在密集检索、语义文本相似性和多语言理解等应用中表现出色。

Milvus 通过 JinaEmbeddingFunction 类与 Jina AI 的嵌入模型集成。此类提供了使用 Jina AI 嵌入模型对文档和查询进行编码的方法,并返回与 Milvus 索引兼容的密集向量嵌入。要使用此功能,请从 Jina AI 获取 API 密钥。

要使用此功能,请安装必要的依赖项:

pip install --upgrade pymilvus
pip install "pymilvus[model]"

然后,实例化 JinaEmbeddingFunction

from pymilvus.model.dense import JinaEmbeddingFunction

jina_ef = JinaEmbeddingFunction(
model_name="jina-embeddings-v3", # 默认为 `jina-embeddings-v3`
api_key=JINAAI_API_KEY, # 提供您的 Jina AI API 密钥
task="retrieval.passage", # 指定任务
dimensions=1024, # 默认为 1024
)

参数

  • model_name (string)

    用于编码的 Jina AI 嵌入模型名称。您可以指定任何可用的 Jina AI 嵌入模型名称,例如 jina-embeddings-v3jina-embeddings-v2-base-en 等。如果您不指定此参数,将使用 jina-embeddings-v3。有关可用模型的列表,请参考 Jina Embeddings

  • api_key (string)

    访问 Jina AI API 的 API 密钥。

  • task (string)

    传递给模型的输入类型。对于嵌入模型 v3 及更高版本是必需的。

    • "retrieval.passage":用于在索引时对检索任务中的大型文档进行编码。
    • "retrieval.query":用于对检索任务中的用户查询或问题进行编码。
    • "classification":用于对文本分类任务的文本进行编码。
    • "text-matching":用于对相似性匹配的文本进行编码,例如测量两个句子之间的相似性。
    • "clustering":用于聚类或重新排序任务。
  • dimensions (int)

    结果输出嵌入向量应具有的维度数量。默认为 1024。仅支持嵌入模型 v3 及更高版本。

  • late_chunking (bool)

    此参数控制是否使用 Jina AI 上个月引入的 新分块方法来编码一批句子。默认为 False。当设置为 True 时,Jina AI API 将连接输入字段中的所有句子,并将它们作为单个字符串提供给模型。在内部,模型嵌入这个长连接字符串,然后执行后期分块,返回与输入列表大小匹配的嵌入列表。

要为文档创建嵌入向量,请使用 encode_documents() 方法。此方法专为非对称检索任务中的文档嵌入而设计,例如为搜索或推荐任务索引文档。此方法使用 retrieval.passage 作为任务。

docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]

docs_embeddings = jina_ef.encode_documents(docs)

# 打印嵌入向量
print("Embeddings:", docs_embeddings)
# 打印嵌入向量的维度和形状
print("Dim:", jina_ef.dim, docs_embeddings[0].shape)

预期输出类似于以下内容:

Embeddings: [array([9.80641991e-02, -8.51697400e-02,  7.36531913e-02,  1.42558888e-02,
-2.23589484e-02, 1.68494112e-03, -3.50753777e-02, -3.11530549e-02,
-3.26012149e-02, 5.04568312e-03, 3.69836427e-02, 3.48948985e-02,
8.19722563e-03, 5.88679723e-02, -6.71099266e-03, -1.82369724e-02,
...
2.48654783e-02, 3.43279652e-02, -1.66154150e-02, -9.90478322e-03,
-2.96043139e-03, -8.57473817e-03, -7.39028037e-04, 6.25024503e-03,
-1.08831357e-02, -4.00776342e-02, 3.25369164e-02, -1.42691191e-03])]
Dim: 1024 (1024,)

要为查询创建嵌入向量,请使用 encode_queries() 方法。此方法专为非对称检索任务中的查询嵌入而设计,例如搜索查询或问题。此方法使用 retrieval.query 作为任务。

queries = ["When was artificial intelligence founded", 
"Where was Alan Turing born?"]

query_embeddings = jina_ef.encode_queries(queries)

print("Embeddings:", query_embeddings)
print("Dim", jina_ef.dim, query_embeddings[0].shape)

预期输出类似于以下内容:

Embeddings: [array([8.79201014e-03,  1.47551354e-02,  4.02722731e-02, -2.52991207e-02,
1.12719582e-02, 3.75947170e-02, 3.97946090e-02, -7.36681819e-02,
-2.17952449e-02, -1.16298944e-02, -6.83426252e-03, -5.12507409e-02,
5.26071340e-02, 6.75181448e-02, 3.92445624e-02, -1.40817231e-02,
...
8.81703943e-03, 4.24629413e-02, -2.32944116e-02, -2.05193572e-02,
-3.22035812e-02, 2.81896023e-03, 3.85326855e-02, 3.64372656e-02,
-1.65050142e-02, -4.26847413e-02, 2.02664156e-02, -1.72684863e-02])]
Dim 1024 (1024,)

要为相似性匹配(如 STS 或对称检索任务)、文本分类、聚类或重新排序任务的输入创建嵌入向量,请在实例化 JinaEmbeddingFunction 类时使用适当的 task 参数值。

from pymilvus.model.dense import JinaEmbeddingFunction

jina_ef = JinaEmbeddingFunction(
model_name="jina-embeddings-v3", # 默认为 `jina-embeddings-v3`
api_key=JINA_API_KEY, # 提供您的 Jina AI API 密钥
task="text-matching",
dimensions=1024, # 默认为 1024
)

texts = [
"Follow the white rabbit.", # English
"Sigue al conejo blanco.", # Spanish
"Suis le lapin blanc.", # French
"跟着白兔走。", # Chinese
"اتبع الأرنب الأبيض.", # Arabic
"Folge dem weißen Kaninchen.", # German
]

embeddings = jina_ef(texts)

# 计算相似性
print(embeddings[0] @ embeddings[1].T)