Действия

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

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

Нет описания правки
 
(не показано 37 промежуточных версий 4 участников)
Строка 10: Строка 10:


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






{| class="wikitable" style="width: 110%"
{| class="wikitable" style="width: 110%"
|+''Описание методов API''
|+''Методы API''
|-
|-
! colspan="4" |'''<big>Группа методов qas</big>'''
! colspan="3" style="text-align: center" |'''<big>Группа методов qas</big>'''
|-
|-
! style="color:blue;width: 15%" |'''GET/qas/ask'''
! style="color:blue;width: 15%" |'''GET/qas/ask'''
! colspan="3" style="width: 85%" |Метод генерирует ответ на поставленный вопрос на основе информации из документов в базе. <small>Ответ на вопрос генерируется на основе информации, содержащейся в одном или нескольких документах. Документы должны быть в текстовом формате. Ответ возвращается в формате JSON, его можно скачать. Если метод не смог найти ответ, возвращается код ошибки и сообщение.</small>
! colspan="2" style="width: 85%" |Метод генерирует ответ на поставленный вопрос на основе информации из документов в базе.  
<small>Ответ на вопрос генерируется на основе информации, содержащейся в одном или нескольких документах. Документы должны быть в текстовом формате. Ответ возвращается в формате JSON, его можно скачать. Если метод не смог найти ответ, возвращается код ошибки и сообщение.</small>
|-
|-
| colspan="2" style="width: 50%" |
| colspan="2" style="width: 50%" |
* <small>'''text''' — текст вопроса, на основе которого будут искаться фрагменты.</small>
* <small>'''text''' — текст вопроса, на основе которого будут искаться фрагменты.</small>
* <small>'''category''' — id категории документа. Если не указать категорию, метод вернет ответ на основе всех документов в базе данных.</small>
* <small>'''category''' — id категории документа. Если не указать категорию, метод вернет ответ на основе всех документов в базе данных. Допускается указание нескольких категорий через разделитель "|".</small>
* <small>'''channel''' — id канала</small>
* <small>'''channel''' — id канала</small>
* <small>'''creative''' — флаг креативности возможные варианты "yes" "no"</small>
* <small>'''useCache''' — использовать кешированные ответы</small>
* <small>'''useCache''' — использовать кешированные ответы</small>


<small>возможные варианты:</small>
<small>возможные варианты:</small>


<small>- "'''no'''" не использовать</small>
<small>"'''no'''" не использовать</small>


<small>- "'''all'''" использовать все</small>
<small>- "'''all'''" использовать все</small>
Строка 37: Строка 38:
<small>- "'''checked'''" использовать только проверенные</small>
<small>- "'''checked'''" использовать только проверенные</small>


* <small>'''useGPT''' - использовать генеративную сеть для поиска ответов в документах. возможные варианты "'''yes'''" "'''no'''"</small>
* <small>'''useGPT''' использовать генеративную сеть для поиска ответов в документах. возможные варианты "'''yes'''" "'''no'''"</small>
* <small>'''model''' - имя модели GPT, если кроме default используются другие модели</small>
*<small>'''template''' - ID шаблона запроса к LLM, необязательный параметр</small>


* <small>'''addAlias''' - добавлять похожие вопросы к синонимам, не создавая отдельного вопроса. возможные варианты "'''yes'''" "'''no'''"</small>
*<small>'''addAlias''' добавлять похожие вопросы к синонимам, не создавая отдельного вопроса. возможные варианты "'''yes'''" "'''no'''"</small>
| colspan="2" style="width: 50%" |<small>{</small>
*<small>'''maxDocs''' — максимальное количество документов одной категории для формирования контекста при генерации ответа на вопрос, по умолчанию 1</small>
*'''<small>similarityArea</small>''' <small>—</small> <small>определяет допустимую разницу между максимальной и минимальной релевантностью фрагментов при фильтрации результатов</small>
| style="width: 50%" |<small>{</small>
<small>"error": 0,</small>
<small>"error": 0,</small>


Строка 48: Строка 53:
|-
|-
! style="color:green;width: 15%" |'''POST/qas/autocache'''
! style="color:green;width: 15%" |'''POST/qas/autocache'''
! colspan="3" style="width: 85%" |Добавление вопросно-ответной пары в кэш.  
! colspan="2" style="width: 85%" |Добавление вопросно-ответной пары в кэш.  
<small>В случае указания id, answer будет принудительно добавлен в вопрос, с указанным id. Если же указан question, то система сначала попытается найти похожий вопрос и добавить ответ в него, если же вопрос не будет найден, то система создаст новый с указанной формулировкой. При установке флага emptyQuestion будет добавлен только вопрос (без ответа). Флаг addAlias отвечает за добавление/не добавление кандидата в формулировки существующего вопроса в случае, если в базе уже найден вопрос, сооветствующий указанному в question.</small>
<small>В случае указания id answer будет принудительно добавлен в вопрос с указанным id. Если же указан question, то система сначала попытается найти похожий вопрос и добавить ответ в него, если же вопрос не будет найден, то система создаст новый с указанной формулировкой. При установке флага emptyQuestion будет добавлен только вопрос (без ответа).</small>
|-
|-
| colspan="2" style="width: 50%" |
| colspan="2" style="width: 50%" |
* <small>'''question''' - текст вопроса</small>
*<small>'''question''' текст вопроса</small>
* <small>'''category''' - категория</small>
*<small>'''category''' категория</small>
* <small>'''channel''' - канал</small>
*<small>'''channel''' канал</small>
* <small>'''answer''' - ответ</small>
*<small>'''answer''' ответ</small>
* <small>'''emptyQuestion''' - yes или no, флаг добавления вопроса без указания ответа</small>
*<small>'''emptyQuestion''' yes или no, флаг добавления вопроса без указания ответа</small>
* <small>'''addAlias''' - yes или no, флаг добавления кандидата в формулировки существующего вопроса</small>
*<small>'''checked''' yes или no, флаг добавления вопроса как «проверенного»</small>
* <small>'''id''' - код существующего вопроса</small>
*<small>'''id''' код существующего вопроса</small>
| colspan="2" style="width: 50%" |<small>{"error": 0, "message": "success"}</small>  
| style="width: 50%" |<small>{"error": 0, "message": "success"}</small>
|-
|-
! style="color:blue;width: 15%" |'''GET/qas/cachemaker/start'''
! style="color:blue;width: 15%" |'''GET/qas/cachemaker/start'''
! colspan="3" style="width: 85%" |Генерация ответов на вопросы в кэше.  
! colspan="2" style="width: 85%" |Генерация ответов на вопросы в кэше.
|-
|-
| colspan="2" style="width: 50%" |
| colspan="2" style="width: 50%" |
* <small>'''category''' категория для которой генерируются ответы</small>
*<small>'''category''' категория для которой генерируются ответы, если указан код категории, то генерация только для этой категории</small>  
 
* <small>'''mode''' - режим генерации ответов, возможные значения:</small>
 
<small>'''paraphrase''' - генерирует вариации ответов перефразированием уже проверенных ответов, если таковые имеются на вопросе</small>


<small>'''generate''' - генерирует кэш через разные ответы на каждый вопрос по документации</small>
*<small>'''mode''' — режим генерации ответов, возможные значения:</small><small>'''- paraphrase''' - генерирует вариации ответов перефразированием уже проверенных ответов, если таковые имеются на вопросе</small><small>'''- generate''' генерирует кэш через разные ответы на каждый вопрос по документации</small>


* <small>option -</small>  
*<small>'''option''' — {all | empty} обработать все вопросы  или только не содержащие ответов</small>


* <small>'''variants''' - количество ответов, от 1 до 9</small>
*<small>'''variants''' количество ответов, от 1 до 9</small>
| colspan="2" style="width: 50%" |<small>{"error": 0, "message": "success"}</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'''
! style="color:blue;width: 15%" |'''GET/qas/cachemaker/status'''
! colspan="3" style="width: 85%" |Состояние генерации ответов на вопросы в кэше.
! colspan="2" style="width: 85%" |Состояние генерации ответов на вопросы в кэше.


<small>статусы: '''started''', '''stopped''', если были ошибки поле ответа</small>
<small>статусы: '''started''', '''stopped''', если были ошибки поле ответа</small>


<small>'''error''' будет содержать код ошибки</small>  
<small>'''error''' будет содержать код ошибки</small>
|-
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>{  "error": "",</small>
| style="width: 50%" |<small>{  "error": "",</small>


<small>  "status": "started",</small>
<small>  "status": "started",</small>


<small>  "progress": 33.33 }</small>  
<small>  "progress": 33.33 }</small>
|-
|-
! style="color:blue;width: 15%" |'''GET/qas/cachemaker/stop'''
! style="color:blue;width: 15%" |'''GET/qas/cachemaker/stop'''
! colspan="3" style="width: 85%" |Остановить генерацию ответов на вопросы в кэше.  
! colspan="2" style="width: 85%" |Остановить генерацию ответов на вопросы в кэше.
|-
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>{"error": 0, "message": "success"}</small>  
| style="width: 50%" |<small>{"error": 0, "message": "success"}</small>
|-
|-
! style="color:green;width: 15%" |'''POST/qas/chat'''
! style="color:green;width: 15%" |'''POST/qas/chat'''
! colspan="3" style="width: 85%" |Поиск ответа за пределами документов. <small>На стадии разработки, не используется.</small>
! colspan="2" style="width: 85%" |Произвольный запрос в LLM.
|-
|-
| colspan="2" style="width: 50%" |
| colspan="2" style="width: 50%" |
* <small>'''text -''' текст вопроса</small>
*<small>'''text -''' текст вопроса</small>
| colspan="2" style="width: 50%" |<small>Пример ответа на вопрос "как пройти в библиотеку"</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>{"error": 0,</small>


<small>"text": "1. Проверить время работы библиотеки (обычно от 9 до 20)\n2. Проверить местоположение библиотеки на карте или с помощью сервиса Google Maps\n3. Убедиться, что у вас есть необходимые документы для входа (паспорт, карта члена библиотеки и т.д.)\n4. Посетить библиотеку по адресу: [адрес библиотеки]\n5. Проверить правила поведения в библиотеке перед входом" }</small>  
<small>"text": "1. Проверить время работы библиотеки (обычно от 9 до 20)\n2. Проверить местоположение библиотеки на карте или с помощью сервиса Google Maps\n3. Убедиться, что у вас есть необходимые документы для входа (паспорт, карта члена библиотеки и т.д.)\n4. Посетить библиотеку по адресу: [адрес библиотеки]\n5. Проверить правила поведения в библиотеке перед входом" }</small>
|-
|-
! style="color:blue;width: 15%" |'''GET/qas/chat'''
! style="color:green;width: 15%" |'''POST/qas/cleandoc/start'''
! colspan="3" style="width: 85%" |Поиск ответа за пределами документов. <small>Аналогичен методу  "POST/qas/chat". Не поддерживает большие тексты.На стадии разработки, не используется.</small>
! colspan="2" |Очистка документа от лишней информации
|-
|-
| colspan="2" style="width: 50%" |
| colspan="2" |
* <small>'''text -''' текст вопроса</small>
*<small>'''text -''' текст документа</small>
| colspan="2" style="width: 50%" |<small>Аналогично методу "POST/qas/chat".</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'''
! style="color:blue;width: 15%" |'''GET/qas/questionlist/answers'''
! colspan="3" style="width: 85%" |Отображает лог массовой обработки вопросов  
! colspan="2" style="width: 85%" |Отображает лог массовой обработки вопросов
|-
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>на выходе :</small>
| style="width: 50%" |<small>на выходе :</small>


<small>массив из объектов {</small>
<small>массив из объектов {</small>
Строка 132: Строка 196:
<small>  confidence: number | null;</small>
<small>  confidence: number | null;</small>


<small>}</small>  
<small>}</small>
|-
|-
! style="color:green;width: 15%" |'''POST/qas/questionlist/start'''
! style="color:green;width: 15%" |'''POST/qas/questionlist/start'''
! colspan="3" style="width: 85%" |Старт массовой обработки вопросов  
! colspan="2" style="width: 85%" |Старт массовой обработки вопросов
|-
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |
| colspan="2" style="width: 50%" | <small><nowiki>{error: 0 | 1, message: string}</nowiki></small>
* <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'''
! style="color:blue;width: 15%" |'''GET/qas/questionlist/status'''
! colspan="3" style="width: 85%" |Статус массовой обработки вопросов  
! colspan="2" style="width: 85%" | Статус массовой обработки вопросов
|-
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>{     error: string;</small>
| style="width: 50%" |<small>{     error: string;</small>


<small>     status: 'started' | 'stopped';</small>
<small>     status: 'started' | 'stopped';</small>


<small>     progress: number; }</small>  
<small>     progress: number; }</small>
|-
|-
! style="color:blue;width: 15%" |'''GET/qas/questionlist/stop'''
! style="color:blue;width: 15%" |'''GET/qas/questionlist/stop'''
! colspan="3" style="width: 85%" |Остановка массовой обработки вопросов  
! colspan="2" style="width: 85%" |Остановка массовой обработки вопросов
|-
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" | <small><nowiki>{error: 0 | 1, message: string}</nowiki></small>
| style="width: 50%" |<small><nowiki>{error: 0 | 1, message: string}</nowiki></small>
|-
|-
! style="color:blue;width: 15%" |'''GET/qas/questionmaker/start'''
! style="color:green;width: 15%" |'''POST/qas/mismatchsearcher/start'''
! colspan="3" style="width: 85%" |Запуск генерации вопросов для кэша. <small>По каждому документу генерируются по 5 вопросов на фрагмент. Количество фрагментов зависят от размера документа и настройки размера контекста из конфигурационного файла. Если вопрос сильно похож на существующий, новый не создается, а добавляется к существующему в aliases.</small>
! colspan="2" | Старт поиска несоответствий
|-
|-
| colspan="2" style="width: 50%" |
| colspan="2" |
* <small>'''category''' — категория, для которой выполнится генерация вопросов.</small>
*<small>'''category''' — id категории документа. Если не указать категорию, метод вернет ответ на основе всех документов в базе данных. Допускается указание нескольких категорий через разделитель "|".</small>
| colspan="2" style="width: 50%" | <small><nowiki>{error: 0 | 1, message: string}</nowiki></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/questionmaker/status'''
! style="color:blue;width: 15%" |'''GET/qas/mismatchsearcher/status'''
! colspan="3" style="width: 85%" |Проверка состояния генерации. <small>Статусы''': started''', '''stopped.''' Если были ошибки поле ответа '''error''' будет содержать код ошибки</small>
! colspan="2" style="width: 85%" | Статус поиска несоответствий
|-
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>{  "error": "",</small>
| style="width: 50%" |<small>{     error: string;</small>


<small>  "status": "stopped",</small>
<small>     status: 'started' | 'stopped';</small>


<small>  "progress": 0 }</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'''
! style="color:blue;width: 15%" |'''GET/qas/questionmaker/stop'''
! colspan="3" style="width: 85%" |Прервать генерацию.  
! colspan="2" style="width: 85%" |Прервать генерацию.
|-
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" | <small><nowiki>{error: 0 | 1, message: string}</nowiki></small>
| style="width: 50%" |<small><nowiki>{error: 0 | 1, message: string}</nowiki></small>
|-
|-
! style="color:blue;width: 15%" |'''GET/qas/search'''
! style="color:blue;width: 15%" |'''GET/qas/search'''
! colspan="3" style="width: 85%" |Поиск фрагментов содержащих ответ  
! colspan="2" style="width: 85%" |Поиск фрагментов содержащих ответ
|-
|-
| colspan="2" style="width: 50%" |
| colspan="2" style="width: 50%" |
* <small>'''text'''  — текст запроса</small>
*<small>'''text'''  — текст запроса</small>


* <small>'''category''' — категория (раздел) знаний</small>
*<small>'''category''' — категория (раздел) знаний. Допускается указание нескольких категорий через разделитель "|".</small>
| colspan="2" style="width: 50%" |<small>{  "error": 0,</small>
*<small>'''maxDocs''' - максимальное количество документов одной категории для формирования контекста при поиске ответа на вопрос, по умолчанию 1</small>
*'''<small>similarityArea -</small>''' <small>определяет допустимую разницу между максимальной и минимальной релевантностью фрагментов при фильтрации результатов</small>
| style="width: 50%" |<small>{  "error": 0,</small>
<small>  "text": "</small>
<small>  "text": "</small>


Строка 211: Строка 346:
<small>      "text": "Здесь будет текст найденного фрагмента"    }  ]  }</small>
<small>      "text": "Здесь будет текст найденного фрагмента"    }  ]  }</small>
|-
|-
! colspan="4" |'''<big>Группа методов channel</big>'''
! 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'''
! style="color:green;width: 15%" |'''POST/qas/channel/add'''
! colspan="3" style="width: 85%" |Добавление канала. <small>В ответе id созданного канала или сообщение об ошибке</small>
! colspan="2" style="width: 85%" |Добавление канала. <small>В ответе id созданного канала или сообщение об ошибке</small>
|-
|-
| colspan="2" style="width: 50%" |<small>'''name''' — наименование канала</small>
| colspan="2" style="width: 50%" |<small>'''name''' — наименование канала</small>
| colspan="2" style="width: 50%" |<small>{"error": 0,</small>
| style="width: 50%" |<small>{"error": 0,</small>
<small>"message": "success",</small>
<small>"message": "success",</small>


Строка 223: Строка 411:
|-
|-
! style="color:red;width: 15%" |'''DELETE/qas/channel/delete/{id}'''
! style="color:red;width: 15%" |'''DELETE/qas/channel/delete/{id}'''
! colspan="3" style="width: 85%" |Удаление канала  
! colspan="2" style="width: 85%" |Удаление канала
|-
|-
| colspan="2" style="width: 50%" |<small>'''id''' — идентификатор канала</small>
| colspan="2" style="width: 50%" |<small>'''id''' — идентификатор канала</small>
| colspan="2" style="width: 50%" | <small>{ "error": 0, "message": "success" }</small>
| style="width: 50%" |<small>{ "error": 0, "message": "success" }</small>
|-
|-
! style="color:blue;width: 15%" |'''GET/qas/channel/list'''
! style="color:blue;width: 15%" |'''GET/qas/channel/list'''
! colspan="3" style="width: 85%" |Получить список всех каналов  
! colspan="2" style="width: 85%" |Получить список всех каналов
|-
|-
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>{  "error": 0,</small>
| style="width: 50%" |<small>{  "error": 0,</small>
<small>  "channels": [</small>
<small>  "channels": [</small>


Строка 244: Строка 432:
|-
|-
! style="color:green;width: 15%" |'''POST/qas/channel/modify/{id}'''
! style="color:green;width: 15%" |'''POST/qas/channel/modify/{id}'''
! colspan="3" style="width: 85%" |Изменить канал. <small>У канала пока есть только наименование, поэтому метод только переименовывает канал</small>
! colspan="2" style="width: 85%" |Изменить канал. <small>У канала пока есть только наименование, поэтому метод только переименовывает канал</small>
|-
|-
| colspan="2" style="width: 50%" |
| colspan="2" style="width: 50%" |
* <small>'''name''' — новое наименование канала</small>
*<small>'''name''' — новое наименование канала</small>


* <small>'''id''' — идентификатор канала</small>
*<small>'''id''' — идентификатор канала</small>
| colspan="2" style="width: 50%" |<small>{  "error": 0,</small>
| style="width: 50%" |<small>{  "error": 0,</small>
<small>  "message": "success"  }</small>
<small>  "message": "success"  }</small>
|-
|-
! colspan="4" |'''<big>Группа методов category</big>'''
! 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:green;width: 15%" |'''POST'''
! style="color:red;width: 15%" |'''DELETE/qas/category/delete/{id}'''
! colspan="3" style="width: 85%" |<small>заголовок</small>
! colspan="2" style="width: 85%" | Удалить категорию. <small>В ответе или сообщении об успехе, или ошибке, если категория используется или не существует.</small>
|-
|-
| colspan="2" style="width: 50%" |<small>Вход</small>
| colspan="2" style="width: 50%" |  
| colspan="2" style="width: 50%" |<small>выход</small>
*<small>'''id''' - идентификатор категории</small>
| style="width: 50%" |<small>{   "error": 0,</small>
<small>  "message": "success" }</small>
|-
|-
! style="color:red;width: 15%" |'''DELETE'''
! style="color:blue;width: 15%" |'''GET/qas/category/list'''
! colspan="3" style="width: 85%" |<small>заголовок</small>
! colspan="2" style="width: 85%" |Получить список категорий
|-
|-
| colspan="2" style="width: 50%" |<small>Вход</small>
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
| colspan="2" style="width: 50%" |<small>выход</small>
| style="width: 50%" |<small>В ответе json с именами и id категорий</small>
|-
|-
! style="color:blue;width: 15%" |'''GET'''
! style="color:green;width: 15%" |'''POST/qas/category/modify/{id}'''
! colspan="3" style="width: 85%" |<small>заголовок</small>
! colspan="2" style="width: 85%" |Изменить категорию. <small>У категории пока есть только наименование, поэтому метод только переименовывает категорию</small>
|-
|-
| colspan="2" style="width: 50%" |<small>Вход</small>
| colspan="2" style="width: 50%" |
| colspan="2" style="width: 50%" |<small>выход</small>
*<small>'''id''' — идентификатор категории</small>
*<small>'''name''' — наименование категории</small>
| style="width: 50%" |<small>{  "error": 0,</small>
<small>  "message": "success" }</small>
|-
|-
! style="color:green;width: 15%" |'''POST'''
! colspan="3" style="text-align: center" |'''<big>Группа методов doc</big>'''
! colspan="3" style="width: 85%" |<small>заголовок</small>
|-
|-
| colspan="2" style="width: 50%" |<small>Вход</small>
! style="color:green;width: 15%" |'''POST/qas/doc/add'''
| colspan="2" style="width: 50%" |<small>выход</small>
! 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>
 
 
 
 
{| class="wikitable"
|+
!Метод
!Тип
!Описание
!Входные параметры
!Ответ
|-
|-
! colspan="5" |Группа методов qas
! style="color:blue;width: 15%" |'''GET/qas/doc/list'''
! colspan="2" style="width: 85%" |Получение списка имеющихся документов
|-
|-
|/qas/ask
| colspan="2" style="width: 50%" |<small>Входные параметры отсутствуют</small>
|GET
| style="width: 50%" |<small>Пример:</small>
|Метод генерирует ответ на поставленный вопрос на основе информации из документов в базе
<small>{  "error": 0,</small>
|
*'''text''' - текст вопроса, на основе которого будут искаться фрагменты.
* '''category''' - id категории документа. Если не указать категорию, метод вернет ответ на основе всех документов в базе данных.
* '''channel -''' id канала
* '''creative''' - флаг креативности возможные варианты "yes" "no"
* '''useCache''' - использовать кешированные ответы
возможные варианты:
 
- "'''no'''" не использовать
 
- "'''all'''" использовать все
 
- "'''checked'''" использовать только проверенные


* '''useGPT''' - использовать генеративную сеть для поиска ответов в документах
<small>  "docs": [</small>


возможные варианты "'''yes'''" "'''no'''"
<small>    {id": "d4999cdee5ad1faf2cb3066ea1b5e96b",</small>


* '''addAlias''' - добавлять кандидата в формулировки вопроса для последующего утверждения и использования при поиске, '''yes''' или '''no'''.
<small>      "title": "PVE. Установка сервисного пакета окружения",</small>
|
Ответ на вопрос генерируется на основе информации, содержащейся в одном или нескольких документах. Документы должны быть в текстовом формате. Ответ возвращается в формате JSON, его можно скачать. Если метод не смог найти ответ, возвращается код ошибки и сообщение.


<code>{</code>  
<small>      "category": "Техническая поддержка" },</small>


<code>"error": INT,</code>  
<small>    {"id": "759042575b965745b9d2af869bca1740",</small>


<code>"answer": "''ответ на вопрос''"</code>
<small>      "title": "UPS. Руководство администратора",</small>


<code>}</code>
<small>      "category": "Техническая поддержка"}      ]}</small>
|-
|-
|/qas/autocache
! style="color:green;width: 15%" |'''POST/qas/doc/modify/{id}'''
|POST
! colspan="2" style="width: 85%" |Обновление документа. <small>В случае успеха метод вернет статус выполнения операции (например, «success»), в случае неудачи — код ошибки.</small>
|Метод добавления вопросно-ответной пары в кэш
|
* '''question''' - текст вопроса
* '''category''' - категория
* '''channel''' - канал
* '''answer''' - ответ
* '''emptyQuestion''' - yes или no, флаг добавления вопроса без указания ответа
* '''addAlias''' - yes или no, флаг добавления кандидата в формулировки существующего вопроса
* '''id''' - код существующего вопроса
|В случае указания id, answer будет принудительно добавлен в вопрос, с указанным id. Если же указан question, то система сначала попытается найти похожий вопрос и добавить ответ в него, если же вопрос не будет найден, то система создаст новый с указанной формулировкой. При установке флага emptyQuestion будет добавлен только вопрос (без ответа). Флаг addAlias отвечает за добавление/не добавление кандидата в формулировки существующего вопроса в случае, если в базе уже найден вопрос, сооветствующий указанному в question.
|-
|-
|/qas/cachemaker/start
| colspan="2" style="width: 50%" |
|GET
*<small>'''data''' — json c изменяемыми параметрами документа</small>
|Генерация ответов на вопросы в кэше.
|
* '''category''' категория для которой генерируются ответы
 
* '''mode''' - режим генерации ответов, возможные значения:


'''paraphrase''' - генерирует вариации ответов перефразированием уже проверенных ответов, если таковые имеются на вопросе
<small><code>{</code></small>


'''generate''' - генерирует кэш через разные ответы на каждый вопрос по документации
<small><code>  title: string,</code></small>


* '''variants''' - количество ответов, от 1 до 9
<small><code>  category: string,</code></small>
|{"error": 0, "message": "success"}
|-
|/qas/cachemaker/status
|GET
|Состояние генерации ответов на вопросы в кэше.
'''статусы:'''
'''started''', '''stopped''', если были ошибки поле ответа


'''error''' будет содержать код ошибки
<small><code>  text: string</code></small>
| -
|{


  "error": "",
<small><code>}</code></small>


  "status": "started",
<small>параметр который не меняется может отсутствовать в json</small>


  "progress": 33.33
*<small>'''id''' — идентификатор документа.</small>
 
| style="width: 50%" |<small>{"error": INT, "message": DESCRIPTION}</small>
}
|-
|-
|/qas/cachemaker/stop
! style="color:green;width: 15%" |'''POST/qas/doc/replace'''
|GET
! colspan="3" style="width: 85%" |Замена подстроки в текстах категории <small>Будут заменены все найденные вхождения</small>
|Остановить генерацию ответов на вопросы в кэше.
| -
|{"error": 0, "message": "success"}
|-
|-
|/qas/chat
| colspan="2" style="width: 50%" |
|GET
*<small>'''search''' - искомая подстрока, будет заменена</small>
|Поиск ответа за пределами документов. На стадии разработки, не используется.
|
* '''text -''' текст вопроса
|Пример ответа на вопрос "как пройти в библиотеку"


"error": 0, 
*<small>'''replace''' - текст замены</small>


"text": "1. Проверить время работы библиотеки (обычно от 9 до 20)\n2. Проверить местоположение библиотеки на карте или с помощью сервиса Google Maps\n3. Убедиться, что у вас есть необходимые документы для входа (паспорт, карта члена библиотеки и т.д.)\n4. Посетить библиотеку по адресу: [адрес библиотеки]\n5. Проверить правила поведения в библиотеке перед входом" 
*<small>'''category''' - в какой категории искать</small>
 
| style="width: 50%" |<small>{"error": INT, "message": DESCRIPTION,"replacements":INT}</small>
}
|-
|/qas/questionmaker/start
|GET
|Запуск генерации вопросов для кэша. По каждому документу генерируются по 5 вопросов на фрагмент. Количество фрагментов зависят от размера документа и настройки размера контекста из конфигурационного файла. Если вопрос сильно похож на существующий - новый не создается, а добавляется к существующему в aliases
|
* '''category''' - id категории для которой генерируются вопросы
|
|
{| class="wikitable"
|-
|-
|{ 
! style="color:green;width: 15%" |'''POST/qas/doc/modifyphrases'''
"error": 0, 
! colspan="3" |Массовая замена текста в указанных фразах.
"message": "success" 
}
|}
|-
|-
|/qas/questionmaker/status
| colspan="2" |
|GET
*<small>'''phrases''' - JSON массив с изменяемым фразами следующего вида:</small>
|Проверка состояния генерации - '''started''', '''stopped''', если были ошибки поле ответа '''error''' будет содержать код ошибки
<small>[</small>
| -
 
|{
<small>{</small>
  "error": "",


  "status": "stopped",
<small>'doc_id': 'ad895085-2e48-439a-831e-b5f699b6a54a',</small>


  "progress": 0
<small>'phrase_id': 5,</small>


}
<small>'text': 'новый текст'</small>
|-
 
|/qas/questionmaker/stop
<small>}</small>
|GET
 
|Прервать генерацию.
<small>]</small>
|<small>{"error": 0,"message": "success"}</small>
|
|
|{"error": 0, "message": "success"}
|-
|-
|/qas/search
! colspan="3" style="text-align: center" |'''<big>Группа методов question</big>'''
|GET
|Поиск фрагмента (фрагментов) в документах, предварительно загруженных в БД, указанной категории по заданному вопросу
|
* '''text''' - текст вопроса, на основе которого будут искаться фрагменты.
* '''category''' - категория документа. Если не указать категорию, метод будет искать ближайшие фрагменты во всех документах в базе данных.
|На выходе 2 фрагмента из документа указанной категории. Поиск нужного фрагмента осуществляется с помощью векторизации: выбирается ближайшее предложение по вектору из текста, добавляются по 5 фраз до и после фразы-вопроса — это и является результатом работы метода в формате JSON, его так же можно скачать. В случае ошибки возвращается информация об ошибке.
|-
|-
! colspan="5" |Группа методов qas/channel (channel operations)
! style="color:green;width: 15%" |'''POST/qas/question/add'''
! colspan="2" style="width: 85%" |Добавление вопроса. <small>В случае успеха метод вернет id вопроса, в случае неудачи — код ошибки.</small>
|-
|-
|/qas/channel/add
| colspan="2" style="width: 50%" |
|POST
*<small>'''question'''  — текст вопроса</small>
|Добавление канала
|
* '''name''' - наименование канала
|{
"error": 0,  


"message": "success",  
*<small>'''category''' — id категории к которой относится вопрос</small>


"id": "a46fb887-5d98-41e0-8299-bcc94f615e91" 
*<small>'''answers''' — ответы в виде Json:</small>


}
<small><code>[ { "checked": true, "channel": "0", "answer": "ответ" } ]</code></small>
|-
|/qas/channel/delete/{id}
|DELETE
|Удаление канала
|
* id - идентификатор канала
|{
"error": 0,
"message": "success"
}
|-
|/qas/channel/list
|GET
|Получить список всех каналов
|
|{
  "error": 0,


  "channels": [
*<small>'''aliases''' - вопросы к которым подходят ответы из блока answers в виде json:</small>


    {
<small><code>["вопрос","еще вопрос"]</code></small>
| style="width: 50%" |<small>{</small>
<small>  "error": 0,</small>


      "id": "1",
<small>  "id": "527be9f0-f773-4a3e-bd0b-81b40a061d0d"</small>


      "name": "voice"
<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>


      "id": "56442779-e871-43fd-ae4d-caf4ab6d09b9",
*<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>


      "name": "канал++"
*<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>


      "id": "0",
<small>      "answer": "ответ"    }  ],</small>


      "name": "default"
<small>  "aliases": [</small>


    }
<small>    "вопрос",</small>


  ]
<small>    "синоним вопроса",</small>


}
<small>    "еще синоним вопроса"  ]  }</small>
|-
|-
|/qas/channel/modify/{id}
! style="color:blue;width: 15%" |'''GET/qas/question/list'''
|POST
! colspan="2" style="width: 85%" |Получение списка вопросов.
|Изменить канал. У канала пока есть только наименование, поэтому метод только переименовывает канал
|
* name - новое наименование канала
* id - идентификатор канала
|{
  "error": 0,
 
  "message": "success"
 
}
|-
|-
! colspan="5" |Группа методов qas/category (category operations)
| colspan="2" style="width: 50%" |
|-
*<small>'''question'''  — фильтр вопросов</small>
|/qas/category/add
*<small>'''category''' — фильтр категорий</small>
|POST
|Добавить категорию с указанным именем
|
* '''name''' - наименование категории
|В ответе - id созданной категории или сообщение об ошибке:
{


  "error": 0,
*<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>


  "message": "success",
<small>    {      "id": "77b42c9b-2075-4a5f-b6d9-a284bba7cf43",</small>


  "id": "ad895085-2e48-439a-831e-b5f699b6a54a"
<small>      "question": "вопрос",</small>


}
<small>      "category": "9580b3b7-34cb-4d0e-ba75-d17313ead16d"    },</small>
|-
|/qas/category/delete/{id}
|DELETE
|Удалить категорию
|
* '''id''' - идентификатор категории
|В ответе или сообщение об успехе или ошибке если категория используется или не существует


{
<small>    {      "id": "d1836e5e-010e-4f3a-b306-813c3acb7efb",</small>


  "error": 0,
<small>      "question": "n-й второй вопрос",</small>


  "message": "success"
<small>      "category": "7d8a3415-cb09-4dad-a169-478ba15ade47"    }</small>


}
<small>  ] }</small>
|-
|-
|/qas/category/list
! style="color:green;width: 15%" |'''POST/qas/question/modify/{id}'''
|GET
! colspan="2" style="width: 85%" |Модификация вопроса. Позволяет заменить как все параметры, так и отдельные.
|Получить список категорий
| -
|В ответе json с именами и id категорий
|-
|-
|/qas/category/modify/{id}
| colspan="2" style="width: 50%" |
|POST
*<small>'''data''' — json c измененными параметрами, пример полного:</small>
|Изменить категорию. У категории пока есть только наименование, поэтому метод только переименовывает категорию
 
|
<small><code>{   "answers": [</code></small>
* '''id''' - идентификатор категории
* '''name''' - наименование категории
|{
  "error": 0,


  "message": "success"
<small><code>    {</code></small>


}
<small><code>      "checked": true,</code></small>
|-
! colspan="5" |Группа методов qas/doc (document operations)
|-
|/qas/doc/add
|POST
|Метод используется для добавления нового документа в базу данных. Загружаемый файл должен быть в формате txt, в кодировке Unicode UTF-8
|
* '''title''' - заголовок файла.
* '''category''' - категория документа.
* '''text''' - поле для загрузки файла.
|Успешное выполнение метода возвращает сообщение об успешном добавлении файла и присвоенном ему идентификатору.
Пример ответа:
<code>{"error": 0, "message": "success", "id": "92da6b1968616db4e8d3981c62e0f71f"}</code>
|-
|/qas/doc/delete/{id}
|DELETE
|Метод предназначен для удаления документа из базы по его id
|
* '''id''' - идентификатор документа.
|В случае успеха метод вернет статус выполнения операции (например, “success”), в случае неудачи - код ошибки.
<code>{"error": INT, "message": DESCRIPTION}</code>
|-
|/qas/doc/get/{id}
|GET
|Метод возвращает текст документа из базы данных по его идентификатору
|
* '''id''' - идентификатор документа.
|На выходе полный текст документа, соответствующий указанному идентификатору. При успешном выполнении метода выдается тест документа в формате JSON. В случае отсутствия документа с указанным идентификатором появится сообщение об ошибке:
<code>{ "error": 1, "message": "text not found"}</code>
|-
|/qas/doc/list
|GET
|Метод возвращает список всех доступных документов с их уникальными идентификаторами и категорией
|'''-'''
|Возвращает список объектов, где каждый объект содержит следующие поля:


*'''id''' - идентификатор документа;
<small><code>      "channel": "0",</code></small>
*'''title''' - заголовок файла;
* '''category''' - категория документа.


Пример ответа:
<small><code>      "answer": "новый ответ"</code></small>
[
  {
    "id": "''Идентификатор документа''",
    "title": "''Название документа''",
    "category": "''Категория документа''"
  },
  {
    "id": "''Идентификатор документа''",
    "title": "''Название документа''",
    "category": "''Категория документа''" 
},


......
<small><code>    }</code></small>


<code>]</code>
<small><code>  ],</code></small>
|-
|/qas/doc/modify/{id}
|POST
|Метод для обновления документа
|
* '''data''' - json c изменяемыми параметрами документа{
  title: string,


  category: string,
<small><code>"question":"новый вопрос",</code></small>


  text: string
<small><code>"category": "a3801cc0-f8e5-4f3b-bb10-e42148cd772b",</code></small>


}
<small><code>  "aliases": [</code></small>


параметр который не меняется может отсутствовать в json
<small><code>    "новый вопрос",</code></small>


* '''id''' - идентификатор документа.
<small><code>    "синоним",</code></small>
|В случае успеха метод вернет статус выполнения операции (например, “success”), в случае неудачи - код ошибки.
<code>{"error": INT, "message": DESCRIPTION}</code>
|-
! colspan="5" |Группа методов qas/question (question cache operations)
|-
|/qas/question/add
|POST
|Метод для добавления вопроса
|
* '''question''' - текст вопроса
* '''category''' - id категории к которой относится вопрос
* '''answers''' - ответы в виде Json:


<code>[ { "checked": true, "channel": "0", "answer": "ответ" } ]</code>
<small><code>    "еще синоним"</code></small>


* '''aliases''' - вопросы к которым подходят ответы из блока answers в виде json:
<small><code>  ]</code></small>


<code>["вопрос","еще вопрос"]</code>
<small><code>}</code></small>
|В случае успеха метод вернет id вопроса, в случае неудачи - код ошибки.
{


  "error": 0,
*<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>


  "id": "527be9f0-f773-4a3e-bd0b-81b40a061d0d"
*<small>'''replace''' - текст замены</small>


}
*<small>'''category''' - в какой категории искать</small>
| style="width: 50%" |<small>{"error": INT, "message": DESCRIPTION,"replacements":INT}</small>
|
|-
|-
|/qas/question/delete/{id}
! style="color:green;width: 15%" |'''POST/qas/question/modifyanswers'''
|DELETE
! colspan="3" |Массовая замена текста в указанных ответах.
|Метод для удаления вопроса
|'''id''' - идентификатор вопроса
|В случае успеха метод вернет статус выполнения операции (например, “success”), в случае неудачи - код ошибки.
<code>{"error": INT, "message": DESCRIPTION}</code>
|-
|-
|/qas/question/get/{id}
| colspan="2" |
|GET
*<small>'''answers''' - JSON массив с изменяемым ответами следующего вида:</small>
|Метод для получения вопроса вместе с ответами и синонимами вопроса
<small>[</small>
|'''id''' - идентификатор вопроса
|{
  "error": 0,


  "answers": [
<small>{</small>


    {
<small>'question_id': 'ad895085-2e48-439a-831e-b5f699b6a54a',</small>


      "checked": true,
<small>'answer_id': 5,</small>


      "channel": "0",
<small>'text': 'новый текст'</small>


      "answer": "ответ"
<small>}</small>


    }
<small>]</small>
|<small>{"error": 0,"message": "success"}</small>
|
|-
! colspan="3" style="text-align: center" |'''<big>Группа методов summarization_template</big>'''
|-
! style="color:green;width: 15%" |'''POST/qas/summarization_template/add'''
! colspan="2" style="width: 85%" |<small>Добавление шаблона протокола. В случае успеха метод вернет id шаблона, в случае неудачи — код ошибки.</small>
|-
| 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>


  "aliases": [
*<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" |Получение шаблона.
|-
|-
|/qas/question/list
| colspan="2" |
|GET
*<small>'''id''' — идентификатор вопроса</small>
|Метод для получения списка вопросов.
|<small>{</small><small>  "error": 0,</small>
| -
|{
  "error": 0,


  "questions": [
<small>  "prompt": {</small>


    {
<small>    "id": "cleandoc",</small>


      "id": "77b42c9b-2075-4a5f-b6d9-a284bba7cf43",
<small>    "type": "cleandoc",</small>


      "question": "вопрос",
<small>    "isDefault": false,</small>


      "category": "9580b3b7-34cb-4d0e-ba75-d17313ead16d"
<small>    "name": "Чистка документа",</small>


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


    {
<small>    "postprompt": "",</small>


      "id": "d1836e5e-010e-4f3a-b306-813c3acb7efb",
<small>    "_modified": 1751475766.7460272,</small>


      "question": "n-й второй вопрос",
<small>    "_created": 1751475766.7460272,</small>


      "category": "7d8a3415-cb09-4dad-a169-478ba15ade47"
<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" |Получение списка шаблонов.
|-
|-
|/qas/question/modify/{id}
| colspan="2" |
|POST
|<small>{</small><small>  "error": 0,</small>
|Метод для модификации вопроса. Позволяет заменить как все параметры так и отдельные
|
* <small>'''data''' - json c измененными параметрами, пример <code>полного:</code></small>
<code><small>{</small></code>
<code><small>  "answers": [</small></code>


<code><small>    {</small></code>
<small>  "prompts": [</small>


<code><small>      "checked": true,</small></code>
<small>    {</small>


<code><small>      "channel": "0",</small></code>
<small>      "id": "chat",</small>


<code><small>      "answer": "новый ответ"</small></code>
<small>      "type": "chat",</small>


<code><small>    }</small></code>
<small>      "isDefault": false,</small>


<code><small>  ],</small></code>
<small>      "name": "Чат",</small>


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


<code><small>"category": "a3801cc0-f8e5-4f3b-bb10-e42148cd772b",</small></code>
<small>      "postprompt": "",</small>


<code><small>  "aliases": [</small></code>
<small>      "_modified": 1751475766.7460272,</small>


<code><small>    "новый вопрос",</small></code>
<small>      "_created": 1751475766.7460272,</small>


<code><small>    "синоним",</small></code>
<small>      "_modified_date": "2025-07-02",</small>


<code><small>    "еще синоним"</small></code>
<small>      "_created_date": "2025-07-02"</small>


<code><small>  ]</small></code>
<small>    }</small>


<code><small>}</small></code>
<small>  ]</small>


* <small>'''id''' - идентификатор вопроса</small>
<small>}</small>
|
|-
{| class="wikitable"
! style="color:green;width: 15%" |'''POST/qas/prompt/modify/{id}'''
! colspan="2" |Модификация шаблона. Позволяет заменить как все параметры, так и отдельные.
|-
|-
|В случае успеха метод вернет статус выполнения операции (например, “success”), в случае неудачи - код ошибки.
| colspan="2" |
<code>{"error": INT, "message": DESCRIPTION}</code>
*<small>'''data''' — json c измененными параметрами:</small>
|}
 
<small><code>{ "name": "новое имя" }</code></small>
 
*<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}