Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Руководство [8.17] ›REST API ›API вывода

Интеграция Elasticsearch с выводом

Новая справка по API

Для получения самых актуальных данных по API обратитесь к API-интерфейсам вывода.

Создаёт конечную точку вывода для выполнения задачи вывода с помощью сервиса elasticsearch.

  • В вашем развертывании Elasticsearch есть предварительно настроенные конечные точки вывода ELSER и E5, вам нужно создать конечные точки с помощью API только в том случае, если вы хотите настроить параметры.
  • Если вы используете модель ELSER или E5 через сервис elasticsearch, запрос API автоматически загрузит и развернёт модель, если она ещё не загружена.

Запрос

PUT /_inference/<task_type>/<inference_id>

Параметры пути

<inference_id>
(Обязательно, строка) Уникальный идентификатор конечной точки вывода.
<task_type>

(Обязательно, строка) Тип задачи вывода, которую будет выполнять модель.

Доступные типы задач:

  • rerank,
  • sparse_embedding,
  • text_embedding.

Тело запроса

chunking_settings

(Необязательно, объект) Объект конфигурации фрагментации. Обратитесь к Настройка фрагментации, чтобы узнать больше о фрагментации.

max_chunk_size
(Необязательно, целое число) Указывает максимальный размер фрагмента в словах. По умолчанию 250. Это значение не может быть больше 300 или меньше 20 (для стратегии sentence) или 10 (для стратегии word).
overlap
(Необязательно, целое число) Только для стратегии фрагментации word. Указывает количество перекрывающихся слов для фрагментов. По умолчанию 100. Это значение не может быть больше половины max_chunk_size.
sentence_overlap
(Необязательно, целое число) Только для стратегии фрагментации sentence. Указывает количество перекрывающихся предложений для фрагментов. Может быть либо 1, либо 0. По умолчанию 1.
strategy
(Необязательно, строка) Указывает стратегию фрагментации. Может быть либо sentence, либо word.
service
(Обязательно, строка) Тип сервиса, поддерживаемого для указанного типа задачи. В этом случае, elasticsearch.
service_settings

(Обязательно, объект) Параметры, используемые для установки модели вывода.

Эти параметры специфичны для сервиса elasticsearch.

deployment_id
(Необязательно, строка) deployment_id существующего обученного развертывания модели. При использовании deployment_id, model_id является необязательным.
adaptive_allocations

(Необязательно, объект) Объект конфигурации адаптивных распределений. Если включено, количество распределений модели устанавливается на основе текущей загрузки процесса. При высокой загрузке автоматически создаётся новое распределение модели (учитывая значение max_number_of_allocations, если оно задано). При низкой загрузке автоматически удаляется распределение модели (учитывая значение min_number_of_allocations, если оно задано). Если adaptive_allocations включено, не задавайте количество распределений вручную.

enabled
(Необязательно, Булево) Если true, то adaptive_allocations включено. По умолчанию false.
max_number_of_allocations
(Необязательно, целое число) Указывает максимальное количество распределений для масштабирования. Если задано, оно должно быть больше или равно min_number_of_allocations.
min_number_of_allocations
(Необязательно, целое число) Указывает минимальное количество распределений для масштабирования. Если задано, оно должно быть больше или равно 0. Если не определено, развертывание масштабируется до 0.
model_id
(Обязательно, строка) Название модели, используемой для задачи вывода. Может быть идентификатором встроенной модели (например, .multilingual-e5-small для E5), модели текстовых вложений, уже загруженной через Eland.
num_allocations
(Обязательно, целое число) Общее количество распределений, назначенных этой модели на узлах машинного обучения. Увеличение этого значения, как правило, увеличивает пропускную способность. Если adaptive_allocations включено, не устанавливайте это значение, так как оно устанавливается автоматически.
num_threads
(Обязательно, целое число) Устанавливает количество потоков, используемых каждым распределением модели во время вывода. Это, как правило, увеличивает скорость каждого запроса вывода. Процесс вывода — это вычислительно ограниченный процесс; threads_per_allocations не должно превышать количество доступных выделенных процессоров на узел. Должно быть степенью двойки. Максимально разрешённое значение — 32.
task_settings

(Необязательно, объект) Параметры для настройки задачи вывода. Эти параметры специфичны для указанного вами <task_type>.

task_settings для типа задачи rerank
return_documents
(Необязательно, Булево) Возвращает документ вместо только индекса. По умолчанию true.

ELSER через сервис elasticsearch

Следующий пример демонстрирует, как создать конечную точку вывода под названием my-elser-model для выполнения задачи типа sparse_embedding.

Запрос API ниже автоматически загрузит модель ELSER, если она ещё не загружена, и затем развернёт модель.

