Действия

QAS. Руководство пользователя: различия между версиями

Материал из Флора AI

Нет описания правки
 
(не показаны 94 промежуточные версии 5 участников)
Строка 1: Строка 1:
==== '''В Общее описание''' ====
Сервис предназначен для поиска ответа на заданный вопрос. Входным значением для сервиса являются данные в текстовом формате. В ответ на входящий запрос сервис возвращает данные в формате JSON.


=== Материал из Флора AI ===


===== '''Общее описание'''[править | править код] =====
Сервис Simple Biometry Server предназначен для извлечения именованных сущностей из текстовых фрагментов (фраз естественной речи). Принимает на вход текстовую строку и возвращает структурированные данные в формате JSON.


==== '''Термины и определения''' ====
Question Answering System (QAS) – сервис ответов на вопросы.


===== '''Термины и определения'''[править | править код] =====
Simple Biometry Server (SBS) - сервис извлечения метаданных.


Swagger UI – интерактивная  веб-консоль с кратким описанием методов АPI и возможностью выполнять запросы к сервису SBS.


==== '''Описание методов API''' ====
Сервис QAS доступен по протоколу HTTP 1.1 через порт 6187/tcp. Авторизация не требуется, но все запросы должны содержать заголовок «accept: application/json». Ответ сервиса возвращается в формате JSON. Если произошла ошибка, возвращается переменная «error=1» и описание ошибки в переменной «message». Для удобства тестирования и использования методов сервиса по адресу <nowiki>http://АДРЕС:6187</nowiki> доступен интерфейс Swagger, который позволяет просматривать и тестировать все доступные методы из таблицы ниже.


===== '''Описание методов API'''[править | править код] =====
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SBS. По умолчанию используется порт 6187/tcp.


Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок <code>"accept: application/json"</code>


Ответ сервиса представляет собой JSON-документ в кодировке UTF-8 или двоичный файл. Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6187 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.


