📘 **TELUS Agriculture & Consumer Goods** 如何通过 **Haystack Agents** 转变促销交易
由 deepset 维护

集成:Jina AI

使用最新的 Jina AI 嵌入模型

作者
deepset

此集成允许 Haystack 用户在其管道中无缝使用 Jina AI 的 jina-embeddingsreranking 模型。Haystack 还集成了 Jina Reader API

Jina AI 是一家多模态人工智能公司,其愿景是通过其提示和模型技术彻底改变我们解释和与信息互动的方式。

Jina AI 提供多种模型,以便用户可以使用并选择最适合其需求的产品

模型 维度 语言 MRL (Matryoshka) 上下文
jina-embeddings-v3 1024 多语言(89 种语言) 8192
jina-embeddings-v2-base-en 768 英语 8192
jina-embeddings-v2-base-de 768 德语和英语 8192
jina-embeddings-v2-base-es 768 西班牙语和英语 8192
jina-embeddings-v2-base-zh 768 中文和英语 8192

推荐模型:jina-embeddings-v3

我们推荐 jina-embeddings-v3 作为 Jina AI 最新且性能最佳的嵌入模型。该模型在其骨干之上训练了 5 个特定任务的适配器,可优化各种嵌入用例。

特定任务适配器

在请求中包含 task 以针对您的特定应用程序定制模型

  • retrieval.query:用于在检索任务中编码用户查询或问题。
  • retrieval.passage:用于在索引时编码检索任务中的大型文档。
  • classification:用于为文本分类任务编码文本。
  • text-matching:用于文本匹配任务编码文本,例如衡量两句话之间的相似性。
  • separation:用于聚类或重排序任务。

Matryoshka 表示学习:

jina-embeddings-v3 支持 Matryoshka 表示学习,允许用户控制嵌入维度,而对性能的影响最小。在请求中指定 dimensions 以选择所需的维度。

注意:默认维度为 1024,建议值为 256 到 1024。

您可以在下表中参考有关维度与性能的提示

维度 32 64 128 256 512 768 1024
平均检索性能 (nDCG@10) 52.54 58.54 61.64 62.72 63.16 63.3 63.35

长上下文嵌入模型的后期分块

jina-embeddings-v3 支持 后期分块,该技术利用模型的长上下文能力来生成上下文分块嵌入。在请求中包含 late_chunking=True 以启用上下文分块表示。当设置为 true 时,Jina AI API 会将输入字段中的所有句子连接起来,并将它们作为单个字符串馈送给模型。在内部,模型会嵌入这个长连接字符串,然后执行后期分块,返回与输入列表大小匹配的嵌入列表。

目录

概述

您可以在 Jina Embedders 和 Jina Ranker 的 Haystack 管道中使用 Jina 嵌入模型Jina Rerankers

安装

pip install jina-haystack

使用

Embedding 模型

您可以使用三个组件来使用 Jina 嵌入模型:JinaTextEmbedderJinaDocumentEmbedderJinaDocumentImageEmbedder

您可以使用一个组件来使用 Jina Reranker 模型:JinaRanker

要为文档创建语义嵌入,请在索引管道中使用 JinaDocumentEmbedder。要为查询生成嵌入,请使用 JinaTextEmbedder。对于基于图像的嵌入,请使用 JinaDocumentImageEmbedder。选择适合您特定用例的组件后,使用模型名称和 Jina API 密钥初始化组件。您也可以设置环境变量 JINA_API_KEY,而不是将 API 密钥作为参数传递。

以下是使用 InMemoryDocumentStoreJinaDocumentEmbedderDocumentWriter 的示例索引管道

import os
from haystack import Document, Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.writers import DocumentWriter
from haystack_integrations.components.embedders.jina import JinaDocumentEmbedder

os.environ["JINA_API_KEY"]="your-jina-api-key"

document_store = InMemoryDocumentStore(embedding_similarity_function="cosine")

