Skip to content

Latest commit

 

History

History
70 lines (48 loc) · 7.23 KB

README.md

File metadata and controls

70 lines (48 loc) · 7.23 KB

Это репозиторий с базовой реализацией навыка для Алисы в рамках конкурса Яндекса на PyCon Russia 2018 22-23 июля.

Чтобы участвовать в конкурсе, нужно реализовать алгоритм игры в морской бой и задеплоить навык на хостинге Now. Подробнее написано в твоём тикете в Яндекс.Трекере.

Просто форкни этот репозиторий и допиши в него нужный код.

Следи за обновлениями в этом репозитории. Пока идет конкурс, мы может быть будем что-то править, и это будет тебе полезно.

Ознакомься с общей документацией для разработчиков навыков.

Что в этом репозитории

Этот код – это полноценная реализация навыка для Алисы. Мы взяли за основу хорошую библиотеку rasa_nlu. Для неё мы подобрали data set, на основе которого собирается модель для распознования ходов соперника. Мы также сделали небольшое Flask приложение, которое разбирает HTTP протокол запросов от Яндекс.Диалогов, и Telegram бота для отладки.

В seabattle/:

  • api.py – Flask приложение с webhook'ом для Яндекс.Диалогов
  • bot.py – Telegram бот для тестирования навыка
  • dialog_manager.py – диалоговый менеджер на базе rasa_nlu
  • game.py – реализация логики игры в морской бой

Мы очень не рекомендуем существенно что-то менять за пределами оговоренных ниже методов класса Game в seabattle/game.py.

Мы проработали и отладили все нужные реплики, которые говорит и обрабатывает навык для игры. Если их поменять, то может не получится игра на турнире.

Наш морской бой

  • Игровое поле 10 на 10 клеток.
  • Стандарные 10 кораблей:
    • 1 четырёхпалубный
    • 2 трёхпалубных
    • 3 двухпалубных
    • 4 однопалубных
  • Координаты используются только числовые. Из-за особенностей ASR так получается надежнее и проще. Буквенные координаты тоже реализованы, но их использование очень ненадежно.
  • Корабли нельзя расставлять вплотную друг к другу.

Прочти более подробно про игру на Wikipedia.

Быстрый старт

Для работы с этим репозиторием тебе нужно только иметь Docker и docker-compose. Ну и уметь пользоваться ими хотя бы чуть-чуть.

Задача

Тебе нужно реализовать по сути один метод в модуле seabattle/game.py который называет Game.do_shot.

Опционально можешь попробовать сгенерировать игровое поле более хитро, для этого тебе нужно написать другую реализацию для метода Game.generate_field.

Тренировка модели

Для того чтобы навык работал, нужно натренировать nlu молдель rasa. Это делается вызовом команды docker-compose run train

Тестирование

Чтобы протестировать твой навык нужно сделать несколько шагов:

  • Прогнать тесты, запустив docker-compose run train, а затем docker-compose run tests. Ты можешь написать дополнительные тесты именно своего алгоритма. И лучше так сделать. Если тесты проходят, то это хороший знак – скорее всего ты ничего не поломал, и твоя реализация вполне может играть на турнире.
  • Поднять Telegram бота. Для этого нужно зарегистривать бота и получить его токен. Потом положить токен в переменную окружения TELEGRAM_TOKEN и запустить docker-compose run bot. После этого с твоим ботом в Telegram можно поиграть в твою реализацию морского боя. Проверь, что твой алгоритм игры работает правильно.
  • Задеплоить навык на хостинге Now (см. ниже) и зарегистрировать его в Яндекс.Диалогах. Не нужно отправлять навык на модерацию. Просто в режиме тестирования ещё раз попробуй поиграть со своей реализацией.

Если ты прошел эти три пункта и всё хорошо, то можешь присылать ссылки на код и на задеплоенный навык в свой тикет, а потом закрыть его.

Деплой

Для простоты и удобства навык нужно задеплоить на хостинг Now. После деплоя лучше всего присвоить какой-нибудь алиас домену, и использовать его дальше при обновлениях.

Лучше всего сделать файлик now.json и в нем написать имя приложения и его алиас, тогда для деплоя будет достаточно позвать команду now && now alias.

Примерная последовательность действий:

  1. docker-compose build app
  2. docker-compose run train
  3. docker-compose run tests
  4. now && now alias

Поддержка

Если что-то непонятно, то задавай нам вопросы в Slack

Logo