{| class="wikitable"
{| class="wikitable" style="width: 110%"
|+
|+''Методы API''
!Метод
!Тип
!Описание
!Входные параметры
!Ответ
|-
|-
|/sbs/
! colspan="3" style="text-align: center" |'''<big>Группа методов qas</big>'''
|GET
|Вывод списка моделей
| -
|<code>{ models: [model1,...,modelN] }</code>
|-
|-
|/sbs/analyze/{id}
! style="color:blue;width: 15%" |'''GET/qas/ask'''
|POST
! colspan="2" style="width: 85%" |Метод генерирует ответ на поставленный вопрос на основе информации из документов в базе.
|Получение аналитических метаданных из голосового фрагмента
<small>Ответ на вопрос генерируется на основе информации, содержащейся в одном или нескольких документах. Документы должны быть в текстовом формате. Ответ возвращается в формате JSON, его можно скачать. Если метод не смог найти ответ, возвращается код ошибки и сообщение.</small>
|
|-
* '''id''' - идентификатор модели.
| colspan="2" style="width: 50%" |
* '''wav''' - файл для анализа
* <small>'''text''' — текст вопроса, на основе которого будут искаться фрагменты.</small>
|Вернется массив с метаданными голосового фрагмента. Пример:
* <small>'''category''' — id категории документа. Если не указать категорию, метод вернет ответ на основе всех документов в базе данных. Допускается указание нескольких категорий через разделитель "|".</small>
<code>{</code> <code>age: {</code> <code>class: 20-29,</code> <code>confidence: 0.99</code> <code>},</code> <code>emotion: {</code> <code>class: SADNESS,</code> <code>confidence: 0.99</code> <code>},</code> <code>gender: {</code> <code>class: FEMALE,</code> <code>confidence: 0.99</code> <code>}</code> <code>}</code>
* <small>'''channel''' — id канала</small>
* <small>'''useCache''' — использовать кешированные ответы</small>
 
<small>возможные варианты:</small>
 
<small>— "'''no'''" не использовать</small>
 
<small>- "'''all'''" использовать все</small>
 
<small>- "'''checked'''" использовать только проверенные</small>
 
* <small>'''useGPT''' — использовать генеративную сеть для поиска ответов в документах. возможные варианты "'''yes'''" "'''no'''"</small>
* <small>'''model''' - имя модели GPT, если кроме default используются другие модели</small>
*<small>'''template''' - ID шаблона запроса к LLM, необязательный параметр</small>
 
*<small>'''addAlias''' — добавлять похожие вопросы к синонимам, не создавая отдельного вопроса. возможные варианты "'''yes'''" "'''no'''"</small>
*<small>'''maxDocs''' — максимальное количество документов одной категории для формирования контекста при генерации ответа на вопрос, по умолчанию 1</small>
*'''<small>similarityArea</small>''' <small>—</small> <small>определяет допустимую разницу между максимальной и минимальной релевантностью фрагментов при фильтрации результатов</small>
| style="width: 50%" |<small>{</small>
<small>"error": 0,</small>
 
<small>"text": "Здесь будет текст ответа"</small>
 
<small>}</small>
|-
! style="color:green;width: 15%" |'''POST/qas/autocache'''
! colspan="2" style="width: 85%" |Добавление вопросно-ответной пары в кэш.
<small>В случае указания id answer будет принудительно добавлен в вопрос с указанным id. Если же указан question, то система сначала попытается найти похожий вопрос и добавить ответ в него, если же вопрос не будет найден, то система создаст новый с указанной формулировкой. При установке флага emptyQuestion будет добавлен только вопрос (без ответа).</small>
|-
| colspan="2" style="width: 50%" |
*<small>'''question''' — текст вопроса</small>
*<small>'''category''' — категория</small>
*<small>'''channel''' — канал</small>
*<small>'''answer''' — ответ</small>
*<small>'''emptyQuestion''' — yes или no, флаг добавления вопроса без указания ответа</small>
*<small>'''checked''' — yes или no, флаг добавления вопроса как «проверенного»</small>
*<small>'''id''' — код существующего вопроса</small>
| style="width: 50%" |<small>{"error": 0, "message": "success"}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/cachemaker/start'''
! colspan="2" style="width: 85%" |Генерация ответов на вопросы в кэше.
|-
| colspan="2" style="width: 50%" |
*<small>'''category''' — категория для которой генерируются ответы, если указан код категории, то генерация только для этой категории</small>
 
*<small>'''mode''' — режим генерации ответов, возможные значения:</small><small>'''- paraphrase''' - генерирует вариации ответов перефразированием уже проверенных ответов, если таковые имеются на вопросе</small><small>'''- generate''' — генерирует кэш через разные ответы на каждый вопрос по документации</small>
 
*<small>'''option''' — {all | empty} обработать все вопросы  или только не содержащие ответов</small>
 
*<small>'''variants''' — количество ответов, от 1 до 9</small>
*<small>'''replace''' — заменить ответы на сгенерированные</small>
*<small>'''maxDocs''' — максимальное количество документов одной категории для формирования контекста при генерации ответа на вопрос, по умолчанию 1</small>
*<small>'''model''' — какую модель использовать для генерации, если кроме default используются другие модели</small>
*<small>'''template''' — ID шаблона запроса к LLM, необязательный параметр</small>
| style="width: 50%" |<small>{"error": 0, "message": "success"}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/cachemaker/status'''
! colspan="2" style="width: 85%" |Состояние генерации ответов на вопросы в кэше.
 
<small>статусы: '''started''', '''stopped''', если были ошибки поле ответа</small>
 
<small>'''error''' будет содержать код ошибки</small>
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| style="width: 50%" |<small>{  "error": "",</small>
 
<small>  "status": "started",</small>
 
<small>  "progress": 33.33 }</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/cachemaker/stop'''
! colspan="2" style="width: 85%" |Остановить генерацию ответов на вопросы в кэше.
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| style="width: 50%" |<small>{"error": 0, "message": "success"}</small>
|-
! style="color:green;width: 15%" |'''POST/qas/chat'''
! colspan="2" style="width: 85%" |Произвольный запрос в LLM.
|-
| colspan="2" style="width: 50%" |
*<small>'''text -''' текст вопроса</small>
*<small>'''history''' - история вопросов, будет склеена с text при запросе</small>
*<small>'''model''' - какую модель использовать для ответа, если кроме default используются другие модели</small>
*<small>'''useInternalTemplate''' - использовать ли шаблон запроса. '''no''' - не использовать, либо код шаблона запроса к LLM. Необязательный параметр. Если не указан, используется шаблон по умолчанию.</small>
*<small>'''params''' - необязательный параметр. JSON с произвольными параметрами запроса к LLM. Описание параметров см. в [[QAS. Руководство администратора|руководстве администратора]].</small>
| style="width: 50%" |<small>Пример ответа на вопрос "как пройти в библиотеку"</small>
 
<small>{"error": 0,</small>
 
<small>"text": "1. Проверить время работы библиотеки (обычно от 9 до 20)\n2. Проверить местоположение библиотеки на карте или с помощью сервиса Google Maps\n3. Убедиться, что у вас есть необходимые документы для входа (паспорт, карта члена библиотеки и т.д.)\n4. Посетить библиотеку по адресу: [адрес библиотеки]\n5. Проверить правила поведения в библиотеке перед входом" }</small>
|-
! style="color:green;width: 15%" |'''POST/qas/cleandoc/start'''
! colspan="2" |Очистка документа от лишней информации
|-
| colspan="2" |
*<small>'''text -''' текст документа</small>
*<small>'''model''' - какую модель использовать для ответа, если кроме default используются другие модели</small>
*<small>'''template''' - ID шаблона запроса к LLM, необязательный параметр</small>
*<small>'''doc_id''' - необязательный параметр, ID документа</small>
*<small>'''user_id''' - ID пользователя</small>
|<small>{"error": 0, "message": "success"}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/cleandoc/stop'''
| colspan="2" |Остановка очистки документа для конкретного пользователя
|-
| colspan="2" |
*<small>'''user_id''' - ID пользователя</small>
|<small>{"error": 0, "message": "success"}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/cleandoc/status'''
| colspan="2" |Статус очистки документа для конкретного пользователя
|-
| colspan="2" |
* <small>'''user_id''' - ID пользователя</small>
|<small>{</small>
<small>"error": 0,</small>
 
<small>"status": stopped | started,</small>
 
<small>"progress": 33.3,</small>
 
<small>"message": string,</small>
 
<small>"place": number, #место в очереди</small>
 
<small>"queue": True | False #состояния - в очереди или в процессе очистки</small>
 
<small>}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/cleandoc/result'''
| colspan="2" |Результат очистки документа для конкретного пользователя
|-
| colspan="2" |
*<small>'''doc_id''' - необязательный параметр, ID документа</small>
*<small>'''user_id''' - ID пользователя</small>
|<small>{</small><small>"error": 0,</small><small>"status": "stopped",</small><small>"text": "очищенный текст",</small><small>"doc_id": "ID документа"</small><small>}</small>
|-
! style="color:green;width: 15%" |'''POST/qas/paraphrase'''
! colspan="2" |Генерация фраз-синонимов для предложения.
|-
| colspan="2" |
*<small>'''text -''' предложение</small>
*<small>'''model''' - какую модель использовать для ответа, если кроме default используются другие модели</small>
*<small>'''template''' - ID шаблона запроса к LLM, необязательный параметр</small>
|<small>{"error": 0, "message": "success", "texts": [ "перефразированный текст 1", ... ]}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/gpt/list'''
| colspan="2" |Получение списка доступных(установленных) GPT моделей
|-
| colspan="2" |<small>Входные параметры отсутствуют</small>
|<small>{  "error": 0,  "message": "success",</small>
<small>  "models": ["default" ]}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/questionlist/answers'''
! colspan="2" style="width: 85%" |Отображает лог массовой обработки вопросов
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| style="width: 50%" |<small>на выходе :</small>
 
<small>массив из объектов {</small>
 
<small>  error: number;</small>
 
<small>  question: string;</small>
 
<small>  answer: string;</small>
 
<small>  confidence: number | null;</small>
 
<small>}</small>
|-
! style="color:green;width: 15%" |'''POST/qas/questionlist/start'''
! colspan="2" style="width: 85%" |Старт массовой обработки вопросов
|-
| colspan="2" style="width: 50%" |
* <small>'''questions''' - файл с вопросами</small>
*<small>'''format''' - в json или в text файл с вопросами</small>
*<small>'''category''' id категории документа. Если не указать категорию, метод вернет ответ на основе всех документов в базе данных. Допускается указание нескольких категорий через разделитель "|".</small>
*<small>'''channel''' — id канала</small>
*<small>'''useCache''' — использовать кешированные ответы</small>
 
<small>возможные варианты:</small>
 
<small>— "'''no'''" не использовать</small>
 
<small>- "'''all'''" использовать все</small>
 
<small>- "'''checked'''" использовать только проверенные</small>
 
*<small>'''useGPT''' — использовать генеративную сеть для поиска ответов в документах. возможные варианты "'''yes'''" "'''no'''"</small>
*<small>'''model''' - имя модели GPT, если кроме default используются другие модели</small>
*<small>'''template''' - ID шаблона запроса к LLM, необязательный параметр</small>
*'''<small>maxDocs</small>''' <small>- максимальное количество документов одной категории для формирования контекста при генерации ответа на вопрос, по умолчанию 1</small>
 
*<small>'''addAlias''' — добавлять похожие вопросы к синонимам, не создавая отдельного вопроса. возможные варианты "'''yes'''" "'''no'''"</small>
*<small>'''threshold''' - порог достоверности при обработке</small>
 
| style="width: 50%" |<small><nowiki>{error: 0 | 1, message: string}</nowiki></small>
|-
! style="color:blue;width: 15%" |'''GET/qas/questionlist/status'''
! colspan="2" style="width: 85%" | Статус массовой обработки вопросов
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| style="width: 50%" |<small>{     error: string;</small>
 
<small>     status: 'started' | 'stopped';</small>
 
<small>     progress: number; }</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/questionlist/stop'''
! colspan="2" style="width: 85%" |Остановка массовой обработки вопросов
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| style="width: 50%" |<small><nowiki>{error: 0 | 1, message: string}</nowiki></small>
|-
! style="color:green;width: 15%" |'''POST/qas/mismatchsearcher/start'''
! colspan="2" | Старт поиска несоответствий
|-
| colspan="2" |
*<small>'''category''' — id категории документа. Если не указать категорию, метод вернет ответ на основе всех документов в базе данных. Допускается указание нескольких категорий через разделитель "|".</small>
*<small>'''model''' - имя модели GPT, если кроме default используются другие модели</small>
*<small>'''template''' - ID шаблона запроса к LLM для анализа на несоответствия, необязательный параметр</small>
*<small>'''asktemplate''' - ID шаблона запроса к LLM для генерации ответов по документу, необязательный параметр</small>
*<small>'''answers''' - тип вопросов, по которым осуществляется поиск несоответствий, необязательный параметр, по умолчанию «all»</small>
|<small><nowiki>{error: 0 | 1, message: string}</nowiki></small>
|-
! style="color:blue;width: 15%" |'''GET/qas/mismatchsearcher/status'''
! colspan="2" style="width: 85%" | Статус поиска несоответствий
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| style="width: 50%" |<small>{     error: string;</small>
 
<small>     status: 'started' | 'stopped';</small>
 
<small>     progress: number; }</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/mismatchsearcher/stop'''
! colspan="2" style="width: 85%" |Остановка поиска несоответствий
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| style="width: 50%" |<small><nowiki>{error: 0 | 1, message: string}</nowiki></small>
|-
! style="color:blue;width: 15%" |'''GET/qas/mismatchsearcher/mismatches'''
| colspan="2" |Статус получения результатов
|-
| colspan="2" |<small>Входные параметры отсутствуют</small>
|<small>{</small><small>"error": 0,</small><small>"message": "success",</small><small>"mismatches": [{</small>        <small>"question_id": "ID вопроса",</small>
<small>"question": "вопрос",</small>       
<small>"category": "ID категории",</small>
<small>"answer_id": "ID ответа",</small>       
<small>"answer": "ответ на вопрос {question}",</small>
<small>"description": "результат поиска",</small>       
<small>"error" : string,</small>
<small>"context": "фрагмент документа",</small>       
<small>"generatedText" : "Результат генерации"</small>
<small>}, ... ]</small>
<small>}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/questionmaker/start'''
| colspan="2" |Запуск генерации вопросов
|-
| colspan="2" |
*<small>'''category''' - ID категории, по которой будет происходить генерация вопросов</small>
*<small>'''doc''' - ID документа, по которому будет происходить генерация вопросов</small>
*<small>'''generateAnswers''' - флаг для генерации ответов вместе с вопросами '''[yse|no]''', по умолчанию '''«no»'''</small>
*<small>'''model''' - имя модели GPT, если кроме default используются другие модели</small>
*<small>'''template''' - ID шаблона запроса к LLM для анализа генерации вопросов, необязательный параметр</small>
|<small>{ "error": 0, "message": "success" }</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/questionmaker/status'''
| colspan="2" |Статус генерации вопросов
|-
| colspan="2" |<small>Входные параметры отсутствуют</small>
|<small>{</small>
<small>"error": string,</small>   
<small>"status": 'started' | 'stopped',</small>
<small>"progress": 33.3</small>
<small>}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/questionmaker/stop'''
! colspan="2" style="width: 85%" |Прервать генерацию.
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| style="width: 50%" |<small><nowiki>{error: 0 | 1, message: string}</nowiki></small>
|-
! style="color:blue;width: 15%" |'''GET/qas/search'''
! colspan="2" style="width: 85%" |Поиск фрагментов содержащих ответ
|-
| colspan="2" style="width: 50%" |
*<small>'''text'''  — текст запроса</small>
 
*<small>'''category''' — категория (раздел) знаний. Допускается указание нескольких категорий через разделитель "|".</small>
*<small>'''maxDocs''' - максимальное количество документов одной категории для формирования контекста при поиске ответа на вопрос, по умолчанию 1</small>
*'''<small>similarityArea -</small>''' <small>определяет допустимую разницу между максимальной и минимальной релевантностью фрагментов при фильтрации результатов</small>
| style="width: 50%" |<small>{  "error": 0,</small>
<small>  "text": "</small>
 
<small>  Фрагмент 1:Здесь будет текст найденного фрагмента</small>
 
<small>  Фрагмент 2:Здесь будет текст найденного фрагмента",</small>
 
<small>  "fragments": [</small>
 
<small>    {      "id": "3a386b0a9e0e19efb0870685e1d0b484",</small>
 
<small>      "title": "Заголовок документа",</small>
 
<small>      "category": "Категория документа",</small>
 
<small>      "text": "Здесь будет текст найденного фрагмента"    },</small>
 
<small>    {      "id": "44fd73ea1ac63f32cf18d79c854dbfe2",</small>
 
<small>      "title": "Заголовок документа",</small>
 
<small>      "category": "Категория документа",</small>
 
<small>      "text": "Здесь будет текст найденного фрагмента"    }  ]  }</small>
|-
! style="color:green;width: 15%" |'''POST/qas/summarize'''
! colspan="2" style="width: 85%" |<small>Построение протокола или краткого содержания совещания</small>
|-
| colspan="2" style="width: 50%" |
*<small>'''text''' - текст совещания</small>
 
*<small>'''options''' — словарь с разделами протокола, где ключ — название раздела, значение - краткая инструкция к формированию раздела.</small>
*<small>'''model''' - какую GPT модель использовать для построения протокола, если кроме default используются другие модели</small>
 
*<small>'''file''' — файл с текстом (текст, csv, pdf или текстовые офисные документы)</small>
*<small>'''template''' - ID шаблона запроса к LLM, необязательный параметр</small>
| style="width: 50%" |<small>{</small><small>  "error": 0,</small>
 
<small>  "message": "success",</small>
 
<small>  "summary": "здесь текст протокола"</small>
 
<small>}</small>
|-
! style="color:green;width: 15%" |'''POST/qas/replace'''
! colspan="2" |корректировка информации в тексте при помощи LLM
|-
| colspan="2" |
*<small>'''text''' - текст</small>
*<small>'''oldinfo''' — старая информация</small>
*<small>'''newinfo''' — новая информация</small>
*'''<small>model</small>''' <small>- какую модель использовать для генерации, если кроме default используются другие модели</small>
*<small>'''template''' - ID шаблона запроса к LLM, необязательный параметр</small>
|<small>{</small><small>  "error": 0,</small>
 
<small>  "message": "success",</small>
 
<small>  "text": "итоговый текст"</small>
 
<small>}</small>
|-
! style="color:green;width: 15%" |'''POST/qas/replacementlist'''
! colspan="2" |список всех фраз в документах и ответов в вопросах, подлежащих правке. <small>Векторно ищет все фрагменты по указанному тексту.</small>
|-
| colspan="2" |
*<small>'''text''' - текст</small>
*<small>'''category''' — категория, в которой производится векторный поиск</small>
*<small>'''threshold''' — порог похожести, необязательный параметр, если не указан, берется из конфигурационного файла (fragments -> threshold)</small>
*<small>'''answers''' - тип вопросов, по которым осуществляется поиск для внесения правок, необязательный параметр, по умолчанию «all»</small>
|<small>{</small><small>"error": 0,</small>
<small>"message": "success",</small>
 
<small>"docs": [],</small>
 
<small>"answers": []</small>
 
<small>}</small>
|-
! colspan="3" style="text-align: center" |'''<big>Группа методов channel</big>'''
|-
! style="color:green;width: 15%" |'''POST/qas/channel/add'''
! colspan="2" style="width: 85%" |Добавление канала. <small>В ответе id созданного канала или сообщение об ошибке</small>
|-
| colspan="2" style="width: 50%" |<small>'''name''' — наименование канала</small>
| style="width: 50%" |<small>{"error": 0,</small>
<small>"message": "success",</small>
 
<small>"id": "a46fb887-5d98-41e0-8299-bcc94f615e91"}</small>
|-
! style="color:red;width: 15%" |'''DELETE/qas/channel/delete/{id}'''
! colspan="2" style="width: 85%" |Удаление канала
|-
| colspan="2" style="width: 50%" |<small>'''id''' — идентификатор канала</small>
| style="width: 50%" |<small>{ "error": 0, "message": "success" }</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/channel/list'''
! colspan="2" style="width: 85%" |Получить список всех каналов
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| style="width: 50%" |<small>{  "error": 0,</small>
<small>  "channels": [</small>
 
<small>    {      "id": "1",      "name": "voice"    },</small>
 
<small>    {      "id": "56442779-e871-43fd-ae4d-caf4ab6d09b9",      "name": "канал++"    },</small>
 
<small>    {      "id": "0",      "name": "default"    }</small>
 
<small>  ] }</small>
|-
! style="color:green;width: 15%" |'''POST/qas/channel/modify/{id}'''
! colspan="2" style="width: 85%" |Изменить канал. <small>У канала пока есть только наименование, поэтому метод только переименовывает канал</small>
|-
| colspan="2" style="width: 50%" |
*<small>'''name''' — новое наименование канала</small>
 
*<small>'''id''' — идентификатор канала</small>
| style="width: 50%" |<small>{  "error": 0,</small>
<small>  "message": "success"  }</small>
|-
! colspan="3" style="text-align: center" |'''<big>Группа методов category</big>'''
|-
! style="color:green;width: 15%" |'''POST/qas/category/add'''
! colspan="2" style="width: 85%" |обавить категорию с указанным именем. <small>В ответе - id созданной категории или сообщение об ошибке:</small>
|-
| colspan="2" style="width: 50%" |
*<small>'''name''' — наименование категории</small>
| style="width: 50%" |<small>{  "error": 0,</small>
<small>  "message": "success",</small>
 
<small>  "id": "ad895085-2e48-439a-831e-b5f699b6a54a"  }</small>
|-
! style="color:red;width: 15%" |'''DELETE/qas/category/delete/{id}'''
! colspan="2" style="width: 85%" | Удалить категорию. <small>В ответе или сообщении об успехе, или ошибке, если категория используется или не существует.</small>
|-
| colspan="2" style="width: 50%" |
*<small>'''id''' - идентификатор категории</small>
| style="width: 50%" |<small>{   "error": 0,</small>
<small>  "message": "success" }</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/category/list'''
! colspan="2" style="width: 85%" |Получить список категорий
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| style="width: 50%" |<small>В ответе json с именами и id категорий</small>
|-
! style="color:green;width: 15%" |'''POST/qas/category/modify/{id}'''
! colspan="2" style="width: 85%" |Изменить категорию. <small>У категории пока есть только наименование, поэтому метод только переименовывает категорию</small>
|-
| colspan="2" style="width: 50%" |
*<small>'''id''' — идентификатор категории</small>
*<small>'''name''' — наименование категории</small>
| style="width: 50%" |<small>{  "error": 0,</small>
<small>  "message": "success" }</small>
|-
! colspan="3" style="text-align: center" |'''<big>Группа методов doc</big>'''
|-
! style="color:green;width: 15%" |'''POST/qas/doc/add'''
! colspan="2" style="width: 85%" |Загрузить текстовый документ. <small>Добавляет документ в базу. В ответе - id созданного документа или сообщение об ошибке</small>
|-
| colspan="2" style="width: 50%" |
*<small>'''title''' — заголовок документа</small>
*<small>'''category''' — категория документа</small>
*<small>'''text'''</small> — <small>файл документа</small>
| style="width: 50%" |<small>{"error": 0,</small>
<small>"message": "success",</small>
 
<small>"id": "ebe2bc57551c2d17f892987d1f62306d"}</small>
|-
! style="color:red;width: 15%" |'''DELETE/qas/doc/delete/{id}'''
! colspan="2" style="width: 85%" |Удаление документа
|-
| colspan="2" style="width: 50%" |
*<small>'''id''' — идентификатор документа</small>
| style="width: 50%" |<small>{"error": 0,"message": "success"}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/doc/get/{id}'''
! colspan="2" style="width: 85%" |Выгрузка текста документа
|-
| colspan="2" style="width: 50%" |
*<small>'''id''' — идентификатор документа</small>
| style="width: 50%" |<small>{</small>
<small>  "error": 0,</small>
 
<small>  "text": "Здесь будет полный текст документа"</small>
 
<small>}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/doc/list'''
! colspan="2" style="width: 85%" |Получение списка имеющихся документов
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| style="width: 50%" |<small>Пример:</small>
<small>{  "error": 0,</small>
 
<small>  "docs": [</small>
 
<small>    {id": "d4999cdee5ad1faf2cb3066ea1b5e96b",</small>
 
<small>      "title": "PVE. Установка сервисного пакета окружения",</small>
 
<small>      "category": "Техническая поддержка" },</small>
 
<small>    {"id": "759042575b965745b9d2af869bca1740",</small>
 
<small>      "title": "UPS. Руководство администратора",</small>
 
<small>      "category": "Техническая поддержка"}      ]}</small>
|-
! style="color:green;width: 15%" |'''POST/qas/doc/modify/{id}'''
! colspan="2" style="width: 85%" |Обновление документа. <small>В случае успеха метод вернет статус выполнения операции (например, «success»), в случае неудачи — код ошибки.</small>
|-
| colspan="2" style="width: 50%" |
*<small>'''data''' — json c изменяемыми параметрами документа</small>
 
<small><code>{</code></small>
 
<small><code>  title: string,</code></small>
 
<small><code>  category: string,</code></small>
 
<small><code>  text: string</code></small>
 
<small><code>}</code></small>
 
<small>параметр который не меняется может отсутствовать в json</small>


* '''age''' - возраст
*<small>'''id''' — идентификатор документа.</small>
** 00-05
| style="width: 50%" |<small>{"error": INT, "message": DESCRIPTION}</small>
** 06-12
|-
** 13-19
! style="color:green;width: 15%" |'''POST/qas/doc/replace'''
** 20-29
! colspan="3" style="width: 85%" |Замена подстроки в текстах категории <small>Будут заменены все найденные вхождения</small>
** 30-39
** 40-49
** 50-59
** 60+
* '''emotion''' - эмоция
** ANGER
** BORE
** DISAPPOINTMENT
** DISGUST
** EXCITEMENT
** FEAR
** NEUTRAL
** PAIN
** PLEASURE
** SADNESS
** SUPRISE
* '''gender''' - пол
** MALE
** FEMALE
|-
|-
|/sbs/embedding/{id}
| colspan="2" style="width: 50%" |
|POST
*<small>'''search''' - искомая подстрока, будет заменена</small>
|Получение оцифрованного представления говорящего
 
*<small>'''replace''' - текст замены</small>
 
*<small>'''category''' - в какой категории искать</small>
| style="width: 50%" |<small>{"error": INT, "message": DESCRIPTION,"replacements":INT}</small>
|
|
* '''id''' - идентификатор модели.
* '''wav''' - файл для анализа
|Пример ответа:
<code>{</code> <code>error: 0,</code> <code>embedding: [</code> <code>0.019493144005537033,</code> <code>-0.08348844200372696,</code> <code>...</code> <code>]</code> <code>}</code>
|-
|-
|/sbs/search/{id}
! style="color:green;width: 15%" |'''POST/qas/doc/modifyphrases'''
|POST
! colspan="3" |Массовая замена текста в указанных фразах.
|Поиск говорящего по базе слепков
|-
| colspan="2" |
*<small>'''phrases''' - JSON массив с изменяемым фразами следующего вида:</small>
<small>[</small>
 
<small>{</small>
 
<small>'doc_id': 'ad895085-2e48-439a-831e-b5f699b6a54a',</small>
 
<small>'phrase_id': 5,</small>
 
<small>'text': 'новый текст'</small>
 
<small>}</small>
 
<small>]</small>
|<small>{"error": 0,"message": "success"}</small>
|
|
* '''id''' - идентификатор модели.
* '''wav''' - файл для анализа
|Пример ответа:
<code>{</code> <code>error: 0,</code> <code>speaker: Ivan,</code> <code>confidence: 0.79</code> <code>}</code>
|-
|-
|/sbs/speaker/{id}/{speaker_id}
! colspan="3" style="text-align: center" |'''<big>Группа методов question</big>'''
|POST
|-
|Добавление слепка в базу.
! style="color:green;width: 15%" |'''POST/qas/question/add'''
! colspan="2" style="width: 85%" |Добавление вопроса. <small>В случае успеха метод вернет id вопроса, в случае неудачи — код ошибки.</small>
|-
| colspan="2" style="width: 50%" |
*<small>'''question'''  — текст вопроса</small>
 
*<small>'''category'''  — id категории к которой относится вопрос</small>
 
*<small>'''answers''' — ответы в виде Json:</small>
 
<small><code>[ { "checked": true, "channel": "0", "answer": "ответ" } ]</code></small>
 
*<small>'''aliases''' - вопросы к которым подходят ответы из блока answers в виде json:</small>
 
<small><code>["вопрос","еще вопрос"]</code></small>
| style="width: 50%" |<small>{</small>
<small>  "error": 0,</small>
 
<small>  "id": "527be9f0-f773-4a3e-bd0b-81b40a061d0d"</small>
 
<small>}</small>
|-
! style="color:green;width: 15%" |'''POST/qas/question/append/{id}'''
! colspan="2" style="width: 85%" |Добавляет алиасы/кандидаты к другому вопросу
|-
| colspan="2" style="width: 50%" |
*<small>'''aliases'''  — JSON list с синонимами</small>
 
*<small>'''candidates'''  — JSON list с кандидатами</small>
 
*<small>'''id'''  — идентификатор вопроса к которому добавить синонимы и(или) кандидаты</small>
| style="width: 50%" |<small><nowiki>{error: 0 | 1, message: string}</nowiki></small>
|-
! style="color:green;width: 15%" |'''POST/qas/question/approve/{destination_id}'''
! colspan="2" style="width: 85%" |Перемещает кандидаты в формулировки другого вопроса
|-
| colspan="2" style="width: 50%" |
*<small>'''candidates'''  — json массив c текстами кандидатов</small>
 
*<small>'''destination_id'''  — идентификатор вопроса</small>
| style="width: 50%" |<small><nowiki>{error: 0 | 1, message: string}</nowiki></small>
|-
! style="color:green;width: 15%" |'''POST/qas/question/delete/list'''
! colspan="2" style="width: 85%" |Удаление списка вопросов или ответов.
|-
| colspan="2" style="width: 50%" |
*<small>'''questions''' — json строка с перечнем id</small>
 
*<small>'''type''' — выбор, удалять вопросы или ответы ('''questions''', '''answers''')</small>
| style="width: 50%" |<small>{"error": INT, "message": DESCRIPTION}</small>
|-
! style="color:red;width: 15%" |'''DELETE/qas/question/delete/{id}'''
! colspan="2" style="width: 85%" |Удаление вопроса.
|-
| colspan="2" style="width: 50%" |
*<small>'''id''' — идентификатор вопроса</small>
| style="width: 50%" |<small>{"error": INT, "message": DESCRIPTION}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/question/get/{id}'''
! colspan="2" style="width: 85%" |Получение вопроса вместе с ответами и синонимами вопроса.
|-
| colspan="2" style="width: 50%" |
*<small>'''id''' — идентификатор вопроса</small>
| style="width: 50%" |<small>{  "error": 0,</small>
<small>  "answers": [</small>
 
<small>    {   "checked": true,</small>
 
<small>      "channel": "0",</small>
 
<small>      "answer": "ответ"    }  ],</small>
 
<small>  "aliases": [</small>
 
<small>    "вопрос",</small>
 
<small>    "синоним вопроса",</small>
 
<small>    "еще синоним вопроса"  ]  }</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/question/list'''
! colspan="2" style="width: 85%" |Получение списка вопросов.
|-
| colspan="2" style="width: 50%" |
*<small>'''question'''  — фильтр вопросов</small>
*<small>'''category''' — фильтр категорий</small>
 
*<small>'''answer''' — фильтр ответов</small>
*<small>'''created''' — фильтр по дате создания, оставляет вопросы, созданные '''не ранее''' указанной даты</small>
*<small>'''createdBefore''' — фильтр по дате создания, оставляет вопросы, созданные '''не позже''' указанной даты</small>
*<small>'''modified''' — фильтр по дате изменения, оставляет вопросы, '''изменённые в точности''' в указанную дату</small>
*<small>'''onlyNew''' - фильтр, оставляющий только новые (необработанные) вопросы</small>
| style="width: 50%" |<small>{  "error": 0,</small>
<small>  "questions": [</small>
 
<small>    {      "id": "77b42c9b-2075-4a5f-b6d9-a284bba7cf43",</small>
 
<small>      "question": "вопрос",</small>
 
<small>      "category": "9580b3b7-34cb-4d0e-ba75-d17313ead16d"    },</small>
 
<small>    {      "id": "d1836e5e-010e-4f3a-b306-813c3acb7efb",</small>
 
<small>      "question": "n-й второй вопрос",</small>
 
<small>      "category": "7d8a3415-cb09-4dad-a169-478ba15ade47"    }</small>
 
<small>  ] }</small>
|-
! style="color:green;width: 15%" |'''POST/qas/question/modify/{id}'''
! colspan="2" style="width: 85%" |Модификация вопроса. Позволяет заменить как все параметры, так и отдельные.
|-
| colspan="2" style="width: 50%" |
*<small>'''data''' — json c измененными параметрами, пример полного:</small>
 
<small><code>{   "answers": [</code></small>
 
<small><code>    {</code></small>
 
<small><code>      "checked": true,</code></small>
 
<small><code>      "channel": "0",</code></small>
 
<small><code>      "answer": "новый ответ"</code></small>
 
<small><code>    }</code></small>
 
<small><code>  ],</code></small>
 
<small><code>"question":"новый вопрос",</code></small>
 
<small><code>"category": "a3801cc0-f8e5-4f3b-bb10-e42148cd772b",</code></small>
 
<small><code>  "aliases": [</code></small>
 
<small><code>    "новый вопрос",</code></small>
 
<small><code>    "синоним",</code></small>
 
<small><code>    "еще синоним"</code></small>
 
<small><code>  ]</code></small>
 
<small><code>}</code></small>
 
*<small>'''id''' — идентификатор вопроса</small>
| style="width: 50%" |<small>В случае успеха метод вернет статус выполнения операции (например, «success»), в случае неудачи — код ошибки.</small>
<small>{"error": INT, "message": DESCRIPTION}</small>
|-
! style="color:green;width: 15%" |'''POST/qas/question/replace'''
! colspan="3" style="width: 85%" |<small>Поиск и замена подстроки. Будут заменены все найденные вхождения</small>
|-
| colspan="2" style="width: 50%" |
*<small>'''search''' - искомая подстрока, будет заменена</small>
 
*<small>'''replace''' - текст замены</small>
 
*<small>'''category''' - в какой категории искать</small>
| style="width: 50%" |<small>{"error": INT, "message": DESCRIPTION,"replacements":INT}</small>
|
|
* '''id''' - идентификатор модели
* '''speaker_id''' - идентификатор говорящего
* '''wav''' - файл для создания оцифрованного представления говорящего
|<code>{ error: INT, message: DESCRIPTION }</code>
|-
|-
|/sbs/speaker/{id}/{speaker_id}
! style="color:green;width: 15%" |'''POST/qas/question/modifyanswers'''
|DELETE
! colspan="3" |Массовая замена текста в указанных ответах.
|Удаление слепка из базы
|-
| colspan="2" |
*<small>'''answers''' - JSON массив с изменяемым ответами следующего вида:</small>
<small>[</small>
 
<small>{</small>
 
<small>'question_id': 'ad895085-2e48-439a-831e-b5f699b6a54a',</small>
 
<small>'answer_id': 5,</small>
 
<small>'text': 'новый текст'</small>
 
<small>}</small>
 
<small>]</small>
|<small>{"error": 0,"message": "success"}</small>
|
|
* '''id''' - идентификатор модели
* '''speaker_id''' - идентификатор говорящего
|<code>{ error: INT, message: DESCRIPTION }</code>
|-
|-
|/sbs/speakers/{id}
! colspan="3" style="text-align: center" |'''<big>Группа методов summarization_template</big>'''
|GET
|-
|Получение списка всех слепков
! style="color:green;width: 15%" |'''POST/qas/summarization_template/add'''
|'''id''' - идентификатор модели
! colspan="2" style="width: 85%" |<small>Добавление шаблона протокола. В случае успеха метод вернет id шаблона, в случае неудачи — код ошибки.</small>
|<code>[</code> <code>"Kiryl",</code>
|-
<code>"Artem",</code> <code>"vladimir",</code> <code>"Sergey",</code> <code>"vladimir2",</code> <code>"Alla"</code> <code>]</code>
| colspan="2" style="width: 50%" |
*<small>'''name'''  — название шаблона</small>
 
*<small>'''options'''  — json словарь с именами разделов и их описанием</small>
| style="width: 50%" |<small>{</small><small>  "error": 0,</small><small>  "id": "527be9f0-f773-4a3e-bd0b-81b40a061d0d"</small><small>}</small>
|-
! style="color:red;width: 15%" |'''DELETE/qas/summarization_template/delete/{id}'''
! colspan="2" style="width: 85%" |<small>Удаление шаблона.</small>
|-
| colspan="2" style="width: 50%" |
*<small>'''id'''  — идентификатор шаблона</small>
| style="width: 50%" |<small>{"error": INT, "message": DESCRIPTION}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/summarization_template/get/{id}'''
! colspan="2" style="width: 85%" |<small>Получение json  с шаблоном.</small>
|-
| colspan="2" style="width: 50%" |
*<small>'''id'''  — идентификатор шаблона</small>
| style="width: 50%" |<small>На выходе словарь, основные элементы: data — словарь с шаблоном, остальные элементы этого уровня служебные. В data: id, name (идентификатор и наименование).</small><small>И options — словарь с разделами шаблона.</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/summarization_template/list'''
! colspan="2" style="width: 85%" |<small>Получение всех шаблонов.</small>
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| style="width: 50%" |<small>На выходе словарь, основной элемент — templates, содержит список шаблонов (каждый шаблон как в выдаче метода GET /qas/summarization_template/get/{id}).</small>
|-
! style="color:green;width: 15%" |'''POST/qas/summarization_template/modify/{id}'''
! colspan="2" style="width: 85%" |<small>Изменение шаблона.</small>
|-
| colspan="2" style="width: 50%" |
*<small>'''data'''  — словарь как в выдаче метода GET/qas/summarization_template/get/{id}</small>
 
*<small>'''id'''  —  идентификатор шаблона</small>
| style="width: 50%" |<small>{"error": INT, "message": DESCRIPTION}</small>
|-
! colspan="3" style="text-align: center" |'''<big>Группа методов prompt</big>'''
|-
! style="color:green;width: 15%" |'''POST/qas/prompt/add'''
! colspan="2" |Добавление шаблона запроса к LLM. <small>В случае успеха метод вернет id вопроса, в случае неудачи — код ошибки.</small>
|-
| colspan="2" |
*<small>'''type'''  — тип шаблона</small> <small>- chat - произвольный чат,</small> <small>- ask - запрос к документам,</small> <small>- cleandoc - очистка документа, форматирование либо другое преобразование,</small> <small>- similars_generator - генерация синонимичных которотких фраз,</small> <small>- paraphrase - перефразировка текста,</small> <small>- summarize - суммаризация текста (формирование краткой выдержки из текста),</small> <small>- question_generator - генерация вопросов по тексту,</small> <small>- replace - замена информации в тексте, mismatch - поиск несоответствий</small>
 
*<small>'''name'''  — название шаблона</small>
 
*<small>'''prompt''' — текст шаблона</small>
 
*<small>'''postprompt''' - текст шаблона постобработки результатов (нужен только для summarize)</small>
*<small>'''params''' - параметры запроса к LLM</small>"<small>max_tokens": 4096,</small> <small>"top_k": 30,</small>  <small>"top_p": 0.5,</small>  <small>"temperature": 0.5,</small>  <small>"repeat_penalty": 1.3</small>
|<small>{</small>
<small>  "error": 0,</small>
 
<small>  "id": "527be9f0-f773-4a3e-bd0b-81b40a061d0d"</small>
 
<small>}</small>
|-
! style="color:red;width: 15%" |'''DELETE/qas/prompt/delete/{id}'''
! colspan="2" |Удаление шаблона.
|-
| colspan="2" |
*<small>'''id''' — идентификатор вопроса</small>
|<small>{"error": INT, "message": DESCRIPTION}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/prompt/get/{id}'''
! colspan="2" |Получение шаблона.
|-
| colspan="2" |
*<small>'''id''' — идентификатор вопроса</small>
|<small>{</small><small>  "error": 0,</small>
 
<small>  "prompt": {</small>
 
<small>    "id": "cleandoc",</small>
 
<small>    "type": "cleandoc",</small>
 
<small>    "isDefault": false,</small>
 
<small>    "name": "Чистка документа",</small>
 
<small>    "prompt": "Удали сноски, колонтитуры и мусорную информацию из текста ниже. Не удаляй ничего лишнего. Не добавляй ничего, только информация из текста. Выведи только конечный результат без отчета о результате.\n###Текст:\n{context}\n\n###Конечный результат:",</small>
 
<small>    "postprompt": "",</small>
 
<small>    "_modified": 1751475766.7460272,</small>
 
<small>    "_created": 1751475766.7460272,</small>
 
<small>    "_modified_date": "2025-07-02",</small>
 
<small>    "_created_date": "2025-07-02"</small>
 
<small>  }</small>
 
<small>}</small>
|-
! style="color:blue;width: 15%" |'''GET/qas/prompt/list'''
! colspan="2" |Получение списка шаблонов.
|-
|-
|/sbs/verify/{id}/{speaker_id}
| colspan="2" |
|POST
|<small>{</small><small>  "error": 0,</small>
|Сравнение оцифрованного представления wav-файла cо слепком в базе
 
|
<small>  "prompts": [</small>
* '''id''' - идентификатор модели
 
* '''speaker_id''' - идентификатор говорящего
<small>    {</small>
|<code>{</code>
 
<code>"error": 0,</code>
<small>      "id": "chat",</small>
 
<small>      "type": "chat",</small>
 
<small>      "isDefault": false,</small>
 
<small>      "name": "Чат",</small>
 
<small>      "prompt": "Ты спокойный вежливый консультант.[\n\n###История переписки:\n{history}]\n\n###Вопрос: {question}\n###Ответ:",</small>
 
<small>      "postprompt": "",</small>
 
<small>      "_modified": 1751475766.7460272,</small>
 
<small>      "_created": 1751475766.7460272,</small>
 
<small>      "_modified_date": "2025-07-02",</small>
 
<small>      "_created_date": "2025-07-02"</small>
 
<small>    }</small>
 
<small>  ]</small>
 
<small>}</small>
|-
! style="color:green;width: 15%" |'''POST/qas/prompt/modify/{id}'''
! colspan="2" |Модификация шаблона. Позволяет заменить как все параметры, так и отдельные.
|-
| colspan="2" |
*<small>'''data''' — json c измененными параметрами:</small>


<code>"confidence": 0.78</code>
<small><code>"name": "новое имя" }</code></small>  


<code>}</code>
*<small>'''id''' — идентификатор вопроса</small>
|<small>В случае успеха метод вернет статус выполнения операции (например, «success»), в случае неудачи — код ошибки.</small>
<small>{"error": INT, "message": DESCRIPTION}</small>
|}
|}

