Git Product home page Git Product logo

voice_assistant_midpy's Introduction

Проектная работа: голосовой ассистент

Описаение проекта

Решение позволяет преобразовать запрос на естественном языке от пользователя в синтаксис для работы с ElasticSearch.

Для обработки естественного языка мы решили отойти от классической схемы векторизации или словарей и использовать LLM.

Так как LLM слишком долго отвечает на запрос пользователя, а окно ожижания доступной по ТЗ 2 секунды, то мы решили ускорить решение с помощью микрозапросов для YandexGPT. Вместо одного большого запроса мы передаём множество маленьких.

Схема проекта

Порядок развёртования проекта

  1. Разместите пустой файл logs.log в директории 'logs'.
  2. Скопируйте содержимое файла .env.example в файл .env.
  3. Заполните сертификаты в папке .certs ( https://disk.yandex.ru/d/xy-vpk18OrDatw )
  4. Сгенерируйте dpem ключи в папке .certs командой:
openssl dhparam -out ssl-dhparams.pem 2048
  1. Чтобы добавить пользователя для кибана используем команду:
htpasswd -c ./nginx/passwords/passwords user1

чтобы добавить больше пользователей используем команду без -c:

htpasswd ./nginx/passwords/passwords user2
  1. Настройте отображение логов в Kibana:

http://localhost:5601/app/management/kibana/dataViews

или

http://practix-cinema.ru:5601/app/management/kibana/dataViews

Проект в интернете

https://practix-cinema.ru/api/openapi

voice_assistant_midpy's People

Contributors

artwist-polyakov avatar samtonck avatar damaged0ne avatar sench8 avatar

Watchers

Ilya Silchenkov avatar  avatar

voice_assistant_midpy's Issues

ТЗ для заказчика — документ, описывающий, что именно будет сделано для реализации его идеи на практике.

Итак, практическое задание этого модуля: самостоятельно подготовьте ТЗ для заказчика — документ, описывающий, что именно будет сделано для реализации его идеи на практике.

Документ должен описывать технический скоуп работ:

  • Проработаны ограничения спроектированной архитектуры, проверен запас прочности как по нагрузке, так и по гибкости внесения изменений. При аргументации выбранного решения должны быть понятны и учтены долгосрочные последствия технических решений.
  • Зафиксированы функциональные и нефункциональные требования к решению. При выработке SLO команда самостоятельно принимает решения о балансе: идеальная архитектура, текущая архитектура или сделать на коленке в зависимости от сроков и важности проекта.
  • Проект должен быть декомпозирован по продуктовым фичам, а декомпозиция провалидирована лидом.
  • Понятна очерёдность выпуска фич, определена и зафиксирована дата релиза всего проекта.
  • Техническое задание нужно согласовать с заказчиком. Постарайтесь найти решение win/win, устраивающее как разработку, так и бизнес.

Code review

Добрый день!

Отличный у вас диплом получился!!! Видно, что был проделан большой объем работы. У меня немного замечаний.

  1. В docker-compose.yml много лишних портов выставлено наружу, достаточно только nginx. Для безопасности приложения это плохо.
  2. Не совсем понял зачем на каждый handler создавать отдельную папку, воркер, контейнер. У них много общего кода и кажется это все можно в один контейнер (воркер) занести. Это вполне себе будет хорошо и быстро работать на asyncio. Давайте перепишем на один.
  3. В логгировании не стоит использовать f-string,.format() , а делать через printf-style примерно так - logging.info("message %s", param)
    printf-style строка не форматируется до самого последнего момента. То есть если использовать f-string, то все вычисления по формированию строки происходят сразу, а если использовать %s и параметры, то только непосредственно перед выводом данных. А если например level handler будет в конфиге поставлен в critical, то этот лог никуда не отправится, а значит опять же строка форматироваться не будет.
    https://okomestudio.net/biboroku/2020/04/on-lazy-logging-evaluation/
  4. Тут создание новой сессии на каждый запрос может быть неэффективным, особенно если функция вызывается многократно в рамках одной задачи. Лучше создать сессию во внешнем контексте и передавать её в функцию как параметр, чтобы повторно использовать для множества запросов.

Настроить быстрые ответы в Алисе для некоторых сценариев.

В ручке alice предусмотреть варианты ответов, которые позволяют:

  • согласиться на просмотр выбранного фильма (в ответ просто желаем приятного просмотра)
  • в случае ошибки сервера извиниться, сказать что что-то пошло не так и преджложить отправить запрос в поддержку.

Модели ответа сервера

Сейчас у нас ответ npl_api — это просто дикт

Надо сделать чтобы в свагере было понятно какой ответ может быть в каком случае

Испроавить ELK

  • логи должны писаться
  • доступ в кибану должен быть с паролем
  • в кибане не должно быть индекса фильмов

Проверить работоспособность сентри (сделать заготовку приложения)

  1. Добавь helloworld ручку апи на фастапи (нам энтрипоинт будет не нужен, будем делать деградацию на ошибках)
  2. Подключи к ней setry (укажи пока старый ключ, я новый потом дам — я всё никак не приеду в уверенный интернет, чтобы работал впн без блокировок)
  3. Проинциализируй логи
  4. Убедись, что логи пишутся в ELK
  5. Напиши в ридми интро:

ELK
Доступна по адресу ....
Конфигурация логов: ....

Протестируй sentry сделав 1/0 операуцию внутри стека ручки апи (п1)
Это где-то на час еще.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.