Данный документ является справочником по REST API сервиса Софтлайн Классификатор — системы автоматической категоризации текстовых обращений, изображений и аудиозаписей на основе больших языковых моделей (LLM) и технологии RAG (Retrieval-Augmented Generation).
Документ предназначен для разработчиков, которые интегрируют Классификатор во внешние системы или автоматизируют работу с ним без использования веб-интерфейса. Здесь описаны все доступные конечные точки (endpoints), форматы запросов и ответов, правила аутентификации и коды ошибок.
Веб-интерфейс Классификатора ориентирован на ручную работу операторов и администраторов. API предоставляет программный доступ к тем же возможностям и открывает дополнительные сценарии использования:
Все вызовы API направляются на адрес веб-сервера Классификатора. Веб-сервер проксирует запросы на внутренний бэкенд, обеспечивая единую точку входа с аутентификацией по токену. Прямой доступ к бэкенду из внешних сетей не предполагается.
https://<FQDN_Классификатора>/api
Все запросы требуют API токен в заголовке:
X-API-Token: your_api_token_here
Получить API токен можно через веб-интерфейс в настройках пользователя.
| № | Метод | Endpoint | Описание |
|---|---|---|---|
| 1 | POST | /api/categorize | Категоризация запроса (текст, изображения, аудио) |
| 2 | GET | /api/requests | Получение списка запросов с пагинацией и поиском |
| 3 | PUT | /api/requests/{id}/moderate | Модерация запроса (одобрение или отклонение) |
| 4 | POST | /api/requests/{id}/kb | Добавление запроса в базу знаний RAG |
| 5 | DELETE | /api/requests/{id}/kb | Удаление запроса из базы знаний RAG |
Основной метод для категоризации текстовых запросов, изображений и аудио.
Endpoint: POST /api/categorize
Headers:
X-API-Token: string (обязательно)Content-Type: application/json или multipart/form-data{ "query": "Текст запроса", "generation_model": "gemini-2.0-flash-exp", "use_rag_count": true } { "query": "Описание изображения", "generation_model": "gemini-2.0-flash-exp", "use_rag_count": true, "vision_model": "gemini-2.0-flash-exp", "images": [ "data:image/jpeg;base64,/9j/4AAQSkZJRg...", "data:image/png;base64,iVBORw0KGgo..." ] } Content-Type: multipart/form-data
query: "Текст запроса"
generation_model: "gemini-2.0-flash-exp"
use_rag_count: true
vision_model: "gemini-2.0-flash-exp"
images: [File, File]
audio: [File]
Параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| query | string | нет* | Текстовый запрос |
| generation_model | string | да | Модель для генерации ответа |
| use_rag_count | boolean | нет | Использовать ли RAG для подсчета категорий |
| vision_model | string | условно** | Модель для анализа изображений |
| images | File[] или string[] | нет | Изображения (файлы или base64) |
| audio | File[] | нет | Аудио файлы |
* Требуется хотя бы один из: query, images, audio
** Обязательно если предоставлены изображения
Response:
{ "llm_text":"<КАТЕГОРИЯ>Обращения, петиции</КАТЕГОРИЯ>", "rag_answer": { "Фейк + спам":30, "Жалобы":9, "Правонарушения":4, "Оперативка":3, "Ошибки на ресурсах":2, "ЖКХ":1, "Обращения, петиции":1 }, "answer":"Обращения, петиции", "request_id":5 } Примеры запросов:
# Простой текстовый запрос curl -X POST https://your-domain.com/api/categorize \ -H "X-API-Token: your_token" \ -H "Content-Type: application/json" \ -d '{
"query": "Как подключить интернет?",
"generation_model": "gemini-2.0-flash-exp",
"use_rag_count": true
}' # С изображением (base64) curl -X POST https://your-domain.com/api/categorize \ -H "X-API-Token: your_token" \ -H "Content-Type: application/json" \ -d '{
"query": "Что на изображении?",
"generation_model": "gemini-2.0-flash-exp",
"use_rag_count": true,
"vision_model": "gemini-2.0-flash-exp",
"images": ["data:image/jpeg;base64,/9j/4AAQ..."]
}' # С файлами curl -X POST https://your-domain.com/api/categorize \ -H "X-API-Token: your_token" \ -F "query=Анализ изображения" \ -F "generation_model=gemini-2.0-flash-exp" \ -F "use_rag_count=true" \ -F "vision_model=gemini-2.0-flash-exp" \ -F "images=@/path/to/image.jpg" Получить список всех запросов категоризации.
Endpoint: GET /api/requests
Headers:
X-API-Token: string (обязательно)Query Parameters:
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
| limit | number | нет | 30 | Количество запросов (1-100) |
| offset | number | нет | 0 | Смещение для пагинации |
| search | string | нет | - | Поиск по тексту |
Response:
{ "status": "success", "data": [ { "id": 123, "text": "Текст запроса", "final_answer": "Категория А", "moderated": true, "moderated_answer": "Категория А", "kb_inserted": true, "kb_id": -1, "start_time": "2024-01-01T12:00:00.000Z", "end_time": "2024-01-01T12:00:01.500Z" } ], "total_count": 500, "limit": 30, "offset": 0 } Пример запроса:
curl -X GET "https://your-domain.com/api/requests?limit=50&offset=0&search=интернет" \ -H "X-API-Token: your_token" Модерировать запрос (одобрить или отклонить).
Endpoint: PUT /api/requests/{id}/moderate
Headers:
X-API-Token: string (обязательно)Content-Type: application/jsonBody:
{ "moderated": true, "moderated_answer": "Категория А" } Параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| moderated | boolean | да | true - одобрить, false - отклонить |
| moderated_answer | string | условно* | Модерированный ответ |
* Обязательно если moderated=true
Response:
{ "status": "success", "message": "Запрос 123 прошёл модерацию" } Важно: Нельзя модерировать запрос, который уже находится в базе знаний. Сначала нужно удалить его из БЗ.
Пример запроса:
# Одобрить запрос curl -X PUT https://your-domain.com/api/requests/123/moderate \ -H "X-API-Token: your_token" \ -H "Content-Type: application/json" \ -d '{
"moderated": true,
"moderated_answer": "Категория А"
}' # Отклонить запрос curl -X PUT https://your-domain.com/api/requests/123/moderate \ -H "X-API-Token: your_token" \ -H "Content-Type: application/json" \ -d '{
"moderated": false,
"moderated_answer": null
}' Добавить модерированный запрос в базу знаний для использования в RAG.
Endpoint: POST /api/requests/{id}/kb
Headers:
X-API-Token: string (обязательно)Требования:
Response:
{ "status": "success", "message": "Запрос успешно добавлен в базу знаний (3 чанков)", "kb_id": -1 } Пример запроса:
curl -X POST https://your-domain.com/api/requests/123/kb \ -H "X-API-Token: your_token" Удалить запрос из базы знаний.
Endpoint: DELETE /api/requests/{id}/kb
Headers:
X-API-Token: string (обязательно)Response:
{ "status": "success", "message": "Запрос успешно удален из базы знаний (3 чанков)", "kb_id": null } Пример запроса:
curl -X DELETE https://your-domain.com/api/requests/123/kb \ -H "X-API-Token: your_token" | Код | Описание |
|---|---|
| 400 | Неверные параметры запроса |
| 401 | Отсутствует или неверный API токен |
| 404 | Запрос не найден |
| 500 | Внутренняя ошибка сервера |