Текущая версия от 14:52, 22 октября 2025

В Общее описание

Сервис предназначен для поиска ответа на заданный вопрос. Входным значением для сервиса являются данные в текстовом формате. В ответ на входящий запрос сервис возвращает данные в формате JSON.


Термины и определения

Question Answering System (QAS) – сервис ответов на вопросы.


Описание методов API

Сервис QAS доступен по протоколу HTTP 1.1 через порт 6187/tcp. Авторизация не требуется, но все запросы должны содержать заголовок «accept: application/json». Ответ сервиса возвращается в формате JSON. Если произошла ошибка, возвращается переменная «error=1» и описание ошибки в переменной «message». Для удобства тестирования и использования методов сервиса по адресу http://АДРЕС:6187 доступен интерфейс Swagger, который позволяет просматривать и тестировать все доступные методы из таблицы ниже.



Методы API
Группа методов qas
GET/qas/ask Метод генерирует ответ на поставленный вопрос на основе информации из документов в базе.

Ответ на вопрос генерируется на основе информации, содержащейся в одном или нескольких документах. Документы должны быть в текстовом формате. Ответ возвращается в формате JSON, его можно скачать. Если метод не смог найти ответ, возвращается код ошибки и сообщение.

  • text — текст вопроса, на основе которого будут искаться фрагменты.
  • category — id категории документа. Если не указать категорию, метод вернет ответ на основе всех документов в базе данных. Допускается указание нескольких категорий через разделитель "|".
  • channel — id канала
  • useCache — использовать кешированные ответы

