阿里云Elasticsearch Inference API介绍

阿里云Elasticsearch(简称ES)提供了Inference API,可使用外部各个公司提供的推理模型服务,同时阿里云ES扩展了Inference API的服务,使之可以使用阿里云的推理模型服务(AI搜索开放平台)。本文介绍Inference API扩展的AI搜索开放平台支持的推理模型服务API。

背景信息

AI搜索开放平台围绕智能搜索及RAG场景,提供优质的组件化服务以及灵活的调用机制,内置文档解析、文档切片、文本向量、召回、排序和大模型等服务,可实现一站式灵活的AI搜索业务开发。

说明

文档参数说明表中的符号表示子参数。

Inference APIs介绍

阿里云ES支持的Inference APIs如下表所示。

接口

描述

适用版本

相关文档

DOCUMENT ANALYZE(文档内容解析)

支持从非结构化文档中提取出标题、分段等逻辑层级结构,以及文本、表格、图片等信息,并以结构化的格式输出。

ES 8.15及以上版本

DOCUMENT ANALYZE(文档内容解析)

IMAGE ANALYZE(图片内容提取)

提供图片内容解析服务,基于多模态大模型对图片内容进行解析理解以及文字识别。

提供图片内容OCR识别服务,基于OCR能力对图片文字进行识别,将文字信息提取出来。

ES 8.15及以上版本

IMAGE ANALYZE(图片内容提取)

SPLIT_DOC(文档切片)

提供通用的文本切片策略,可基于文档段落格式、文本语义、指定规则,对html、markdown、txt格式的结构化数据进行拆分,同时支持富文本形式提取code、 image、table。

ES 8.13及以上版本

SPLIT_DOC(文档切片)

TEXT_EMBEDDING(文本向量)

文本向量服务将文本数据转化为稠密向量形式表达,可用于信息检索、文本分类、相似性比较等场景。

ES 8.13及以上版本

TEXT_EMBEDDING(文本向量)

SPARSE_EMBEDDING(文本稀疏向量)

文本稀疏向量服务将文本数据转化为稀疏向量形式表达,稀疏向量存储空间更小,常用于表达关键词和词频信息,可与稠密向量搭配进行混合检索,提升检索效果。

ES 8.13及以上版本

SPARSE_EMBEDDING(文本稀疏向量)

QUERY ANALYZE(查询分析)

提供Query内容分析服务,基于大语言模型及NLP能力,可对您输入的查询内容进行意图识别、相似问题扩展、NL2SQL处理等,有效提升RAG场景中检索问答效果。

ES 8.15及以上版本

QUERY ANALYZE(查询分析)

RERANK(排序服务)

文档相关性打分服务,提供通用的文档打分能力,可根据query与文档内容的相关性,按分数由高到低对doc进行排序,并输出对应的打分结果。

ES 8.13及以上版本

RERANK(排序服务)

COMPLETION(内容生成服务)

调用包含基于阿里巴巴自研模型底座微调的RAG专属大模型服务。可结合文档处理、检索服务等,在RAG场景中广泛应用,提升答案的准确率,降低幻觉率。

ES 8.15及以上版本

COMPLETION(内容生成服务)

创建和调用Inference APIs

DOCUMENT ANALYZE(文档内容解析)

创建和调用文档解析服务,将非结构化数据解析为结构化数据。更多信息,请参见文档内容解析

创建doc_analyze推理模型

创建模板:

PUT _inference/doc_analyze/<inference_id>
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "api_key": "<API-KEY>",
    "service_id": "<service_id>",
    "host": "<host>",
    "workspace": "<workspace_name>",
    "http_schema":"<http_schema>"
  }
}

参数说明:

参数

说明

<inference_id>

自定义的inference endpoint标识符。

service

指定使用的服务。调用阿里云AI搜索开放平台为alibabacloud-ai-search

service_settings

服务设置,必填。

└api_key

鉴权使用的API-KEY。获取方式,请参见管理API Key

└service_id

使用的模型服务名称,支持的值:

  • ops-document-analyze-001:文档解析服务-001

模型服务介绍,请参见文档内容解析

└host

调用服务的地址,支持通过公网、内网两种方式调用API服务。

获取服务地址,请参见API-KEY管理页面的API域名。例如http://default****.platform-cn-shanghai.opensearch.aliyuncs.com

workspace

工作空间名称,例如default

http_schema

HTTP类型(可选),可选值包括HTTPS(默认)和HTTP。

创建示例:

PUT _inference/doc_analyze/doc_analyze_test
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "api_key": "OS-XXX",
    "service_id": "ops-document-analyze-001",
    "host" : "default-j01.platform-cnshanghai.opensearch.aliyuncs.com",
    "workspace" : "default"
  }
}

调用doc_analyze推理模型

调用模板:

POST _inference/doc_analyze/<inference_id>
{
  "input": ["http://opensearch-shanghai.oss-cn-shanghai.aliyuncs.com/chatos/rag/file-parser/samples/GB10767.pdf"], # 可以是url, content or task_id
  "task_settings": {
    "document": {
      "input_type": "url", # optional, url, content or task_id, default url. 为task_id时查询异步task结果
      "file_name": "<file_name>", # optional, url无法推断时上传
      "file_type": "<file_type>", # optional, file_name无法推断时上传
    },
    "output": {
      "image_storage" : "<image_storage>" # optional, default base64
    },
    "is_async" : "<true or false>", # 默认false
  }
}

参数说明:

参数

说明

<inference_id>

需要调用的inference endpoint标识符。

input

需要进行文档解析服务的文档。

task_settings

任务设置,可选。

└document.input_type

文档的类型:

  • url :默认值

  • content

  • task_id:查询异步task结果

└document.file_name

文件名。如果该参数为空,根据url推断,如果url也为空,则需要指定该参数。

└document.file_type

文件类型。如果该参数为空,根据file_name的后缀推断,如果无法推断则需要指定该参数,例如pdf、doc、docx。

└output.image_storage

图片存储方式:

  • base64:默认方式

  • url:url有效期为3天

└is_async

是否异步调用:

  • true

  • false

调用示例:

# 同步
POST _inference/doc_analyze/doc_analyze_test
{
  "input": ["http://opensearch-shanghai.oss-cn-shanghai.aliyuncs.com/chatos/rag/file-parser/samples/GB10767.pdf"]
}

# 异步
POST _inference/doc_analyze/doc_analyze_test
{
  "input": ["http://opensearch-shanghai.oss-cn-shanghai.aliyuncs.com/chatos/rag/file-parser/samples/GB10767.pdf"],
    "task_settings": {
    "document":{
      "input_type": "url"
    },
    "is_async" : true
  }
}

# 获取异步结果
POST _inference/doc_analyze/os-doc-a
{
  "input": ["8e8f1137-ffd6-4670-b63e-86906882793d"],
    "task_settings": {
    "document":{
      "input_type": "task_id"
    },
    "is_async" : true
  }
}

IMAGE ANALYZE(图片内容提取

创建和调用图片内容提取服务,解析后的文本可用于图片检索问答场景。更多信息,请参见图片内容提取

创建img_analyze推理模型

创建模板:

PUT _inference/img_analyze/<inference_id>
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "api_key": "<API-KEY>",
    "service_id": "<service_id>",
    "host": "<host>",
    "workspace": "<workspace_name>",
    "http_schema":"<http_schema>"
  }
}

参数说明:

参数

说明

<inference_id>

自定义的inference endpoint标识符。

service

指定使用的服务。调用阿里云AI搜索开放平台为alibabacloud-ai-search

service_settings

服务设置,必填。

└api_key

鉴权使用的API-KEY。获取方式,请参见管理API Key

└service_id

使用的模型服务名称,支持的值:

  • ops-image-analyze-vlm-001:图片内容理解服务001

  • ops-image-analyze-ocr-001:图片文本识别服务001

模型服务介绍,请参见图片内容提取

└host

调用服务的地址,支持通过公网、内网两种方式调用API服务。

获取服务地址,请参见API-KEY管理页面的API域名。例如http://default****.platform-cn-shanghai.opensearch.aliyuncs.com

workspace

工作空间名称,例如default

http_schema

HTTP类型(可选),可选值包括HTTPS(默认)和HTTP。

创建示例:

PUT _inference/img_analyze/img_analyze_test
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "api_key": "OS-XXX",
    "service_id": "ops-image-analyze-ocr-001",
    "host" : "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
    "workspace" : "default"
  }
}

调用img_analyze推理模型

调用模板:

POST _inference/img_analyze/<inference_id>
{
  "input": ["https://img.alicdn.com/imgextra/i1/O1CN01WksnF41hlhBFsXDNB_!!6000000004318-0-tps-1000-1400.jpg"], # 可以是url, content or task_id
  "task_settings": {
    "document": {
      "input_type": "url", # optional, url, content or task_id, default url
      "file_name": "<file_name>", # optional, url无法推断时上传
      "file_type": "<file_type>", # optional, file_name无法推断时上传
    },
    "is_async" : "<true or false>" # 默认false
  }
}

参数说明:

参数

说明

<inference_id>

需要调用的inference endpoint标识符。

input

需要进行图片解析服务的图片。

task_settings

任务设置,可选。

└document.input_type

文档的类型:

  • url :默认值

  • content

  • task_id:查询异步task结果

└document.file_name

文件名。如果该参数为空,根据url推断,如果url也为空,则需要指定该参数。

└document.file_type

文件类型。如果该参数为空,根据file_name的后缀推断,如果无法推断则需要指定该参数,例如,jpg, jpeg, png, bmp,tiff。

└is_async

是否异步调用:

  • true

  • false:默认

调用示例:

# 同步
POST _inference/img_analyze/os-img-a
{
  "input": ["https://img.alicdn.com/imgextra/i1/O1CN01WksnF41hlhBFsXDNB_!!6000000004318-0-tps-1000-1400.jpg"]
}