resp = client.inference.put(
    task_type="sparse_embedding",
    inference_id="my-elser-model",
    inference_config={
        "service": "elasticsearch",
        "service_settings": {
            "adaptive_allocations": {
                "enabled": True,
                "min_number_of_allocations": 1,
                "max_number_of_allocations": 4
            },
            "num_threads": 1,
            "model_id": ".elser_model_2"
        }
    },
)
print(resp)
const response = await client.inference.put({
  task_type: "sparse_embedding",
  inference_id: "my-elser-model",
  inference_config: {
    service: "elasticsearch",
    service_settings: {
      adaptive_allocations: {
        enabled: true,
        min_number_of_allocations: 1,
        max_number_of_allocations: 4,
      },
      num_threads: 1,
      model_id: ".elser_model_2",
    },
  },
});
console.log(response);
PUT _inference/sparse_embedding/my-elser-model
{
  "service": "elasticsearch",
  "service_settings": {
    "adaptive_allocations": { 
      "enabled": true,
      "min_number_of_allocations": 1,
      "max_number_of_allocations": 4
    },
    "num_threads": 1,
    "model_id": ".elser_model_2" 
  }
}

Адаптивные распределения будут включены с минимальным значением 1 и максимальным значением 10 распределений.

model_id должен быть идентификатором одной из встроенных моделей ELSER. Допустимые значения — .elser_model_2 и .elser_model_2_linux-x86_64. Более подробные сведения см. в документации по модели ELSER.

Elastic Rerank через сервис elasticsearch

Следующий пример демонстрирует, как создать конечную точку вывода под названием my-elastic-rerank для выполнения задачи типа rerank с использованием встроенной модели кросс-кодирования Elastic Rerank.

Запрос API ниже автоматически загрузит модель Elastic Rerank, если она ещё не загружена, и затем развернёт модель. После развертывания модель может быть использована для семантического повторного ранжирования с помощью text_similarity_reranker ретривера.

resp = client.inference.put(
    task_type="rerank",
    inference_id="my-elastic-rerank",
    inference_config={
        "service": "elasticsearch",
        "service_settings": {
            "model_id": ".rerank-v1",
            "num_threads": 1,
            "adaptive_allocations": {
                "enabled": True,
                "min_number_of_allocations": 1,
                "max_number_of_allocations": 4
            }
        }
    },
)
print(resp)
const response = await client.inference.put({
  task_type: "rerank",
  inference_id: "my-elastic-rerank",
  inference_config: {
    service: "elasticsearch",
    service_settings: {
      model_id: ".rerank-v1",
      num_threads: 1,
      adaptive_allocations: {
        enabled: true,
        min_number_of_allocations: 1,
        max_number_of_allocations: 4,
      },
    },
  },
});
console.log(response);
PUT _inference/rerank/my-elastic-rerank
{
  "service": "elasticsearch",
  "service_settings": {
    "model_id": ".rerank-v1", 
    "num_threads": 1,
    "adaptive_allocations": { 
      "enabled": true,
      "min_number_of_allocations": 1,
      "max_number_of_allocations": 4
    }
  }
}

model_id должен быть идентификатором встроенной модели Elastic Rerank: .rerank-v1.

Адаптивные распределения будут включены с минимальным значением 1 и максимальным значением 10 распределений.

E5 через сервис elasticsearch

Следующий пример демонстрирует, как создать конечную точку вывода под названием my-e5-model для выполнения задачи типа text_embedding.

Запрос API ниже автоматически загрузит модель E5, если она ещё не загружена, и затем развернёт модель.

resp = client.inference.put(
    task_type="text_embedding",
    inference_id="my-e5-model",
    inference_config={
        "service": "elasticsearch",
        "service_settings": {
            "num_allocations": 1,
            "num_threads": 1,
            "model_id": ".multilingual-e5-small"
        }
    },
)
print(resp)
const response = await client.inference.put({
  task_type: "text_embedding",
  inference_id: "my-e5-model",
  inference_config: {
    service: "elasticsearch",
    service_settings: {
      num_allocations: 1,
      num_threads: 1,
      model_id: ".multilingual-e5-small",
    },
  },
});
console.log(response);
PUT _inference/text_embedding/my-e5-model
{
  "service": "elasticsearch",
  "service_settings": {
    "num_allocations": 1,
    "num_threads": 1,
    "model_id": ".multilingual-e5-small" 
  }
}

model_id должен быть идентификатором одной из встроенных моделей E5. Допустимые значения — .multilingual-e5-small и .multilingual-e5-small_linux-x86_64. Более подробные сведения см. в документации по модели E5.

