Giter VIP home page Giter VIP logo

alice-skill's Introduction

Это репозиторий с базовой реализацией навыка для Алисы в рамках конкурса Яндекса на 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

alice-skill's People

Contributors

akelad avatar daevaorn avatar frizzlywitch avatar uruz avatar v-sopov avatar

Watchers

 avatar

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.