documents = [Document(content="I enjoy programming in Python"),
             Document(content="My city does not get snow in winter"),
             Document(content="Japanese diet is well known for being good for your health"),
             Document(content="Thomas is injured and can't play sports")]

indexing_pipeline = Pipeline()
indexing_pipeline.add_component(
  "embedder",
  JinaDocumentEmbedder(
    api_key=Secret.from_token("<your-api-key>"),
    model="jina-embeddings-v3",
    dimensions=1024,
    task="retrieval.passage",
    late_chunking=True,
  )
)
indexing_pipeline.add_component("writer", DocumentWriter(document_store=document_store))
indexing_pipeline.connect("embedder", "writer")

indexing_pipeline.run({"embedder": {"documents": documents}})

图像嵌入

要嵌入图像,您可以使用 JinaDocumentImageEmbedder 和支持文本和图像输入的 Jina 多模态模型

支持的模型

  • jina-clip-v1:用于文本-图像任务的基本多模态模型
  • jina-clip-v2:具有更高分辨率支持(512×512)和改进性能的高级模型
  • jina-embeddings-v4:文本、图像和视觉文档的统一嵌入

主要特点

  • 图像尺寸调整:自动将图像调整到最佳尺寸
  • 批量处理:通过可配置的批量大小高效处理多个图像
  • PDF 支持:从 PDF 文档中提取和嵌入图像
  • 多种格式:支持 JPEG、PNG 和 PDF 文件

以下是使用 JinaDocumentImageEmbedder 的图像示例索引管道

import os
from haystack import Document, Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.writers import DocumentWriter
from haystack.utils import Secret
from haystack_integrations.components.embedders.jina import JinaDocumentImageEmbedder

os.environ["JINA_API_KEY"] = "your-jina-api-key"

document_store = InMemoryDocumentStore(embedding_similarity_function="cosine")

# Documents with image file paths
documents = [
    Document(content="A cat sitting on a chair", meta={"file_path": "cat.jpg"}),
    Document(content="A dog running in the park", meta={"file_path": "dog.png"}),
    Document(content="City skyline at sunset", meta={"file_path": "city.jpeg"}),
]

indexing_pipeline = Pipeline()
indexing_pipeline.add_component(
    "image_embedder",
    JinaDocumentImageEmbedder(
        model="jina-clip-v2",  # Recommended for image tasks
        embedding_dimension=768,
        image_size=(512, 512),  # Optional: resize images
        batch_size=5,  # Process 5 images per API call
    )
)
indexing_pipeline.add_component("writer", DocumentWriter(document_store=document_store))
indexing_pipeline.connect("image_embedder", "writer")

indexing_pipeline.run({"image_embedder": {"documents": documents}})

JinaDocumentImageEmbedder 自动

  • 从文档元数据中指定的路径加载图像
  • 将图像转换为 Jina API 的适当格式
  • 如果指定了 image_size,则调整图像大小
  • 批量处理多个图像以获得最佳性能
  • 通过将每个页面提取为图像来支持 PDF 文档

Jina Reader API

Jina Reader API 将 URL/查询转换为 LLM 友好的格式。它支持三种操作模式

  • read:处理 URL 并返回页面的文本内容。
  • search:搜索网络并返回最相关页面的文本内容。
  • ground:调用接地引擎进行事实核查。

在 Haystack 中,您可以使用 Jina Reader API 和 JinaReaderConnector 组件。

以下是使用 JinaReaderConnector 进行 read 模式的示例

import os
from haystack_integrations.components.connectors.jina import JinaReaderConnector

os.environ["JINA_API_KEY"]="your-jina-api-key"

reader = JinaReaderConnector(mode="read")
query = "https://example.com"
result = reader.run(query=query)
document = result["documents"][0]
print(document.content)

>>> "This domain is for use in illustrative examples..."

您可以在 此处 找到更多示例。