Elasticsearch Open Inference API 增加了对 Jina AI 嵌入和 Rerank 模型的支持

作者:Hemant MalikJoan Fontanals Martínez

探索如何使用 Elasticsearch Open Inference API 访问 Jina AI 模型。

我们在 Jina AI 的朋友们将 Jina AI 的嵌入模型和重新排名产品的原生集成添加到 Elasticsearch 开放推理 API 中。这包括对行业领先的多语言文本嵌入和多语言重新排名的支持 ------ 针对检索、聚类和分类进行了优化。此次集成为开发者提供了一套基于 Elasticsearch 向量数据库和 Jina AI 的高性能、高性价比的AI信息检索和语义应用工具包。

Jina AI 的模型采用非对称搜索嵌入和高性能重排序模型来提高准确率,将顶级 AI 融入 Elasticsearch 应用程序中,无需额外的集成或开发成本。

这篇文章探讨了如何使用 Elasticsearch 开放推理 API 访问 Jina AI 模型。

关于 Jina AI 模型

Jina AI 成立于 2020 年,是一家领先的搜索基础公司,致力于创建嵌入、重新排名器和小型语言模型,帮助开发人员构建可靠、高质量的多模式搜索应用程序。

Jina Embeddings v3 是 Jina AI 推出的多语言嵌入模型,支持 8K 标记输入长度。 Jina CLIP v2 是一种多模式和多语言嵌入模型,支持 8K 标记的文本和图像输入。 Jina Reranker v2 是一个神经重排序模型,它支持多种语言并且经过后期训练,特别适用于代理用例。 ReaderLM-v2 是一个小型语言模型,它将来自各种来源的输入数据转换为适合与 LLM 交互的 Markdown 或结构化数据格式。

入门

我们将使用 Kibana Dev Console 来完成设置。或者,这里有一个 Jupyter 笔记本可以帮助你入门。

首先,你需要一个 Jina AI API 密钥。你可以在此处获取具有一百万个令牌使用限制的免费密钥。

Jina AI 提供了多种模型,但我们建议使用最新的嵌入模型 jina-embeddings-v3 及其重新排名模型 jina-reranker-v2-base-multilingual。

步骤 1:创建 Jina AI 推理 API 端点以生成嵌入

通过以 jinaai 形式提供服务,在 Elasticsearch 中创建文本嵌入推理端点。在服务设置中,将你的 Jina AI API 密钥用作 api_key 和 model_id 作为 jina-embeddings-v3。

复制代码
PUT _inference/text_embedding/jina_embeddings 
{
    "service": "jinaai",
    "service_settings": {
        "api_key": "<api-key>", 
        "model_id": "jina-embeddings-v3"
    }
}

让我们测试我们的 Jina AI 端点来验证配置。为此,让我们对示例文本进行推理:

复制代码
POST _inference/text_embedding/jina_embeddings 
{
    "input": "Jina AI models are now supported natively in Elasticsearch."
}

步骤 2:创建 Jina AI 推理 API 端点以进行重新排名

类似地,创建一个名为 jina_rerank 的 rerank task_type 服务,供搜索期间使用。在服务设置中使用 jinaai 作为服务名称、使用你的 Jina AI API 密钥作为 api_key、使用 jina-reranker-v2-base-multilingual 作为 model_id。

API 的 task_settings 部分使用 top_n 设置设置 jina_rerank 返回的最大文档数,此处设置为 10。return_documents 设置通知 jina_rerank 它应该返回它所识别的搜索候选文档的完整副本。

复制代码
PUT _inference/rerank/jina_rerank
{
    "service": "jinaai",
    "service_settings": {
        "api_key": "<api-key>",
        "model_id": "jina-reranker-v2-base-multilingual"
    },
    "task_settings": {
        "top_n": 10,
        "return_documents": true
    }
}

在 Kibana 开发控制台中,这些命令应该返回 200 响应代码,表明服务已正确配置。

步骤 3:生成嵌入(自动)

让我们创建一个索引,配置为使用 jina_embeddings 来生成嵌入。我们将创建一个名为 film_index 的索引,并使用 jina_embeddings 作为 inference_id 的值,自动生成和存储具有 semantic_text 类型的嵌入。

复制代码
PUT film_index
{
  "mappings": {
    "properties": {
      "blurb": {
        "type": "semantic_text",
        "inference_id": "jina_embeddings"
      }
    }
  }
}

现在我们可以将文档批量插入索引。我们在本教程中使用下面的电影数据集,其中包含有关六部电影的信息。每个文档都是一个 JSON 字符串,其中有一个标有 blurb 的字段。

复制代码
PUT film_index/_bulk?pretty
{ "index" : { "_index" : "film_index" } }
{"title": "Casablanca", "director": "Michael Curtiz", "year": 1942, "runtime_min": 102, "genre": ["Drama", "Romance"], "blurb": "A cynical expatriate cafe owner struggles to choose between love and virtue in wartime Morocco"}
{ "index" : { "_index" : "film_index" } }
{"title": "2001: A Space Odyssey", "director": "Stanley Kubrick", "year": 1968, "runtime_min": 149, "genre": ["Sci-Fi", "Adventure"], "blurb": "Humanity finds a mysterious monolith on the moon that triggers a journey to Jupiter"}
{ "index" : { "_index" : "film_index" } }
{"title": "Parasite", "director": "Bong Joon-ho", "year": 2019, "runtime_min": 132, "genre": ["Thriller", "Drama"], "blurb": "A poor family schemes to become employed by a wealthy household with devastating consequences"}
{ "index" : { "_index" : "film_index" } }
{"title": "The Godfather", "director": "Francis Ford Coppola", "year": 1972, "runtime_min": 175, "genre": ["Crime", "Drama"], "blurb": "Aging patriarch of an organized crime dynasty transfers control to his reluctant son"}
{ "index" : { "_index" : "film_index" } }
{"title": "Inception", "director": "Christopher Nolan", "year": 2010, "runtime_min": 148, "genre": ["Sci-Fi", "Action"], "blurb": "A thief who enters people's dreams attempts to plant an idea in a CEO's subconscious"}
{ "index" : { "_index" : "film_index" } }
{"title": "The Grand Budapest Hotel", "director": "Wes Anderson", "year": 2014, "runtime_min": 99, "genre": ["Comedy", "Drama"], "blurb": "A legendary concierge teams up with a lobby boy to clear his name in a priceless painting theft"}