возможные варианты:

— "no" не использовать

- "all" использовать все

- "checked" использовать только проверенные

  • useGPT — использовать генеративную сеть для поиска ответов в документах. возможные варианты "yes" "no"
  • model - имя модели GPT, если кроме default используются другие модели
  • template - ID шаблона запроса к LLM, необязательный параметр
  • addAlias — добавлять похожие вопросы к синонимам, не создавая отдельного вопроса. возможные варианты "yes" "no"
  • maxDocs — максимальное количество документов одной категории для формирования контекста при генерации ответа на вопрос, по умолчанию 1
  • similarityArea определяет допустимую разницу между максимальной и минимальной релевантностью фрагментов при фильтрации результатов
{

"error": 0,

"text": "Здесь будет текст ответа"

}

POST/qas/autocache Добавление вопросно-ответной пары в кэш.

В случае указания id answer будет принудительно добавлен в вопрос с указанным id. Если же указан question, то система сначала попытается найти похожий вопрос и добавить ответ в него, если же вопрос не будет найден, то система создаст новый с указанной формулировкой. При установке флага emptyQuestion будет добавлен только вопрос (без ответа).

  • question — текст вопроса
  • category — категория
  • channel — канал
  • answer — ответ
  • emptyQuestion — yes или no, флаг добавления вопроса без указания ответа
  • checked — yes или no, флаг добавления вопроса как «проверенного»
  • id — код существующего вопроса
{"error": 0, "message": "success"}
GET/qas/cachemaker/start Генерация ответов на вопросы в кэше.
  • category — категория для которой генерируются ответы, если указан код категории, то генерация только для этой категории
  • mode — режим генерации ответов, возможные значения:- paraphrase - генерирует вариации ответов перефразированием уже проверенных ответов, если таковые имеются на вопросе- generate — генерирует кэш через разные ответы на каждый вопрос по документации
  • option — {all | empty} обработать все вопросы или только не содержащие ответов
  • variants — количество ответов, от 1 до 9
  • replace — заменить ответы на сгенерированные
  • maxDocs — максимальное количество документов одной категории для формирования контекста при генерации ответа на вопрос, по умолчанию 1
  • model — какую модель использовать для генерации, если кроме default используются другие модели
  • template — ID шаблона запроса к LLM, необязательный параметр
{"error": 0, "message": "success"}
GET/qas/cachemaker/status Состояние генерации ответов на вопросы в кэше.