# 异步
POST _inference/img_analyze/os-img-a
{
  "input": ["https://img.alicdn.com/imgextra/i1/O1CN01WksnF41hlhBFsXDNB_!!6000000004318-0-tps-1000-1400.jpg"],
      "task_settings": {
    "document":{
      "input_type": "url"
    },
    "is_async" : true
  }
}

# 获取异步结果
POST _inference/img_analyze/os-img-a
{
  "input": ["0239f61f-dd46-45ef-8cf1-affdd205a8c9"],
      "task_settings": {
    "document":{
      "input_type": "task_id"
    }
    "is_async" : true
  }
}

SPLIT_DOC(文档切片

创建和调用文档切片服务,将复杂的文档内容按照指定token数量切分成一个chunk列表。更多信息,请参见文档切片

创建splic_doc推理模型

创建模板:

PUT _inference/doc_split/<inference_id>
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "host" : "<host>",
    "api_key":"<api_key>",
    "service_id": "<service_id>",
    "workspace" : "<work_space>",
    "http_schema":"<http_schema>"
  },
  "task_settings": {
    "document":{
      "content_encoding":"<document.content_encoding>",
      "content_type":"<document.content_type>"
    },
    "strategy":{
      "type":"<strategy.type>",
      "max_chunk_size":<strategy.max_chunk_size>,
      "compute_type":"<strategy.compute_type>",
      "need_sentence":"<strategy.need_sentence>"
    }
  }
}

参数说明:

参数

说明

<inference_id>

自定义的inference endpoint标识符。

service

指定使用的服务。调用阿里云AI搜索开放平台为alibabacloud-ai-search

service_settings

服务设置,必填。

└api_key

鉴权使用的API-KEY。获取方式,请参见管理API Key

└service_id

使用的模型服务名称,支持的值:

  • ops-document-split-001:文档切片服务-001

模型服务介绍,请参见文档切片

└host

调用服务的地址,支持通过公网、内网两种方式调用API服务。

获取服务地址,请参见API-KEY管理页面的API域名。例如http://default****.platform-cn-shanghai.opensearch.aliyuncs.com

workspace

工作空间名称,例如default

http_schema

HTTP类型(可选),可选值包括HTTPS(默认)和HTTP。

task_settings

任务设置,可选。

└document

文档配置。

└└content_encoding

content编码类型,目前仅支持utf8。

└└content_type

content格式,支持的值:

  • html

  • markdown

  • text(默认值)

└strategy

切片策略。

└└type

段落切片策略,目前仅支持default,根据文档段落格式进行切分。

└└max_chunk_size

切片的最大长度,默认300。

└└compute_type

长度计算方式,目前仅支持token,按照ops-text-embedding-001向量模型的tokenizer计算。

└└need_sentence

是否同时返回sentence级别切片,用于优化短query查询。

  • false(默认值)

  • true:如有需要可选true,token使用量翻倍。

创建示例:

PUT _inference/doc_split/os-doc-split
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "api_key": "OS-xxx",
    "service_id": "ops-document-split-001",
    "host" : "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
    "workspace" : "default"
  }
}

调用doc_split推理模型

调用模板:

POST _inference/doc_split/<inference_id>
{
  "input":"<input>"
}

参数说明:

  • <inference_id>:需要调用的inference endpoint标识符。

  • input:需要切片的纯文本内容。根据JSON标准,string字段如果包含字符\\\"\/\b\f\n\r\t,需要转义,常用JSON库生成的JSON串无需手动转义。

调用示例:

# query
POST _inference/doc_split/os-doc-split
{
  "input":"Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—​无论是开源还是私有。但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:一个分布式的实时文档存储,每个字段可以被索引与搜索.一个分布式实时分析搜索引擎.能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据.Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它 开箱即用。只需最少的理解,你很快就能具有生产力。随着你知识的积累,你可以利用 Elasticsearch 更多的高级特性,它的整个引擎是可配置并且灵活的。 从众多高级特性中,挑选恰当去修饰的 Elasticsearch,使它能解决你本地遇到的问题。你可以免费下载,使用,修改 Elasticsearch。它在 Apache 2 license 协议下发布的, 这是众多灵活的开源协议之一。Elasticsearch 的源码被托管在 Github 上 github.com/elastic/elasticsearch。 如果你想加入我们这个令人惊奇的 contributors 社区,看这里 Contributing to Elasticsearch。如果你对 Elasticsearch 有任何相关的问题,包括特定的特性(specific features)、语言客户端(language clients)、插件(plugins),可以在这里 discuss.elastic.co 加入讨论。"
}

