Задачи NLP
Описание
Взаимодействие с компонентом Задачи NLP выполняется в несколько этапов:
- Проверяется доступность навыка распознавания документа для указанного ключа маршрутизации.
- После отправки запроса возвращается идентификатор задачи.
- Необходимо периодически проверять список готовых запросов, пока идентификатор задачи не появится в списке.
- После завершения обработки можно получить данные NLP-запроса по его идентификатору.
Ключ маршрутизации
Для обработки запроса необходимо указать ключ маршрутизации.
Он передаётся в параметре modelType маршрута запроса:
POST /inference/nlp/{modelType}/async
Ключ маршрутизации можно получить в Портале при создании навыка.
Если указать ключ маршрутизации, который не настроен на сервере, запрос завершится ошибкой.
Авторизация
Каждый запрос в данном разделе требует указания заголовка Authorization. Подробнее см. в разделе Авторизация.
Проверка готовости навыка
Проверка готовности навыка выполняется методом:
GET /inference/nlp/{modelType}/status
В параметре маршрута modelType необходимо указать ключ маршрутизации.
Например: nlp-extr-xxxx для навыка Экстракция, где xxxx — произвольное сочетание цифр и латинских букв.
Пример запроса:
GET /inference/nlp/{modelType}/status HTTP/1.1
Host: ai-server-endpoint:44392
Accept: text/plain
Authorization: ••••••Если модель готова принимать запросы, сервер вернёт JSON следующего вида:
{
"isServerLicensed": true,
"isModelTypeRunning": true,
"isAgentLicensed": true
}Описание полей ответа:
isServerLicensedПоказывает наличие лицензии на сервере. Если сервер работает без лицензии, значение будетfalse.isModelTypeRunningПоказывает, настроен ли указанный ключ маршрутизации. ЕслиmodelTypeне настроен в Портале, значение будетfalse, а полеisAgentLicensedне вернётся в ответе.isAgentLicensedПоказывает наличие лицензии у Агентов на Целевых машинах. Если ключ маршрутизации настроен, но Агенты работают без лицензии, значение будетfalse.
Создать запрос
Запрос создаётся методом
POST /inference/nlp/{modelType}/async
Запрос может отправляться с типом содержимого multipart/form-data или application/json.
POST /inference/nlp/nlp-extr-xxxx/async HTTP/1.1
Host: ai-server-endpoint:44392
Accept: text/plain
Authorization: ••••••
Content-Length: 238
Content-Type: application/json; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
{
"ResponseSchema": [
"ИНН", "Дата письма"
],
"ImageFile": "[BASE64]",
"ResponseLength": 256
}При успешном создании запроса сервер возвращает идентификатор задачи (key):
{
"key": "23b3bfbf-952d-4f57-9c71-a065622250ef",
"createdAt": "2025-12-22T19:27:58.2668447+03:00",
"expiresAt": "2025-12-23T19:27:58.2668447+03:00",
"modelType": "nlp-extr-xxxx",
"files": [
{
"id": "097ebac8-a7f6-4eab-97b5-19b1a696b292",
"originalFileName": "img.jpeg",
"extension": ".jpeg",
"contentType": "image/jpeg",
"contentLength": 340121,
"type": "Image",
"sourceFileType": "jpg",
"fileType": "jpg"
}
]
}Метод /sync выполняет запрос синхронно: обработка длится до завершения генерации ответа моделью.
Ответ возвращается в режиме Transfer-Encoding: chunked и содержит «сырые» данные модели без дополнительной обработки.
Поля запроса
Основные поля:
| Поле | Описание | Примечания |
|---|---|---|
| Image | Изображение / документ | jpg, jpeg, png, pdf, tiff |
| Prompt** | Запрос к модели | — |
| SystemMessage | Системный промпт | Переопределяет системный промпт навыка |
| ResponseLength | Длина ответа в токенах | Обязательное поле |
| Temperature | Температура ответа | Чем ниже, тем меньше вариативность |
| MinP | Порог выбора токенов | 0 = любой, 1 = самый вероятный |
| MatchResponseSchema | Проверка соответствия ответа схеме | Результат → result.isMatchingResponseSchema |
| RequestGroup | Группа приоритизации | Произвольная строка-маркер |
| Think | Флаг рассуждения модели | Только для поддерживаемых моделей |
** Обязательно укажите либо запрос к модели (поле Prompt), либо изображение/документ (поле Image). Запрос без Prompt и без Image получит ответ 400 Bad Request.
Дополнительно:
- Файл контекста в 1 из 3 форм: ContextFileId, ContextFile, Context. Позволяет переопределить контекст навыка.
- Пример ContextFileId: “8A4858EB-11C2-4BED-A807-78F65EA0A4DE”.
- Пример ContextFile:
"[{\"input\":\"Запрос отправлен в 20:31.\",\"keys\":[\"когда отправлен запрос\"],\"output\":{\"когда отправлен запрос":\"20:31\"}}]" - Пример Context:
[ { "input": "Запрос отправлен в 20:31.", "keys": ["когда отправлен запрос"], "output": { "когда отправлен запрос": "20:31" } } ] - Может отсутствовать
- Должна отсутствовать для навыка
Файнтюнинг
- Схема ответа в 1 из 3 форм: ResponseSchemaJson, ResponseSchema. Позволяет структурировать ответ модели.
- Пример ResponseSchemaJson:
"[\"ИНН\", \"Дата письма\"]" - Пример ResponseSchema:
["ИНН", "Дата письма"] - Может отсутствовать для навыков
OCR,Генерация - Должна отсутствовать для навыка
Файнтюнинг
- Пример ResponseSchemaJson:
Проверка готовых запросов
Для проверки готовых запросов используется метод:
GET /inference/nlp/ready
GET /inference/nlp/ready HTTP/1.1
Host: ai-server-endpoint:44392
Accept: text/plain
Authorization: ••••••Сервер возвращает список идентификаторов готовых запросов в формате JSON:
["23b3bfbf-952d-4f57-9c71-a065622250ef"]Запрос появляется в этом списке, когда у него появляется флаг IsReady в поле
Result.
Получить запрос
Получить данные запроса можно методом:
GET /inference/nlp/{requestKey},
где {requestKey} — идентификатор запроса, полученный на предыдущем шаге.
Пример:
GET /inference/nlp/23b3bfbf-952d-4f57-9c71-a065622250ef HTTP/1.1
Host: ai-server-endpoint:44392
Accept: text/plain
Authorization: ••••••Сервер возвращает JSON с результатами обработки запроса:
{
"key": "23b3bfbf-952d-4f57-9c71-a065622250ef",
"createdAt": "2025-12-22T19:27:58.2668447+03:00",
"expiresAt": "2025-12-23T19:27:58.2668447+03:00",
"modelType": "nlp-extr-xxxx",
"result": {
"streamingStartedAt": "2025-12-22T19:28:02.639923+03:00",
"updatedAt": "2025-12-22T19:28:03.2439793+03:00",
"streamingCompletedAt": "2025-12-22T19:23:03.2439793+03:00",
"isReady": true,
"isFailed": false,
"isMatchingResponseSchema": null,
"rawAnswer": "{\"ИНН\": \"1234567890\", \"Дата письма\": \"14-07-2025\"}\n",
"answer": "{\"ИНН\": \"1234567890\", \"Дата письма\": \"14-07-2025\"}\n"
},
"files": [
{
"id": "097ebac8-a7f6-4eab-97b5-19b1a696b292",
"originalFileName": "img.jpeg",
"extension": ".jpeg",
"contentType": "image/jpeg",
"contentLength": 340121,
"type": "Image",
"sourceFileType": "jpg",
"fileType": "jpg"
}
],
"isPostProcessingRequired": false
}Обратите внимание на следующие поля:
-
expiresAt— дата и время удаления запроса с сервера. По умолчанию запрос хранится 1 час. Значение можно изменить в параметреClearRequestsService > DefaultExpirationSecondsфайла конфигурации Api.Inference.Даже если запрос не успел обработаться за отведённое время, он всё равно будет удалён с сервера.
-
result.isReady— статус готовности результата.true— результат полностью готов.false— обработка ещё продолжается.
-
result.isFailed— статус обработки запроса.true— во время обработки произошла ошибка.false— запрос обработан успешно.
-
result.isMatchingResponseSchema— соответствует ли ответ заданной схеме (ResponseSchema).true— ответ соответствует схеме.false— модель вернула ответ со структурой, отличающейся от ожидаемой.null— проверка не выполнялась.
-
result.rawAnswer— сырой ответ модели без постобработки. Может отличаться от answer, если применяется постпроцессинг (например, Fine-tuning или нормализация результата).