статусы: started, stopped, если были ошибки поле ответа

error будет содержать код ошибки

Входные параметры отсутствуют {  "error": "",

  "status": "started",

  "progress": 33.33 }

GET/qas/cachemaker/stop Остановить генерацию ответов на вопросы в кэше.
Входные параметры отсутствуют {"error": 0, "message": "success"}
POST/qas/chat Произвольный запрос в LLM.
  • text - текст вопроса
  • history - история вопросов, будет склеена с text при запросе
  • model - какую модель использовать для ответа, если кроме default используются другие модели
  • useInternalTemplate - использовать ли шаблон запроса. no - не использовать, либо код шаблона запроса к LLM. Необязательный параметр. Если не указан, используется шаблон по умолчанию.
  • params - необязательный параметр. JSON с произвольными параметрами запроса к LLM. Описание параметров см. в руководстве администратора.
Пример ответа на вопрос "как пройти в библиотеку"

{"error": 0,

"text": "1. Проверить время работы библиотеки (обычно от 9 до 20)\n2. Проверить местоположение библиотеки на карте или с помощью сервиса Google Maps\n3. Убедиться, что у вас есть необходимые документы для входа (паспорт, карта члена библиотеки и т.д.)\n4. Посетить библиотеку по адресу: [адрес библиотеки]\n5. Проверить правила поведения в библиотеке перед входом" }