# response
{
  "doc_split": {
    "rich_texts": [],
    "nodes": [
      {
        "parent_id": "af0d0ddc07844835883c76c046cb97fd",
        "id": "af0d0ddc07844835883c76c046cb97fd",
        "type": "root"
      },
      {
        "parent_id": "af0d0ddc07844835883c76c046cb97fd",
        "id": "d77e2ff8d7724ae797f991580299b680",
        "type": "sentence_node"
      },
      {
        "parent_id": "af0d0ddc07844835883c76c046cb97fd",
        "id": "aef1bc5fe2354f7a8b76ce07249a1836",
        "type": "sentence_node"
      }
    ],
    "chunks": [
      {
        "meta": {
          "parent_id": "af0d0ddc07844835883c76c046cb97fd",
          "id": "d77e2ff8d7724ae797f991580299b680",
          "type": "text",
          "token": 298
        },
        "content": "Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—​无论是开源还是私有。但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:一个分布式的实时文档存储,每个字段可以被索引与搜索.一个分布式实时分析搜索引擎.能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据.Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它 开箱即用"
      },
      {
        "meta": {
          "parent_id": "af0d0ddc07844835883c76c046cb97fd",
          "id": "aef1bc5fe2354f7a8b76ce07249a1836",
          "type": "text",
          "token": 160
        },
        "content": "只需最少的理解,你很快就能具有生产力。随着你知识的积累,你可以利用 Elasticsearch 更多的高级特性,它的整个引擎是可配置并且灵活的。 从众多高级特性中,挑选恰当去修饰的 Elasticsearch,使它能解决你本地遇到的问题。你可以免费下载,使用,修改 Elasticsearch。它在 Apache 2 license 协议下发布的, 这是众多灵活的开源协议之一。Elasticsearch 的源码被托管在 Github 上 github.com/elastic/elasticsearch。 如果你想加入我们这个令人惊奇的 contributors 社区,看这里 Contributing to Elasticsearch。如果你对 Elasticsearch 有任何相关的问题,包括特定的特性(specific features)、语言客户端(language clients)、插件(plugins),可以在这里 discuss.elastic.co 加入讨论。"
      }
    ]
  }
}

TEXT_EMBEDDING(文本向量

创建和调用文本向量服务,将文本数据转化为稠密向量形式表达,可用于信息检索、文本分类、相似性比较等场景。更多信息,请参见文本向量

创建text_embedding推理模型

创建模板:

PUT _inference/text_embedding/<inference_id>
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "api_key": "<API-KEY>",
    "service_id": "<service_id>",
    "host": "<host>",
    "workspace": "<workspace_name>",
    "http_schema":"<http_schema>"
  },
  "task_settings": {
    "input_type": "<input_type>"
  }
}

参数说明:

参数

说明

<inference_id>

自定义的inference endpoint标识符。

service

指定使用的服务。调用阿里云AI搜索开放平台为alibabacloud-ai-search

service_settings

服务设置,必填。

└api_key

鉴权使用的API-KEY。获取方式,请参见管理API Key

└service_id

使用的模型服务名称,支持的值:

  • ops-text-embedding-001:OpenSearch通用文本向量服务-001

  • ops-text-embedding-zh-001:OpenSearch文本向量服务-中文-001

  • ops-text-embedding-en-001:OpenSearch文本向量服务-英文-001

  • ops-text-embedding-002:OpenSearch通用文本向量服务-002

模型服务介绍,请参见文本向量

└host

调用服务的地址,支持通过公网、内网两种方式调用API服务。

获取服务地址,请参见API-KEY管理页面的API域名。例如default****.platform-cn-shanghai.opensearch.aliyuncs.com

说明

调用服务的地址host无需添加http://

workspace

工作空间名称,例如default

http_schema

HTTP类型(可选),可选值包括HTTPS(默认)和HTTP。

task_settings

任务设置,可选。

└input_type

input的数据类型,支持的值:

  • search:查询时使用

  • ingest(默认):写入时使用

创建示例:

PUT _inference/text_embedding/os-embeddings
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "api_key": "OS-xxx",
    "service_id": "ops-text-embedding-001",
    "host" : "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
    "workspace" : "default"
  }
}

调用text_embedding推理模型

调用模板:

POST _inference/text_embedding/<inference_id>
{
  "input":[<input>]
}

参数说明:

  • <inference_id>:需要调用的inference endpoint标识符。

  • input:输入内容。每次请求最多支持32条文本输入,每一条文本的长度大小取决于选择的模型。不支持空的字符串。

调用示例:

# query
POST _inference/text_embedding/os-embeddings
{
  "input":["科学技术是第一生产力",
        "elasticsearch产品文档"]
}

# response
{
  "text_embedding": [
    {
      "embedding": [
        -0.029408421,
        0.061318535,
        ... 
        ]
    },
    {
      "embedding": [
        0.01568979,
        0.065073475,
        ...
        ]
    }
  ]
}

SPARSE_EMBEDDING(文本稀疏向量

创建和调用文本稀疏向量服务,将文本数据转化为稀疏向量形式表达,稀疏向量存储空间更小,常用于表达关键词和词频信息,可与稠密向量搭配进行混合检索,提升检索效果。更多信息,请参见文本稀疏向量

创建sparse_embedding推理模型

创建模板:

PUT _inference/sparse_embedding/<inference_id>
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "api_key": "<API-KEY>",
    "service_id": "<service_id>",
    "host": "<host>",
    "workspace": "<workspace_name>",
    "http_schema":"<http_schema>"
  },
  "task_settings": {
    "input_type": "<input_type>"
  }
}

