# OpenSpaceHack_Artem_priglasil
## Клонирование репозитория
```
git clone https://github.com/artyom-yurin/OpenSpaceHack_Artem_priglasil.git
cd OpenSpaceHack_Artem_priglasil
```
## Скачивание ИИ-модели
*Так как модель весит ~700MB, внутри репозитория ее нет*
1. Запустите готовый sh скрипт, чтобы скачать модель:
```
chmod u+x download_model.sh
sh download_model.sh
```
2. **Или** скачайте файл вручную отсюда:
http://files.deeppavlov.ai/deeppavlov_data/bert/rubert_cased_L-12_H-768_A-12_v1.tar.gz,
Затем распакуйте tar.gz архив и поместите содержимое в директорию `/data`.
В конечном итоге должна получиться структура
`OpenSpaceHack_Artem_priglasil/data/rubert_cased_L-12_H-768_A-12_v1/*`
## Запуск проекта
```
docker-compose up
```
Ожидайте, пока поднимутся все контейнеры (при запуске так же заполняется БД с базой знаний и векторным представлением вопросов, поэтому время запуска может быть относительно большим), маркером успешного старта и инициализации проекта является строчка "*Indexing DONE*" в самом конце:

## Пример запроса в API
```
curl -X GET 127.0.0.1:8080/api/chat/v1/bot?question=""
```
## Пример ответа
* Готовый ответ
```json=
{
"answer": "1. Перейдите на вкладку «Инвестиции».\n2. В блоке «Брокерский счет» нажмите «Открыть счет». Если необходиме выберите дополнительные услугу торговые идеи от аналитиков или откройте индивидуальный инвестиционный счет (ИИС)\n3. Чтобы подробнее узнать о торговых идеях, нажмите «О торговых идеях», об индивидуальном инвестиционном счете, нажмите «Подробнее об ИИС», о тарифах брокерского счета — нажмите «Подробнее о тарифах»\n4. Дальше нужно заполнить заявку — она состоит из 5 шагов. На первом шаге введите свою электронную почту. На нее после оформления заявки отправим документы. Нажмите «Далее»\n5. Ознакомьтесь с документами и нажмите «Далее»\n6. Проверьте свои данные — ФИО, телефон, адрес регистрации и серию и номер паспорта, а также укажите страну рождения. Ознакомьтесь с заключением об электронной подписи и нажмите «Подтверждаю». Если данные изменились — их можно изменить только в отделении банка.\n7. Подтвердите, что вы: \n — налоговый резидент только РФ\n — не гражданин и не налоговый резидент США и не родился на территории США\n — не иностранное или российское должностное лицо, не должностное лицо публичной международной организации, а также не его супруг или близкий родственник\n — не собираетесь совершать операции в интересах другого человека, а принимаемые вами решения не будут контролироваться/подвергаться влиянию со стороны иных лиц (бенефициарных владельцев)\n \n Если все верно, нажмите «Подтверждаю» и подождите пару минут, пока мы подготовим ваши документы\n8. Ознакомьтесь с документами:\n заявлением о присоединении, заявлением об обслуживании и анкетой. Нажмите «Подписать»\n9. Введите SMS-код для подписи документов\n10. Готово. Вы получите SMS, когда брокерский счет будет открыт. После этого можно зарегистрироваться в приложении «Открытие Брокер». Доступ для совершения операций появится в течение 24 часов\n"
}
```
* Уточняющий вопрос
```json=
{
"answer": "Уточняющий запрос: Уточните категорию: {Накопительные счета}, {Платежи и переводы}, {Брокерский счет}, {Кредитные карты}, {Металлические счета}"
}
```
**ПРИМЕЧАНИЕ:** Если уточнение запроса идет через API, то нужно вводить те же данные что и в {}, так как на стороне фронта они задумываются как кнопки.
*Например: ответ приходит в следующем формате **{Вклады}**, то корректным следующим запросом на эндпоинт будет **Вклады***.
* Нет ответа
```json=
{
"answer": "unknown"
}
```
## Краткое описание работы программы
Поиск по базе знаний идет так же как и поиск запросов в поисковике (Google, Яндекс и т.п.)
1. Языковая модель RuBERT индексирует базу знаний при запуске сервиса
2. Поисковой запрос пользователя так же переводится к векторному представлению при помощи той же модели (помогает избежать возможные орфографические ошибки, а так же понимать семантику запроса независимо от используемых синонимов)
3. Система удовлетворяет следующим Quality Attributes - Reliability, Scalability (вертикальная и горизонтальная).
4. Языковая модель может быть слегкостью заменена (для этого нужно будет изменить файлы в директории `OpenSpaceHack_Artem_priglasil/data/rubert_cased_L-12_H-768_A-12_v1/` на данные типа tf_models (сохраненная модель Tensorflow)) или же наоборот дополнена моделью обученной для специфического задания (например классификация, ведение диалога, нахождения конкретной строчки ответа по данному запросу и т.д.)