POST/qas/cleandoc/start Очистка документа от лишней информации
  • text - текст документа
  • model - какую модель использовать для ответа, если кроме default используются другие модели
  • template - ID шаблона запроса к LLM, необязательный параметр
  • doc_id - необязательный параметр, ID документа
  • user_id - ID пользователя
{"error": 0, "message": "success"}
GET/qas/cleandoc/stop Остановка очистки документа для конкретного пользователя
  • user_id - ID пользователя
{"error": 0, "message": "success"}
GET/qas/cleandoc/status Статус очистки документа для конкретного пользователя
  • user_id - ID пользователя
{

"error": 0,

"status": stopped | started,

"progress": 33.3,

"message": string,

"place": number, #место в очереди

"queue": True | False #состояния - в очереди или в процессе очистки

}

GET/qas/cleandoc/result Результат очистки документа для конкретного пользователя
  • doc_id - необязательный параметр, ID документа
  • user_id - ID пользователя
{"error": 0,"status": "stopped","text": "очищенный текст","doc_id": "ID документа"}
POST/qas/paraphrase Генерация фраз-синонимов для предложения.
  • text - предложение
  • model - какую модель использовать для ответа, если кроме default используются другие модели
  • template - ID шаблона запроса к LLM, необязательный параметр
{"error": 0, "message": "success", "texts": [ "перефразированный текст 1", ... ]}
GET/qas/gpt/list Получение списка доступных(установленных) GPT моделей
Входные параметры отсутствуют {  "error": 0,  "message": "success",

  "models": ["default" ]}

GET/qas/questionlist/answers Отображает лог массовой обработки вопросов
Входные параметры отсутствуют на выходе :

массив из объектов {

  error: number;

  question: string;

  answer: string;

  confidence: number | null;

}