При использовании консоли Kibana вы можете увидеть ошибку 502 Bad Gateway в ответе. Эта ошибка, как правило, просто отражает таймаут, в то время как модель загружается в фоновом режиме. Вы можете проверить процесс загрузки в пользовательском интерфейсе Machine Learning. Если вы используете клиент Python, вы можете установить параметр timeout на более высокое значение.

Модели, загруженные Eland через сервис elasticsearch

Следующий пример демонстрирует, как создать конечную точку вывода, названную my-msmarco-minilm-model, для выполнения задачи типа text_embedding.

resp = client.inference.put(
    task_type="text_embedding",
    inference_id="my-msmarco-minilm-model",
    inference_config={
        "service": "elasticsearch",
        "service_settings": {
            "num_allocations": 1,
            "num_threads": 1,
            "model_id": "msmarco-MiniLM-L12-cos-v5"
        }
    },
)
print(resp)
const response = await client.inference.put({
  task_type: "text_embedding",
  inference_id: "my-msmarco-minilm-model",
  inference_config: {
    service: "elasticsearch",
    service_settings: {
      num_allocations: 1,
      num_threads: 1,
      model_id: "msmarco-MiniLM-L12-cos-v5",
    },
  },
});
console.log(response);
PUT _inference/text_embedding/my-msmarco-minilm-model 
{
  "service": "elasticsearch",
  "service_settings": {
    "num_allocations": 1,
    "num_threads": 1,
    "model_id": "msmarco-MiniLM-L12-cos-v5" 
  }
}

Укажите уникальный идентификатор для конечной точки вывода. inference_id должен быть уникальным и не должен совпадать с model_id.

model_id должен быть идентификатором модели текстового вложения, которая уже была загружена через Eland.

Настройка адаптивного распределения для E5 через сервис elasticsearch

Следующий пример демонстрирует, как создать конечную точку вывода, названную my-e5-model, для выполнения задачи типа text_embedding и настроить адаптивные распределения.

Запрос API ниже автоматически загрузит модель E5, если она еще не загружена, а затем развернет модель.

resp = client.inference.put(
    task_type="text_embedding",
    inference_id="my-e5-model",
    inference_config={
        "service": "elasticsearch",
        "service_settings": {
            "adaptive_allocations": {
                "enabled": True,
                "min_number_of_allocations": 3,
                "max_number_of_allocations": 10
            },
            "num_threads": 1,
            "model_id": ".multilingual-e5-small"
        }
    },
)
print(resp)
const response = await client.inference.put({
  task_type: "text_embedding",
  inference_id: "my-e5-model",
  inference_config: {
    service: "elasticsearch",
    service_settings: {
      adaptive_allocations: {
        enabled: true,
        min_number_of_allocations: 3,
        max_number_of_allocations: 10,
      },
      num_threads: 1,
      model_id: ".multilingual-e5-small",
    },
  },
});
console.log(response);
PUT _inference/text_embedding/my-e5-model
{
  "service": "elasticsearch",
  "service_settings": {
    "adaptive_allocations": {
      "enabled": true,
      "min_number_of_allocations": 3,
      "max_number_of_allocations": 10
    },
    "num_threads": 1,
    "model_id": ".multilingual-e5-small"
  }
}

Использование существующего развертывания модели с помощью сервиса elasticsearch

Следующий пример демонстрирует, как использовать уже существующее развертывание модели при создании конечной точки вывода.

resp = client.inference.put(
    task_type="sparse_embedding",
    inference_id="use_existing_deployment",
    inference_config={
        "service": "elasticsearch",
        "service_settings": {
            "deployment_id": ".elser_model_2"
        }
    },
)
print(resp)
const response = await client.inference.put({
  task_type: "sparse_embedding",
  inference_id: "use_existing_deployment",
  inference_config: {
    service: "elasticsearch",
    service_settings: {
      deployment_id: ".elser_model_2",
    },
  },
});
console.log(response);
PUT _inference/sparse_embedding/use_existing_deployment
{
  "service": "elasticsearch",
  "service_settings": {
    "deployment_id": ".elser_model_2" 
  }
}

deployment_id уже существующего развертывания модели.

Ответ API содержит model_id и настройки потоков и распределений из развертывания модели:

{
  "inference_id": "use_existing_deployment",
  "task_type": "sparse_embedding",
  "service": "elasticsearch",
  "service_settings": {
    "num_allocations": 2,
    "num_threads": 1,
    "model_id": ".elser_model_2",
    "deployment_id": ".elser_model_2"
  },
  "chunking_settings": {
    "strategy": "sentence",
    "max_chunk_size": 250,
    "sentence_overlap": 1
  }
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-elasticsearch.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API