随着文档被索引,请击鼓...... Elasticsearch 开放推理 API 将调用 jina_embeddings 服务来为简介文本生成嵌入。这种无缝的开发人员体验归功于 Elasticsearch 开放推理 API 中的 semantic_text 类型和 Jina AI 集成。

步骤 4:语义重新排序

现在你可以使用语义嵌入向量搜索 film_index。下面的 API 调用将

  • 使用 jina_embeddings 服务为查询字符串 "An inspiring love story" 创建嵌入。

  • 将结果嵌入与 film_index 中存储的嵌入进行比较。

  • 返回 blurb 字段与查询最匹配的存储文档。

    GET film_index/_search
    {
    "query": {
    "semantic": {
    "field": "blurb",
    "query": "An inspiring love story"
    }
    }
    }

现在,让我们使用 jina_rerank。它将执行与上面相同的查询匹配过程,然后选取 50 个最佳匹配(由 rank_window_size 字段指定)并使用 jina_rerank 服务对结果进行更精确的排名,返回前 10 名(如之前在 jina-rerank 的配置中所指定)。

复制代码
POST film_index/_search
{
  "retriever": {
    "text_similarity_reranker": {
      "retriever": {
        "standard": {
          "query": {
            "semantic": {
              "field": "blurb",
              "query": "An inspiring love story"
            }
          }
        }
      },
      "field": "blurb",
      "rank_window_size": 50,
      "inference_id": "jina_rerank",
      "inference_text": "An inspiring love story"
    }
  }
}

带有 Elasticsearch 和 Jina AI 的 RAG

当开发人员将 Elasticsearch 用于他们的 RAG 用例时,在推理 API 中本地使用 Jina AI 的搜索基础的能力可以实现对 Jina AI 的搜索基础的低成本和无缝访问。开发人员现在就可以在 Elastic Cloud Serverless 中使用此集成,并且它将很快在 Elasticsearch 8.18 版本中推出。感谢 Jina AI 团队的贡献!

  • 尝试使用这个笔记本,其中包含使用推理 API 和 Jina AI 模型的端到端示例。
  • 要了解有关 Jina AI 模型的更多信息,请访问 jina.ai博客

Elasticsearch 与行业领先的 Gen AI 工具和提供商进行了原生集成。查看我们的网络研讨会,了解如何超越 RAG 基础知识,或构建可用于生产的应用程序*Elastic Vector Database*。

为了为你的用例构建最佳搜索解决方案,请开始免费云试用完全托管的 Elastic Cloud 项目,或立即使用 "curl -fsSL https://elastic.co/start-local sh|" 在几分钟内在你的本地机器上试用 Elastic。

Elasticsearch 与行业领先的 Gen AI 工具和提供商进行了原生集成。查看我们的网络研讨会,了解如何超越 RAG 基础知识,或构建可用于生产的应用程序 Elastic Vector Database

为了为你的用例构建最佳搜索解决方案,请立即开始免费云试用或在你的本地机器上试用 Elastic。

原文:Elasticsearch Open Inference API adds support for Jina AI Embeddings and Rerank Model - Elasticsearch Labs

相关推荐
聚客AI1 小时前
ChatGPT到Claude全适配:跨模型Prompt高级设计规范与迁移技巧
人工智能·机器学习·语言模型·自然语言处理·langchain·transformer·llama
Hello World......1 小时前
Java求职面试揭秘:从Spring到微服务的技术挑战
大数据·hadoop·spring boot·微服务·spark·java面试·互联网大厂
小羊Linux客栈1 小时前
自动化:批量文件重命名
运维·人工智能·python·自动化·游戏程序
Mr数据杨5 小时前
【Dv3Admin】插件 dv3admin_chatgpt 集成大语言模型智能模块
人工智能·语言模型·chatgpt
zm-v-159304339865 小时前
AI 赋能 Copula 建模:大语言模型驱动的相关性分析革新
人工智能·语言模型·自然语言处理
zhz52147 小时前
AI数字人融合VR全景:从技术突破到可信场景落地
人工智能·vr·ai编程·ai数字人·ai agent·智能体
数据与人工智能律师7 小时前
虚拟主播肖像权保护,数字时代的法律博弈
大数据·网络·人工智能·算法·区块链
fatesunlove7 小时前
知识图谱重构电商搜索:下一代AI搜索引擎的底层逻辑
搜索引擎·ai·知识图谱
武科大许志伟7 小时前
武汉科技大学人工智能与演化计算实验室许志伟课题组参加2025中国膜计算论坛
人工智能·科技
哲讯智能科技7 小时前
【无标题】威灏光电&哲讯科技MES项目启动会圆满举行
人工智能