参数说明:

参数

说明

<inference_id>

自定义的inference endpoint标识符。

service

指定使用的服务。调用阿里云AI搜索开放平台为alibabacloud-ai-search

service_settings

服务设置,必填。

└api_key

鉴权使用的API-KEY。获取方式,请参见管理API Key

└service_id

使用的模型服务名称,支持的值:

  • ops-text-sparse-embedding-001:OpenSearch文本稀疏向量服务-001

模型服务介绍,请参见文本稀疏向量

└host

调用服务的地址,支持通过公网、内网两种方式调用API服务。

获取服务地址,请参见API-KEY管理页面的API域名。例如http://default****.platform-cn-shanghai.opensearch.aliyuncs.com

workspace

工作空间名称,例如default

http_schema

HTTP类型(可选),可选值包括HTTPS(默认)和HTTP。

task_settings

任务设置,可选。

└input_type

input的数据类型,支持的值:

  • search:查询时使用

  • ingest(默认):写入时使用

return_token

返回Token:

  • false(默认)

  • true:该接口返回的内容,主键从tokenid变为tokenName。

调用示例:

PUT _inference/sparse_embedding/os-sparse-embeddings
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "api_key": "OS-xxx",
    "service_id": "ops-text-sparse-embedding-001",
    "host" : "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
    "workspace" : "default"
  }
}

调用sparse_embedding推理模型

调用模板:

POST _inference/sparse_embedding/<inference_id>
{
  "input":[<input>]
}

参数说明:

  • <inference_id>:需要调用的inference endpoint标识符。

  • input:输入内容。每次请求最多支持32条文本输入,每一条文本的长度大小取决于选择的模型。不支持空的字符串。

调用示例:

# query
POST _inference/sparse_embedding/os-sparse-embeddings
{"input":["科学技术是第一生产力","elasticsearch产品文档"]}

# response
{
  "sparse_embedding" : [
    {
      "is_truncated" : false,
      "embedding" : {
        "6" : 0.10144043,
        "163040" : 0.2841797,
        "354" : 0.14318848,
        "5998" : 0.16149902,
        "8550" : 0.23901367,
        "2017" : 0.16137695
      }
    },
    {
      "is_truncated" : false,
      "embedding" : {
        "6" : 0.0035858154,
        "128766" : 0.24768066,
        "86250" : 0.2680664,
        "5889" : 0.19616699,
        "2564" : 0.12634277,
        "59529" : 0.19226074
      }
    }
  ]
}

QUERY ANALYZE(查询分析)

创建和调用查询分析服务,将您输入的Query进行意图理解,并进行相似问题扩展。更多信息,请参见查询分析

创建query_analyze推理模型

创建模板:

PUT _inference/query_analyze/<inference_id>
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "host" : "<host>",
    "api_key":"<api_key>",
    "service_id": "<service_id>",
    "workspace" : "<work_space>",
    "http_schema":"<http_schema>"
  }
}

参数说明:

参数

说明

<inference_id>

自定义的inference endpoint标识符。

service

指定使用的服务。调用阿里云AI搜索开放平台为alibabacloud-ai-search

service_settings

服务设置,必填。

└api_key

鉴权使用的API-KEY。获取方式,请参见管理API Key

└service_id

使用的模型服务名称,支持的值:

ops-query-analyze-001:查询分析服务

模型服务介绍,请参见查询分析

└host

调用服务的地址,支持通过公网、内网两种方式调用API服务。

获取服务地址,请参见API-KEY管理页面的API域名。例如http://default****.platform-cn-shanghai.opensearch.aliyuncs.com

workspace

工作空间名称,例如default

http_schema

HTTP类型(可选),可选值包括HTTPS(默认)和HTTP。

创建示例:

PUT _inference/query_analyze/query_analyze_test
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "api_key": "OS-xxx",
    "service_id": "ops-query-analyze-001",
    "host": "default-***.platform-cn-shanghai.opensearch.aliyuncs.com",
    "workspace": "default"
  }
}

调用query_analyze推理模型

调用模板:

POST _inference/query_analyze/<inference_id>
{
  "input":"<input>",
  "task_settings": {
    "history": [
      {
        "content": "<history.content>",
        "role": "<history.role>"
      },
      {
        "content": "<history.content>",
        "role": "<history.role>"
      }
    ]
  }
}

参数说明:

参数

说明

<inference_id>

需要调用的inference endpoint标识符。

input

需要进行查询分析的Query。

task_settings

任务设置,可选。

└history

历史消息。

└└content

历史消息的内容。

└└role

历史消息的发送者,角色可选值包括:

  • system

  • user

  • assistant

调用示例:

POST _inference/query_analyze/query_analyze_test
{
  "input":"有多少人口",
  "task_settings": {
    "history": [
      {
        "content": "中国的首都在哪",
        "role": "user"
      },
      {
        "content": "北京",
        "role": "assistant"
      }
    ]
  }
}

