阿里云Elasticsearch(簡稱ES)提供了Inference API,可使用外部各個公司提供的推理模型服務,同時阿里云ES擴展了Inference API的服務,使之可以使用阿里云的推理模型服務(AI搜索開放平臺)。本文介紹Inference API擴展的AI搜索開放平臺支持的推理模型服務API。
背景信息
AI搜索開放平臺圍繞智能搜索及RAG場景,提供優質的組件化服務以及靈活的調用機制,內置文檔解析、文檔切片、文本向量、召回、排序和大模型等服務,可實現一站式靈活的AI搜索業務開發。
關于AI搜索開放平臺的更多信息,請參見AI搜索開放平臺介紹。
關于Inference API的更多信息,請參見Inference API。
文檔參數說明表中的└
符號表示子參數。
Inference APIs介紹
阿里云ES支持的Inference APIs如下表所示。
接口 | 描述 | 適用版本 | 相關文檔 |
DOCUMENT ANALYZE(文檔內容解析) | 支持從非結構化文檔中提取出標題、分段等邏輯層級結構,以及文本、表格、圖片等信息,并以結構化的格式輸出。 | ES 8.15及以上版本 | |
IMAGE ANALYZE(圖片內容提取) | 提供圖片內容解析服務,基于多模態大模型對圖片內容進行解析理解以及文字識別。 提供圖片內容OCR識別服務,基于OCR能力對圖片文字進行識別,將文字信息提取出來。 | ES 8.15及以上版本 | |
SPLIT_DOC(文檔切片) | 提供通用的文本切片策略,可基于文檔段落格式、文本語義、指定規則,對html、markdown、txt格式的結構化數據進行拆分,同時支持富文本形式提取code、 image、table。 | ES 8.13及以上版本 | |
TEXT_EMBEDDING(文本向量) | 文本向量服務將文本數據轉化為稠密向量形式表達,可用于信息檢索、文本分類、相似性比較等場景。 | ES 8.13及以上版本 | |
SPARSE_EMBEDDING(文本稀疏向量) | 文本稀疏向量服務將文本數據轉化為稀疏向量形式表達,稀疏向量存儲空間更小,常用于表達關鍵詞和詞頻信息,可與稠密向量搭配進行混合檢索,提升檢索效果。 | ES 8.13及以上版本 | |
QUERY ANALYZE(查詢分析) | 提供Query內容分析服務,基于大語言模型及NLP能力,可對您輸入的查詢內容進行意圖識別、相似問題擴展、NL2SQL處理等,有效提升RAG場景中檢索問答效果。 | ES 8.15及以上版本 | |
RERANK(排序服務) | 文檔相關性打分服務,提供通用的文檔打分能力,可根據query與文檔內容的相關性,按分數由高到低對doc進行排序,并輸出對應的打分結果。 | ES 8.13及以上版本 | |
COMPLETION(內容生成服務) | 調用包含基于阿里巴巴自研模型底座微調的RAG專屬大模型服務。可結合文檔處理、檢索服務等,在RAG場景中廣泛應用,提升答案的準確率,降低幻覺率。 | ES 8.15及以上版本 |
創建和調用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搜索開放平臺為 |
service_settings | 服務設置,必填。 |
└api_key | 鑒權使用的API-KEY。獲取方式,請參見管理API Key。 |
└service_id | 使用的模型服務名稱,支持的值:
模型服務介紹,請參見文檔內容解析。 |
└host | 調用服務的地址,支持通過公網、內網兩種方式調用API服務。 獲取服務地址,請參見API-KEY管理頁面的API域名。例如 |
workspace | 工作空間名稱,例如 |
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 | 文檔的類型:
|
└document.file_name | 文件名。如果該參數為空,根據url推斷,如果url也為空,則需要指定該參數。 |
└document.file_type | 文件類型。如果該參數為空,根據file_name的后綴推斷,如果無法推斷則需要指定該參數,例如pdf、doc、docx。 |
└output.image_storage | 圖片存儲方式:
|
└is_async | 是否異步調用:
|
調用示例:
# 同步
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搜索開放平臺為 |
service_settings | 服務設置,必填。 |
└api_key | 鑒權使用的API-KEY。獲取方式,請參見管理API Key。 |
└service_id | 使用的模型服務名稱,支持的值:
模型服務介紹,請參見圖片內容提取。 |
└host | 調用服務的地址,支持通過公網、內網兩種方式調用API服務。 獲取服務地址,請參見API-KEY管理頁面的API域名。例如 |
workspace | 工作空間名稱,例如 |
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 | 文檔的類型:
|
└document.file_name | 文件名。如果該參數為空,根據url推斷,如果url也為空,則需要指定該參數。 |
└document.file_type | 文件類型。如果該參數為空,根據file_name的后綴推斷,如果無法推斷則需要指定該參數,例如,jpg, jpeg, png, bmp,tiff。 |
└is_async | 是否異步調用:
|
調用示例:
# 同步
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搜索開放平臺為 |
service_settings | 服務設置,必填。 |
└api_key | 鑒權使用的API-KEY。獲取方式,請參見管理API Key。 |
└service_id | 使用的模型服務名稱,支持的值:
模型服務介紹,請參見文檔切片。 |
└host | 調用服務的地址,支持通過公網、內網兩種方式調用API服務。 獲取服務地址,請參見API-KEY管理頁面的API域名。例如 |
workspace | 工作空間名稱,例如 |
http_schema | HTTP類型(可選),可選值包括HTTPS(默認)和HTTP。 |
task_settings | 任務設置,可選。 |
└document | 文檔配置。 |
└└content_encoding | content編碼類型,目前僅支持utf8。 |
└└content_type | content格式,支持的值:
|
└strategy | 切片策略。 |
└└type | 段落切片策略,目前僅支持 |
└└max_chunk_size | 切片的最大長度,默認300。 |
└└compute_type | 長度計算方式,目前僅支持 |
└└need_sentence | 是否同時返回sentence級別切片,用于優化短query查詢。
|
創建示例:
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搜索開放平臺為 |
service_settings | 服務設置,必填。 |
└api_key | 鑒權使用的API-KEY。獲取方式,請參見管理API Key。 |
└service_id | 使用的模型服務名稱,支持的值:
模型服務介紹,請參見文本向量。 |
└host | 調用服務的地址,支持通過公網、內網兩種方式調用API服務。 獲取服務地址,請參見API-KEY管理頁面的API域名。例如 說明 調用服務的地址host無需添加 |
workspace | 工作空間名稱,例如 |
http_schema | HTTP類型(可選),可選值包括HTTPS(默認)和HTTP。 |
task_settings | 任務設置,可選。 |
└input_type | input的數據類型,支持的值:
|
創建示例:
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搜索開放平臺為 |
service_settings | 服務設置,必填。 |
└api_key | 鑒權使用的API-KEY。獲取方式,請參見管理API Key。 |
└service_id | 使用的模型服務名稱,支持的值:
模型服務介紹,請參見文本稀疏向量。 |
└host | 調用服務的地址,支持通過公網、內網兩種方式調用API服務。 獲取服務地址,請參見API-KEY管理頁面的API域名。例如 |
workspace | 工作空間名稱,例如 |
http_schema | HTTP類型(可選),可選值包括HTTPS(默認)和HTTP。 |
task_settings | 任務設置,可選。 |
└input_type | input的數據類型,支持的值:
|
return_token | 返回Token:
|
調用示例:
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搜索開放平臺為 |
service_settings | 服務設置,必填。 |
└api_key | 鑒權使用的API-KEY。獲取方式,請參見管理API Key。 |
└service_id | 使用的模型服務名稱,支持的值: ops-query-analyze-001:查詢分析服務 模型服務介紹,請參見查詢分析。 |
└host | 調用服務的地址,支持通過公網、內網兩種方式調用API服務。 獲取服務地址,請參見API-KEY管理頁面的API域名。例如 |
workspace | 工作空間名稱,例如 |
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 | 歷史消息的發送者,角色可選值包括:
|
調用示例:
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搜索開放平臺為 |
service_settings | 服務設置,必填。 |
└api_key | 鑒權使用的API-KEY。獲取方式,請參見管理API Key。 |
└service_id | 使用的模型服務名稱,支持的值:
模型服務介紹,請參見排序服務。 |
└host | 調用服務的地址,支持通過公網、內網兩種方式調用API服務。 獲取服務地址,請參見API-KEY管理頁面的API域名。例如 |
workspace | 工作空間名稱,例如 |
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搜索開放平臺為 |
service_settings | 服務設置,必填。 |
└api_key | 鑒權使用的API-KEY。獲取方式,請參見管理API Key。 |
└service_id | 使用的模型服務名稱,支持的值:
模型服務介紹,請參見內容生成服務。 |
└host | 調用服務的地址,支持通過公網、內網兩種方式調用API服務。 獲取服務地址,請參見API-KEY管理頁面的API域名。例如 說明 調用服務的地址host無需添加 |
workspace | 工作空間名稱,例如 |
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 | 輸入字段的類型。可選值包括:
|
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"
}
}
}
]
}