Интеграция Elasticsearch с выводом
Создаёт конечную точку вывода для выполнения задачи вывода с помощью сервиса 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 распределений. | |
|
|
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
}
}
} |
| |
| Адаптивные распределения будут включены с минимальным значением 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"
}
} |
|
При использовании консоли 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"
}
} | Укажите уникальный идентификатор для конечной точки вывода. | |
|
|
Настройка адаптивного распределения для 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"
}
} |
|
Ответ 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