RERANK(排序服务

创建和调用文档相关性打分服务,根据Query与文档内容的相关性,按分数由高到低对doc进行排序,并输出对应的打分结果。更多信息,请参见排序服务

创建rerank推理服务

创建模板:

PUT _inference/rerank/<inference_id>
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "host": "<host>",
    "api_key": "<API-KEY>",
    "service_id": "<service_id>",
    "workspace": "<workspace_name>",
    "http_schema":"<http_schema>"
  }
}

参数说明:

参数

说明

<inference_id>

自定义的inference endpoint标识符。

service

指定使用的服务。调用阿里云AI搜索开放平台为alibabacloud-ai-search

service_settings

服务设置,必填。

└api_key

鉴权使用的API-KEY。获取方式,请参见管理API Key

└service_id

使用的模型服务名称,支持的值:

  • ops-bge-reranker-larger:BGE重排模型

模型服务介绍,请参见排序服务

└host

调用服务的地址,支持通过公网、内网两种方式调用API服务。

获取服务地址,请参见API-KEY管理页面的API域名。例如http://default****.platform-cn-shanghai.opensearch.aliyuncs.com

workspace

工作空间名称,例如default

http_schema

HTTP类型(可选),可选值包括HTTPS(默认)和HTTP。

调用示例:

PUT _inference/rerank/os-rerank
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "api_key": "OS-xxx",
    "service_id": "ops-bge-reranker-larger",
    "host" : "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
    "workspace" : "default"
  }
}

调用rerank推理模型

调用模板:

POST _inference/rerank/<inference_id>
{
  "input": [<input_list>],
  "query": "<query>"
}

参数说明:

  • infenrece_id:需要调用的inference endpoint标识符。

  • input:列表形式的文档内容。

  • query:查询内容。

调用示例:

# query
POST _inference/rerank/os-rerank
{
  "input": ["luke", "like", "leia", "chewy","r2d2", "star", "wars"],
  "query": "star wars main character"
}

# response
{
  "rerank": [
    {
      "index": 5,
      "score": 0.34587815
    },
    {
      "index": 6,
      "score": 0.10338597
    },
    {
      "index": 2,
      "score": 0.071332
    },
    {
      "index": 0,
      "score": 0.04681203
    },
    {
      "index": 4,
      "score": 0.015189049
    },
    {
      "index": 1,
      "score": 0.0013406205
    },
    {
      "index": 3,
      "score": 0.00109019
    }
  ]
}

COMPLETION(内容生成服务)

创建和调用大模型服务,调用包含基于阿里巴巴自研模型底座微调的RAG专属大模型。更多信息,请参见内容生成服务

创建completion推理模型

创建模板:

PUT _inference/completion/<inference_id>
{
    "service": "alibabacloud-ai-search",
    "service_settings": {
      "api_key":"<api_key>",
      "service_id": "<service_id>",
      "host" : "<host>",
      "workspace" : "<work_space>",
      "http_schema":"<http_schema>"
    }
}

参数说明:

参数

说明

<inference_id>

自定义的inference endpoint标识符。

service

指定使用的服务。调用阿里云AI搜索开放平台为alibabacloud-ai-search

service_settings

服务设置,必填。

└api_key

鉴权使用的API-KEY。获取方式,请参见管理API Key

└service_id

使用的模型服务名称,支持的值:

  • ops-qwen-turbo:OpenSearch-通义千问-Turbo

  • qwen-turbo:通义千问-Turbo

  • qwen-plus:通义千问-Plus

  • qwen-max:通义千问-Max

模型服务介绍,请参见内容生成服务

└host

调用服务的地址,支持通过公网、内网两种方式调用API服务。

获取服务地址,请参见API-KEY管理页面的API域名。例如default****.platform-cn-shanghai.opensearch.aliyuncs.com

说明

调用服务的地址host无需添加http://

workspace

工作空间名称,例如default

http_schema

HTTP类型(可选),可选值包括HTTPS(默认)和HTTP。

创建示例:

PUT _inference/completion/os-completion-test
{
    "service": "alibabacloud-ai-search",
    "service_settings": {
      "api_key": "OS-xxx",
      "service_id": "ops-qwen-turbo",
      "workspace" : "default",
      "host" : "default-XXX.platform-cn-shanghai.opensearch.aliyuncs.com"
    }
}

调用completion推理模型

调用模板:

POST _inference/completion/<inference_id>
{
  "input":["<input>"]
}

参数说明:

  • <inference_id>:需要调用的inference endpoint标识符。

  • input:模型输入内容。输入需要为奇数(n + 1)个,前n个输入代表用户和模型的对话,最后一个输入代表当前的输入信息。

调用示例:

POST _inference/completion/os-completion-test
{
  "input":["河南省会是哪里"]
}

POST _inference/completion/os-completion-test
{
  "input":["河南省会是哪里", "郑州", "那里有什么好玩的"]
}

GET Inference API