POST/qas/questionlist/start Старт массовой обработки вопросов
  • questions - файл с вопросами
  • format - в json или в text файл с вопросами
  • category — id категории документа. Если не указать категорию, метод вернет ответ на основе всех документов в базе данных. Допускается указание нескольких категорий через разделитель "|".
  • channel — id канала
  • useCache — использовать кешированные ответы

возможные варианты:

— "no" не использовать

- "all" использовать все

- "checked" использовать только проверенные

  • useGPT — использовать генеративную сеть для поиска ответов в документах. возможные варианты "yes" "no"
  • model - имя модели GPT, если кроме default используются другие модели
  • template - ID шаблона запроса к LLM, необязательный параметр
  • maxDocs - максимальное количество документов одной категории для формирования контекста при генерации ответа на вопрос, по умолчанию 1
  • addAlias — добавлять похожие вопросы к синонимам, не создавая отдельного вопроса. возможные варианты "yes" "no"
  • threshold - порог достоверности при обработке
{error: 0 | 1, message: string}
GET/qas/questionlist/status Статус массовой обработки вопросов
Входные параметры отсутствуют {     error: string;

     status: 'started' | 'stopped';

     progress: number; }

GET/qas/questionlist/stop Остановка массовой обработки вопросов
Входные параметры отсутствуют {error: 0 | 1, message: string}
POST/qas/mismatchsearcher/start Старт поиска несоответствий
  • category — id категории документа. Если не указать категорию, метод вернет ответ на основе всех документов в базе данных. Допускается указание нескольких категорий через разделитель "|".
  • model - имя модели GPT, если кроме default используются другие модели
  • template - ID шаблона запроса к LLM для анализа на несоответствия, необязательный параметр
  • asktemplate - ID шаблона запроса к LLM для генерации ответов по документу, необязательный параметр
  • answers - тип вопросов, по которым осуществляется поиск несоответствий, необязательный параметр, по умолчанию «all»
{error: 0 | 1, message: string}
GET/qas/mismatchsearcher/status Статус поиска несоответствий
Входные параметры отсутствуют {     error: string;

     status: 'started' | 'stopped';

     progress: number; }

GET/qas/mismatchsearcher/stop Остановка поиска несоответствий
Входные параметры отсутствуют {error: 0 | 1, message: string}
GET/qas/mismatchsearcher/mismatches Статус получения результатов
Входные параметры отсутствуют {"error": 0,"message": "success","mismatches": [{ "question_id": "ID вопроса",

"question": "вопрос", "category": "ID категории", "answer_id": "ID ответа", "answer": "ответ на вопрос {question}", "description": "результат поиска", "error" : string, "context": "фрагмент документа", "generatedText" : "Результат генерации" }, ... ] }

GET/qas/questionmaker/start Запуск генерации вопросов
  • category - ID категории, по которой будет происходить генерация вопросов
  • doc - ID документа, по которому будет происходить генерация вопросов
  • generateAnswers - флаг для генерации ответов вместе с вопросами [yse|no], по умолчанию «no»
  • model - имя модели GPT, если кроме default используются другие модели
  • template - ID шаблона запроса к LLM для анализа генерации вопросов, необязательный параметр
{ "error": 0, "message": "success" }
GET/qas/questionmaker/status Статус генерации вопросов
Входные параметры отсутствуют {

"error": string, "status": 'started' | 'stopped', "progress": 33.3 }

GET/qas/questionmaker/stop Прервать генерацию.
Входные параметры отсутствуют {error: 0 | 1, message: string}
GET/qas/search Поиск фрагментов содержащих ответ
  • text — текст запроса
  • category — категория (раздел) знаний. Допускается указание нескольких категорий через разделитель "|".
  • maxDocs - максимальное количество документов одной категории для формирования контекста при поиске ответа на вопрос, по умолчанию 1
  • similarityArea - определяет допустимую разницу между максимальной и минимальной релевантностью фрагментов при фильтрации результатов
{  "error": 0,

  "text": "

  Фрагмент 1:Здесь будет текст найденного фрагмента

  Фрагмент 2:Здесь будет текст найденного фрагмента",

  "fragments": [

    {      "id": "3a386b0a9e0e19efb0870685e1d0b484",

      "title": "Заголовок документа",

      "category": "Категория документа",

      "text": "Здесь будет текст найденного фрагмента"    },

    {      "id": "44fd73ea1ac63f32cf18d79c854dbfe2",

      "title": "Заголовок документа",

      "category": "Категория документа",

      "text": "Здесь будет текст найденного фрагмента"    }  ] }

POST/qas/summarize Построение протокола или краткого содержания совещания
  • text - текст совещания
  • options — словарь с разделами протокола, где ключ — название раздела, значение - краткая инструкция к формированию раздела.
  • model - какую GPT модель использовать для построения протокола, если кроме default используются другие модели
  • file — файл с текстом (текст, csv, pdf или текстовые офисные документы)
  • template - ID шаблона запроса к LLM, необязательный параметр
{  "error": 0,

  "message": "success",

  "summary": "здесь текст протокола"

}

POST/qas/replace корректировка информации в тексте при помощи LLM
  • text - текст
  • oldinfo — старая информация
  • newinfo — новая информация
  • model - какую модель использовать для генерации, если кроме default используются другие модели
  • template - ID шаблона запроса к LLM, необязательный параметр
{  "error": 0,

  "message": "success",

  "text": "итоговый текст"

}

POST/qas/replacementlist список всех фраз в документах и ответов в вопросах, подлежащих правке. Векторно ищет все фрагменты по указанному тексту.
  • text - текст
  • category — категория, в которой производится векторный поиск
  • threshold — порог похожести, необязательный параметр, если не указан, берется из конфигурационного файла (fragments -> threshold)
  • answers - тип вопросов, по которым осуществляется поиск для внесения правок, необязательный параметр, по умолчанию «all»
{"error": 0,

"message": "success",

"docs": [],

"answers": []

}

Группа методов channel
POST/qas/channel/add Добавление канала. В ответе id созданного канала или сообщение об ошибке
name — наименование канала {"error": 0,

"message": "success",

"id": "a46fb887-5d98-41e0-8299-bcc94f615e91"}

DELETE/qas/channel/delete/{id} Удаление канала
id — идентификатор канала { "error": 0, "message": "success" }
GET/qas/channel/list Получить список всех каналов
Входные параметры отсутствуют {  "error": 0,

  "channels": [

    {      "id": "1",      "name": "voice"    },

    {      "id": "56442779-e871-43fd-ae4d-caf4ab6d09b9",      "name": "канал++"    },

    {      "id": "0",      "name": "default"    }

  ] }

POST/qas/channel/modify/{id} Изменить канал. У канала пока есть только наименование, поэтому метод только переименовывает канал
  • name — новое наименование канала
  • id — идентификатор канала
{  "error": 0,

  "message": "success" }

Группа методов category
POST/qas/category/add обавить категорию с указанным именем. В ответе - id созданной категории или сообщение об ошибке:
  • name — наименование категории
{  "error": 0,

  "message": "success",

  "id": "ad895085-2e48-439a-831e-b5f699b6a54a" }

DELETE/qas/category/delete/{id} Удалить категорию. В ответе или сообщении об успехе, или ошибке, если категория используется или не существует.
  • id - идентификатор категории
{   "error": 0,

  "message": "success" }

GET/qas/category/list Получить список категорий
Входные параметры отсутствуют В ответе json с именами и id категорий
POST/qas/category/modify/{id} Изменить категорию. У категории пока есть только наименование, поэтому метод только переименовывает категорию
  • id — идентификатор категории
  • name — наименование категории
{  "error": 0,

  "message": "success" }

Группа методов doc
POST/qas/doc/add Загрузить текстовый документ. Добавляет документ в базу. В ответе - id созданного документа или сообщение об ошибке
  • title — заголовок документа
  • category — категория документа
  • textфайл документа
{"error": 0,

"message": "success",

"id": "ebe2bc57551c2d17f892987d1f62306d"}

DELETE/qas/doc/delete/{id} Удаление документа
  • id — идентификатор документа
{"error": 0,"message": "success"}
GET/qas/doc/get/{id} Выгрузка текста документа
  • id — идентификатор документа
{

  "error": 0,

  "text": "Здесь будет полный текст документа"

}

GET/qas/doc/list Получение списка имеющихся документов
Входные параметры отсутствуют Пример:

{  "error": 0,

  "docs": [

    {id": "d4999cdee5ad1faf2cb3066ea1b5e96b",

      "title": "PVE. Установка сервисного пакета окружения",

      "category": "Техническая поддержка" },

    {"id": "759042575b965745b9d2af869bca1740",

      "title": "UPS. Руководство администратора",

      "category": "Техническая поддержка"}   ]}

POST/qas/doc/modify/{id} Обновление документа. В случае успеха метод вернет статус выполнения операции (например, «success»), в случае неудачи — код ошибки.
  • data — json c изменяемыми параметрами документа

{

  title: string,

  category: string,

  text: string

}

параметр который не меняется может отсутствовать в json

  • id — идентификатор документа.
{"error": INT, "message": DESCRIPTION}
POST/qas/doc/replace Замена подстроки в текстах категории Будут заменены все найденные вхождения
  • search - искомая подстрока, будет заменена
  • replace - текст замены
  • category - в какой категории искать
{"error": INT, "message": DESCRIPTION,"replacements":INT}
POST/qas/doc/modifyphrases Массовая замена текста в указанных фразах.
  • phrases - JSON массив с изменяемым фразами следующего вида:

[

{

'doc_id': 'ad895085-2e48-439a-831e-b5f699b6a54a',

'phrase_id': 5,

'text': 'новый текст'

}

]

{"error": 0,"message": "success"}
Группа методов question
POST/qas/question/add Добавление вопроса. В случае успеха метод вернет id вопроса, в случае неудачи — код ошибки.
  • question — текст вопроса
  • category — id категории к которой относится вопрос
  • answers — ответы в виде Json:

[ { "checked": true, "channel": "0", "answer": "ответ" } ]

  • aliases - вопросы к которым подходят ответы из блока answers в виде json:

["вопрос","еще вопрос"]

{

  "error": 0,

  "id": "527be9f0-f773-4a3e-bd0b-81b40a061d0d"

}

POST/qas/question/append/{id} Добавляет алиасы/кандидаты к другому вопросу
  • aliases — JSON list с синонимами
  • candidates — JSON list с кандидатами
  • id — идентификатор вопроса к которому добавить синонимы и(или) кандидаты
{error: 0 | 1, message: string}
POST/qas/question/approve/{destination_id} Перемещает кандидаты в формулировки другого вопроса
  • candidates — json массив c текстами кандидатов
  • destination_id — идентификатор вопроса
{error: 0 | 1, message: string}
POST/qas/question/delete/list Удаление списка вопросов или ответов.
  • questions — json строка с перечнем id
  • type — выбор, удалять вопросы или ответы (questions, answers)
{"error": INT, "message": DESCRIPTION}
DELETE/qas/question/delete/{id} Удаление вопроса.
  • id — идентификатор вопроса
{"error": INT, "message": DESCRIPTION}
GET/qas/question/get/{id} Получение вопроса вместе с ответами и синонимами вопроса.
  • id — идентификатор вопроса
{  "error": 0,

  "answers": [

    {   "checked": true,

      "channel": "0",

      "answer": "ответ"    }  ],

  "aliases": [

    "вопрос",

    "синоним вопроса",

    "еще синоним вопроса"  ] }

GET/qas/question/list Получение списка вопросов.
  • question — фильтр вопросов
  • category — фильтр категорий
  • answer — фильтр ответов
  • created — фильтр по дате создания, оставляет вопросы, созданные не ранее указанной даты
  • createdBefore — фильтр по дате создания, оставляет вопросы, созданные не позже указанной даты
  • modified — фильтр по дате изменения, оставляет вопросы, изменённые в точности в указанную дату
  • onlyNew - фильтр, оставляющий только новые (необработанные) вопросы
{  "error": 0,

  "questions": [

    {      "id": "77b42c9b-2075-4a5f-b6d9-a284bba7cf43",

      "question": "вопрос",

      "category": "9580b3b7-34cb-4d0e-ba75-d17313ead16d"    },

    {      "id": "d1836e5e-010e-4f3a-b306-813c3acb7efb",

      "question": "n-й второй вопрос",

      "category": "7d8a3415-cb09-4dad-a169-478ba15ade47"    }

  ] }

POST/qas/question/modify/{id} Модификация вопроса. Позволяет заменить как все параметры, так и отдельные.
  • data — json c измененными параметрами, пример полного:

{   "answers": [

    {

      "checked": true,

      "channel": "0",

      "answer": "новый ответ"

    }

  ],

"question":"новый вопрос",

"category": "a3801cc0-f8e5-4f3b-bb10-e42148cd772b",

  "aliases": [

    "новый вопрос",

    "синоним",

    "еще синоним"

  ]

}

  • id — идентификатор вопроса
В случае успеха метод вернет статус выполнения операции (например, «success»), в случае неудачи — код ошибки.

{"error": INT, "message": DESCRIPTION}

POST/qas/question/replace Поиск и замена подстроки. Будут заменены все найденные вхождения
  • search - искомая подстрока, будет заменена
  • replace - текст замены
  • category - в какой категории искать
{"error": INT, "message": DESCRIPTION,"replacements":INT}
POST/qas/question/modifyanswers Массовая замена текста в указанных ответах.
  • answers - JSON массив с изменяемым ответами следующего вида:

[

{

'question_id': 'ad895085-2e48-439a-831e-b5f699b6a54a',

'answer_id': 5,

'text': 'новый текст'

}

]

{"error": 0,"message": "success"}
Группа методов summarization_template
POST/qas/summarization_template/add Добавление шаблона протокола. В случае успеха метод вернет id шаблона, в случае неудачи — код ошибки.
  • name — название шаблона
  • options — json словарь с именами разделов и их описанием
{  "error": 0,  "id": "527be9f0-f773-4a3e-bd0b-81b40a061d0d"}
DELETE/qas/summarization_template/delete/{id} Удаление шаблона.
  • id — идентификатор шаблона
{"error": INT, "message": DESCRIPTION}
GET/qas/summarization_template/get/{id} Получение json с шаблоном.
  • id — идентификатор шаблона
На выходе словарь, основные элементы: data — словарь с шаблоном, остальные элементы этого уровня служебные. В data: id, name (идентификатор и наименование).И options — словарь с разделами шаблона.
GET/qas/summarization_template/list Получение всех шаблонов.
Входные параметры отсутствуют На выходе словарь, основной элемент — templates, содержит список шаблонов (каждый шаблон как в выдаче метода GET /qas/summarization_template/get/{id}).
POST/qas/summarization_template/modify/{id} Изменение шаблона.
  • data — словарь как в выдаче метода GET/qas/summarization_template/get/{id}
  • id — идентификатор шаблона
{"error": INT, "message": DESCRIPTION}
Группа методов prompt
POST/qas/prompt/add Добавление шаблона запроса к LLM. В случае успеха метод вернет id вопроса, в случае неудачи — код ошибки.
  • type — тип шаблона - chat - произвольный чат, - ask - запрос к документам, - cleandoc - очистка документа, форматирование либо другое преобразование, - similars_generator - генерация синонимичных которотких фраз, - paraphrase - перефразировка текста, - summarize - суммаризация текста (формирование краткой выдержки из текста), - question_generator - генерация вопросов по тексту, - replace - замена информации в тексте, mismatch - поиск несоответствий
  • name — название шаблона
  • prompt — текст шаблона
  • postprompt - текст шаблона постобработки результатов (нужен только для summarize)
  • params - параметры запроса к LLM"max_tokens": 4096, "top_k": 30, "top_p": 0.5, "temperature": 0.5, "repeat_penalty": 1.3
{

  "error": 0,

  "id": "527be9f0-f773-4a3e-bd0b-81b40a061d0d"

}

DELETE/qas/prompt/delete/{id} Удаление шаблона.
  • id — идентификатор вопроса
{"error": INT, "message": DESCRIPTION}
GET/qas/prompt/get/{id} Получение шаблона.
  • id — идентификатор вопроса
{  "error": 0,

  "prompt": {

    "id": "cleandoc",

    "type": "cleandoc",

    "isDefault": false,

    "name": "Чистка документа",

    "prompt": "Удали сноски, колонтитуры и мусорную информацию из текста ниже. Не удаляй ничего лишнего. Не добавляй ничего, только информация из текста. Выведи только конечный результат без отчета о результате.\n###Текст:\n{context}\n\n###Конечный результат:",

    "postprompt": "",

    "_modified": 1751475766.7460272,

    "_created": 1751475766.7460272,

    "_modified_date": "2025-07-02",

    "_created_date": "2025-07-02"

  }

}

GET/qas/prompt/list Получение списка шаблонов.
{  "error": 0,

  "prompts": [

    {

      "id": "chat",

      "type": "chat",

      "isDefault": false,

      "name": "Чат",

      "prompt": "Ты спокойный вежливый консультант.[\n\n###История переписки:\n{history}]\n\n###Вопрос: {question}\n###Ответ:",

      "postprompt": "",

      "_modified": 1751475766.7460272,

      "_created": 1751475766.7460272,

      "_modified_date": "2025-07-02",

      "_created_date": "2025-07-02"

    }

  ]

}

POST/qas/prompt/modify/{id} Модификация шаблона. Позволяет заменить как все параметры, так и отдельные.
  • data — json c измененными параметрами:

{ "name": "новое имя" }

  • id — идентификатор вопроса
В случае успеха метод вернет статус выполнения операции (например, «success»), в случае неудачи — код ошибки.

{"error": INT, "message": DESCRIPTION}