获取推理模型信息。更多信息,请参见Get inference API

GET /_inference/_all

GET /_inference/<inference_id>

GET /_inference/<task_type>/_all

GET /_inference/<task_type>/<inference_id>

参数说明:

  • <inference_id>:自定义的inference endpoint标识符。

  • <task_type>:inference接口类型,支持的值:

    • text_embedding

    • sparse_embedding

    • rerank

调用示例:

# query
GET _inference/_all

# response
{
  "models": [
    {
      "model_id": "os-embeddings",
      "task_type": "text_embedding",
      "service": "alicloud-ai-search",
      "service_settings": {
        "similarity": "dot_product",
        "dimensions": 1536,
        "service_id": "ops-text-embedding-001",
        "host": "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
        "workspace": "default"
      },
      "task_settings": {}
    },
    {
      "model_id": "os-rerank",
      "task_type": "rerank",
      "service": "alicloud-ai-search",
      "service_settings": {
        "service_id": "ops-bge-reranker-larger",
        "host": "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
        "workspace": "default"
      },
      "task_settings": {}
    },
    {
      "model_id": "os-sparse-embeddings",
      "task_type": "sparse_embedding",
      "service": "alicloud-ai-search",
      "service_settings": {
        "service_id": "ops-text-sparse-embedding-001",
        "host": "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
        "workspace": "default"
      },
      "task_settings": {}
    }
  ]
}

DELETE Inference API

删除推理模型。更多信息,请参见DELETE Inference API

DELETE /_inference/<inference_id>

DELETE /_inference/<task_type>/<inference_id>

参数说明:

  • <inference_id>:自定义的inference endpoint标识符。

  • <task_type>:inference接口类型,支持的值:

    • text_embedding

    • sparse_embedding

    • rerank

调用示例:

# query
DELETE _inference/os-rerank

# response
{
  "acknowledged": true
}

Ingest Processor扩展

Ingest Processor是一种用于处理和转换数据的工具,通过配置Ingest Processor,您可以对数据进行格式转换、清洗和预处理,以便将满足数据格式要求的数据导入阿里云ES中。

基于阿里云搜索开放平台的Inference扩展,阿里云ES实现了以下几个自定义的ingest processor,您可以通过更方便的配置将数据导入ES中。

split doc processor

split doc processor使用doc_split模型,将一个富文本切成多个chunk。

创建split doc processor

PUT _ingest/pipeline/<pipeline_name>
{
  "description": "<description>",
  "processors": [
    {
      "document_splitting": {
        "model_id": "<model_id>",
        "input_output": [
          {
            "input_field": "<input_type>",
            "output_field": "<input_field>",
            "extend_output_field": "<extend_output_field>"
          }
        ]
      }
    }
  ]
}

参数说明:

参数

说明

pipeline_name

自定义pipeline的名称。

description

pipeline的说明。

model_id

定义的文档切片服务对应的model_id。

input_field

输入的字段名。

output_field

输出结果的字段名。

extend_output_field

额外的输出结果的字段名,一些需要二次处理的结果会在这个字段中。

调用示例:

PUT _ingest/pipeline/os-split-doc-pipeline
{
  "description": "This is an example of split doc pipeline",
  "processors": [
    {
      "document_splitting": {
        "model_id": "os-doc-split",
        "input_output": [
          {
            "input_field": "content",
            "output_field": "chunk",
            "extend_output_field": "chunk_ext"
          }
        ]
      }
    }
  ]
}

使用_simulate测试pipeline功能

POST _ingest/pipeline/os-split-doc-pipeline/_simulate
{
  "docs": [
    {
      "_index": "testindex",
      "_id": "1",
      "_source":{
        "content": "Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—​无论是开源还是私有。但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:一个分布式的实时文档存储,每个字段可以被索引与搜索.一个分布式实时分析搜索引擎.能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据.Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它 开箱即用。只需最少的理解,你很快就能具有生产力。随着你知识的积累,你可以利用 Elasticsearch 更多的高级特性,它的整个引擎是可配置并且灵活的。 从众多高级特性中,挑选恰当去修饰的 Elasticsearch,使它能解决你本地遇到的问题。你可以免费下载,使用,修改 Elasticsearch。它在 Apache 2 license 协议下发布的, 这是众多灵活的开源协议之一。Elasticsearch 的源码被托管在 Github 上 github.com/elastic/elasticsearch。 如果你想加入我们这个令人惊奇的 contributors 社区,看这里 Contributing to Elasticsearch。如果你对 Elasticsearch 有任何相关的问题,包括特定的特性(specific features)、语言客户端(language clients)、插件(plugins),可以在这里 discuss.elastic.co 加入讨论。"
      }
    }
    ]
}

返回的Response如下:

{
  "docs": [
    {
      "doc": {
        "_index": "testindex",
        "_version": "-3",
        "_id": "1",
        "_source": {
          "chunk_ext": [],
          "chunk": [
            {
              "meta": {
                "id": "0284a0f5644540c8b3c6ddefd897353f",
                "type": "text",
                "parent_id": "d88a5098fd5d446da7f81f9074b47591",
                "token": 298
              },
              "content": "Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—​无论是开源还是私有。但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:一个分布式的实时文档存储,每个字段可以被索引与搜索.一个分布式实时分析搜索引擎.能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据.Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它 开箱即用"
            },
            {
              "meta": {
                "id": "f6d8063c562240cabeb52365999eeea3",
                "type": "text",
                "parent_id": "d88a5098fd5d446da7f81f9074b47591",
                "token": 160
              },
              "content": "只需最少的理解,你很快就能具有生产力。随着你知识的积累,你可以利用 Elasticsearch 更多的高级特性,它的整个引擎是可配置并且灵活的。 从众多高级特性中,挑选恰当去修饰的 Elasticsearch,使它能解决你本地遇到的问题。你可以免费下载,使用,修改 Elasticsearch。它在 Apache 2 license 协议下发布的, 这是众多灵活的开源协议之一。Elasticsearch 的源码被托管在 Github 上 github.com/elastic/elasticsearch。 如果你想加入我们这个令人惊奇的 contributors 社区,看这里 Contributing to Elasticsearch。如果你对 Elasticsearch 有任何相关的问题,包括特定的特性(specific features)、语言客户端(language clients)、插件(plugins),可以在这里 discuss.elastic.co 加入讨论。"
            }
          ],
          "content": "Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—​无论是开源还是私有。但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:一个分布式的实时文档存储,每个字段可以被索引与搜索.一个分布式实时分析搜索引擎.能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据.Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它 开箱即用。只需最少的理解,你很快就能具有生产力。随着你知识的积累,你可以利用 Elasticsearch 更多的高级特性,它的整个引擎是可配置并且灵活的。 从众多高级特性中,挑选恰当去修饰的 Elasticsearch,使它能解决你本地遇到的问题。你可以免费下载,使用,修改 Elasticsearch。它在 Apache 2 license 协议下发布的, 这是众多灵活的开源协议之一。Elasticsearch 的源码被托管在 Github 上 github.com/elastic/elasticsearch。 如果你想加入我们这个令人惊奇的 contributors 社区,看这里 Contributing to Elasticsearch。如果你对 Elasticsearch 有任何相关的问题,包括特定的特性(specific features)、语言客户端(language clients)、插件(plugins),可以在这里 discuss.elastic.co 加入讨论。"
        },
        "_ingest": {
          "timestamp": "2024-07-16T06:34:56.003299351Z"
        }
      }
    }
  ]
}

text embedding processor

text embedding processor简化了写入的embedding处理,text_embedding和sparse_embedding类型均可以使用该processor。

text embedding processor支持nested类型的文档直接进行embedding,不过受限于模型一次处理的embedding chunk数量,一般一个nested文档不能超过32个子文档。如果超过32个子文档,需要使用foreach processor处理。

说明

关于foreach processor的更多信息,请参见foreach-processor

创建text embedding processor

PUT _ingest/pipeline/<pipeline_name>
{
  "description": "<description>",
  "processors": [
    {
      "text_embedding": {
        "model_id": "<model_id>",
        "input_output": [
          {
            "input_type" : "<input_type>",
            "input_field": "<input_field>",
            "output_field": "<output_field>"
          }
        ]
      }
    }
  ]
}

参数说明:

参数

说明

pipeline_name

自定义pipeline的名称。

description

pipeline的说明。

model_id

定义的文档切片服务对应的model_id。

input_type

输入字段的类型。可选值包括:

  • basic(默认):对单个字段进行embedding,得到对应的embedding结果,basic是一对一的embedding。

  • array:对一个数组字段进行embedding,生成一组embedding结果。

  • nested:支持nested的embedding,输入一个nested字段的子字段,输出可以设置为nested字段中添加一个embedding字段。

input_field

输入的字段名。

output_field

输出结果的字段名。

调用示例:

PUT _ingest/pipeline/os-embedding-pipeline
{
  "description": "This is an example of embedding fields",
  "processors": [
    {
      "text_embedding": {
        "model_id": "os-embeddings",
        "input_output": [
          {
            "input_field": "content",
            "output_field": "content_embedding"
          }
        ]
      }
    }
  ]
}

使用_simulate测试pipeline的功能

POST _ingest/pipeline/os-embedding-pipeline/_simulate
{
  "docs": [
    {
      "_index": "testindex",
      "_id": "1",
      "_source":{
        "content": "elasticsearch产品文档"
      }
    }
    ]
}

正确的返回结果:

{
  "docs": [
    {
      "doc": {
        "_index": "testindex",
        "_version": "-3",
        "_id": "1",
        "_source": {
          "content_embedding": [
            0.01568979024887085,
            0.06507347524166107,
            ...
          ],
          "model_id": "os-embeddings",
          "content": "elasticsearch产品文档"
        },
        "_ingest": {
          "timestamp": "2024-07-16T06:36:06.803526132Z"
        }
      }
    }
  ]
}