Comments 106
Похоже, будущее наступило. Теперь и правда можно собрать себе собеседника за 10 минут из нескольких строк кода и пары готовых библиотек. Welcome to future! ;)
Сейчас еще алгоритмы не но столько совершенные, что бы понять, что общаешся с ботом, но в скором времени с помощью технологий машинного обучения будет практически неотличимо.
Придется придумывать серию тестовых вопросов, чтобы понять, что общаешься с ботом.
Пешу сащипкаме штопы онн неперевеел анлаинперевотчикам.
:)
P.S. Была такая ситуация в чате одной игры. Русские и один иностранец, переводил переводчиком.
проста пока исчо маво кто научил ботаф панимать такую речь :)
p.s. то же может быть и в случае Kaki}{ t0 takux fra3, хотя думаю что многое из этого вполне достижимо

Да без фонетического воспроизведения бот не будет понимать такой текст (если только не запомнит в тупую благодаря ручному обучению).

Тест Тьюринга придуман уже довольно давно и описан даже в Википедии.
Некоторые боты уже прошли его, только если пообщаться с ними, никаких иллюзий ИИ нет.
Читая диалоги на некоторых форумах иногда возникает чувство что собеседники этот тест не пройдут. :)
Подъезжая к сией станцыи и глядя на природу в окно, у меня слетела шляпа.
Того и гляди — эта шляпа ещё и, собственно, тест Тьюринга прошла бы.
В этом направлении копают, но результаты пока так себе. Например, есть датасет The Stanford Question Answering Dataset на котором обучают модели для разбора естественных языков. Вот эта allenai.github.io/bi-att-flow/demo может отвечать на простые вопросы вроде:

Paragraph: There's a room with white walls, red sofa and two green parrots sitting on the top of it.

Q: What's the color of walls?
A: white

Q: What's the color of sofa?
A: red

Q: What's the color of two parrots?
A: green

Q: How many parrots there are in the room?
A: two

Хотя модель на самом деле «не понимает» о чём речь:

Q: What's the color of parrots?
A: red

Q: How many walls there are in the room?
A: white

но, объединив это с банком знаний вроде start.csail.mit.edu, можно получить что-то более умное.

Сколько надо будет учить такого бота, чтобы он выполнил просьбу "эй, сгоняй за пивом!"

Думаю, что сейчас самое время учить их таким командам. А то когда поумнеют, то поймут, что за такое можно просить деньги)
UFO landed and left these words here
Здравствуйте! Буду очень благодарен если кто-нибудь поможет. Проблема в следующем: библиотеку для телеграма я установил, однако питон все равно говорит что нет такого модуля. Должен отметить: у меня стоит несколько версий питона. В одной из них запускается совсем другая программа, а в двух остальных ругается на отсутствие модуля. Библиотеки ставил для всех версий.
Насчёт «снести всё кроме одной» не знаю (вы точно устанавливали все пакеты, находясь в папке со скриптом?).
Просто отписал в сообщения один юзер, у которого python-telegram-bot не работал из-за конфликта с urllib3.
Возможно глупый вопрос, но про какую папку со скриптом вы говорите? Я ставил пакеты находясь вот в этой папке: «C:\Users\tutam\AppData\Local\Programs\Python\Python36»
Оказалось проблема была в файле test.py, который лежал в той же папке и запускался вместо bot.py :) Спасибо за статью и помощь!
Не показывайте Мегафону и Ростелекому. До них и так не дозвонишься, а если они еще и такого робота прикрутят…
Можно подумать, что это какая-то уникальная идея сделать такого бота. Пфф…

Вот вам лайфхак: большинство автоответчиков можно заткнуть нажатием кнопки 0, для перевода на оператора. А тот уже пусть сам связывает с нужным отделом.

Вот и вам лайфхак — попробуйте с теми, что я назвал. "Я вам не поняла, произнесите тему вашего звонка!"
И хорошо бы по таймауту переводили на оператора, а то ведь порой и трубку робот бросает, если ниасилил распознать.

а то ведь порой и трубку робот бросает, если ниасилил распознать.

… — дэвушка, а можна мнэ кого то поэумнээ??
— пи-пи-пи-пи-пи-пи…
«Увы, нэт!»
На самом деле становится еще дурнее, когда нужно что-то точно узнать, скажем, тонкости биллинга. Я стараюсь прорываться к живому человеку, а там еще порой приходится исхитряться и просить первую линию поддержку переключить на знающего человека. Правда, вот это как раз не прокатывает, все экономят, так что, в лучшем случае, можно только тикет попросить составить.
большинство автоответчиков можно заткнуть нажатием кнопки 0

… и после 40 минут прослушивания музыки таки разбить телефон об стену.

На самом деле лайфхак один: постараться найти альтернативные номера ТП, даже по 8-800 с городского трубку берут чуть ли не моментально, а по нативному можно высадить аккумулятор, пока дождёшься.
Элементарно же. По нативному звонит уже существующий клиент, который будет задавать дурацкие вопросы-«Куда делись деньги, почему у меня изменились условия тарифа, что за рекламу вы мне пихаете в браузер, почему такое хреновое покрытие?» и прочие подобные. А с городского/мобильного другого оператора звонит потенциальный клиент. Кого поставят в начало очереди?
Да это понятно, плюс ещё неизвестно, вдруг сам П... кто на линии.
Удивительно, насколько просто теперь можно сделать чат-бота в домашних условиях без смс регистрации.
Я не думаю, что кто-то будет писать абсолютно с нуля такие вещи, т.к. на такое уйдут месяца, а возможно и годы разработки.
Целью статьи было показать, что на сегодняшний день создать самому чат-бота (с притягиванием машинного обучения) можно легко и просто (конечно же, не без использования сторонних библиотек). Я думаю, что статья с положенной задачей более чем справилась, ибо что хотели — то и получили.
ну, вообще то в 30 строк кода можно собрать только готовое… так что просто давай вместе ещё раз поглядим тему поста? Оппа? Ничего не изменилось? Вроде нет… Обучаемый бот в 30 строк…
Окей, а что же мы получили в итоге? Случаем, не обучаемого чат-бота в 30 строк кода на питоне?
В теме не написано «Пишем обучаемый ИИ с нуля на питоне в 30 строк кода».
Ждём статью «как сделать поисковик в 30 строк кода» и «как сделать соцсеть в 30 строк кода».
а внутри будет написано «подключаем модуль поисковика/соцсети»
Спасибо за статью. Прикрутил к своему попугаю в стиле джаббероботов. Правда он у меня на .net core.
А бот будет самообучаться на основе полученных сообщений? Или только вручную учить? Так не интересно, если только вручную, какой же это ИИ.
Самообучение на нём заложено уже в механизмах его работы, но материал для обучения всё-равно нужно давать. Это же как ребёнок в школе — он не поймёт ошибку, пока ему не покажет её учитель.
Самообучение на нём заложено


ЕМНИП, в обучение без учителя (хотя тут скорее semi-superwised learning) dialogflow не может же.

Как максимум — в сбор материала для разметки.

Или я что-то упустил?

Супер! Спасибо за статью о Питоне.
P.S> для слова "dispatcher" есть замечательный перевод на русский: ДИСПЕТЧЕР

Спасибо, не заметил, просто привык всё транскриптом переводить)
У меня глупый вопрос: как запустить бота?
1) Регистрируем нового бота, получаем токен
2) при обращению к api получаю ответ: {«ok»:false,«error_code»:404,«description»:«Not Found»}
Вопрос: для работы с api нужен ssl сертификат на машине? можно самоподписанный? На какое имя он (сертификат) должен быть выдан?
1. Всё правильно
2. У Вас, скорее всего, неправильно подключен токен api. Проверьте всё ещё раз.
через @BotFather придумываешь имя и он тебе выдает токен + ссылку. Больше ничего и не делал
Токен API ещё должен быть также от ИИ. Читайте внимательнее статью. Client access token
1) пробовал по ссылке после регистрации
2) через curl -F«url=https://my_ip:443/my+token/» -F«certificate=@public.pem» api.telegram.org/my_token/setWebhook после установки ssl
3) из python
ощущение, что я что-то не установил для обращения к нему
А вам обязательно работать через вебхуки?
Через long polling, как в статье, тот же пакет python-telegram-bot у меня взлетел сразу
updater.start_polling()
для работы ssl не надо делать? можно на своем обычном компе и PyCHarm пробовать?
Статья в стиле как собрать автомобиль вкрутив один болт.

Покупаем автомобиль без одного болта, болт и ключ. Вкручиваем болт. Поздравляем, вы собрали свой автомобиль.
Я вам больше скажу, там на страничке есть уже готовые интеграции с меседжерами и телеграм подключается вообще без программирования, только тоокен вбить.
Интересная статья, а чем нативный механизм интеграции dialogflow и телеграмм Вас не устроил?
С Integrations будет работать через Webhook и Вы не сможете никак «настроить бота под себя». В таком случае Вы будете полностью зависеть от возможностей Dialogflow, теряя очень большой потенциал для реализации чего-то «авторского».
здрасте) бот удалось запустить, отправляет приветствие, а на ответ не реагирует)
вопрос такой:

  1. в request.session_id пишем имя своего бота?
  2. и в начале дана Обёртка Dialogflow для Python — для чего это нужно?
  3. для pycharm установил apiai, а json не нашел, нужно ли его устанавливать и где найти?
  4. нужно ли подключать Телеграм через Inegration в DialogFlow?
  5. обязательно ли нужно заполнять разделы в Small Talk Customization Progress? Или должно работать и так?

спасибо
1. По документации, вообще, нужно придумывать рандомный токен длиной в 36 символов. Новый токен — новый диалог. Но по скольку я захотел, чтобы диалог был один и можно было легко понять, где на dialogflow общался бот, а где разработчик писал отладку. Поэтому я просто вставил имя бота.
2. Чтобы легче работать с их API. Т.к. в прошлом Dialogflow назывался ApiAI, но когда его купил гугл, то переименовали в Dialogflow, а вот пакеты которые остались на гитхабе — остались со своими старыми названиями.
3. Json устанавливать не нужно, он входит в библиотеку стандартных модулей питона.
4. Не нужно.
5. Это уже по желанию, если вы хотите придать боту «изюминку».
вроде, все перепроверил, интеграцию отключил, код скопировал, токены поменял, а ответа от бота нет(

в чем может быть причина?
Пересоздайте телеграмм бота и dialogflow агента, спуститесь к концу статьи и скопируйте полный код, заменив токены на свои.
UFO landed and left these words here
С Integrations будет работать через Webhook и Вы не сможете никак «настроить бота под себя». В таком случае Вы будете полностью зависеть от возможностей Dialogflow, теряя очень большой потенциал для реализации чего-то «авторского».
Я правильно понимаю, что бот не обучается сам, а может лишь отвечать на знакомые ему вопросы?
Я правильно понимаю, что бот не обучается сам, а может лишь отвечать на знакомые ему вопросы?


Если речь о том, нужно ли вручную составлять правило, определяющее в какой intent отправить пользователя — нет, классификатор intent-в тут обучается автоматически.

Если о том, нужно ли вручную разбивать обучающую выборку на отдельные intent-ы — да, кластеризовать (например) готовые диалоги автоматически оно не может.
UFO landed and left these words here
Если кто-то захочет потренироваться на примере используя Python 2.7, то при отправке запроса можно получить ошибку вида:
UnicodeDecodeError: ‘utf8’ codec can’t decode byte 0xe7 in position 7: invalid continuation byte
Это связано с форматом часового пояса (в Windows), который отсылается в запросе на сервер Dialogflow
(у меня был "RTZ 2 (зима)")

После явного указания часового пояса все становится ОК:
request.time_zone = "GMT+3"

Используя Python 3.6 такой ошибки нет
Возможно, вопрос глупый. Но что есть «обучение» в контексте этого топика?
«ИИ» выбирает ответы из базы вопросов/ответов, если в базе вопроса нет, то «ИИ» ищет что-то похожее с похожими словами и даёт ответ. Этот ответ Вы потом отмечаете как «правильный/неправильный». И к вопросам, которые непонятны «ИИ», Вы можете задать ответы. Верно? Так оно работает?
Возможно, вопрос глупый. Но что есть «обучение» в контексте этого топика?

Настройка классификатора, определяющего, к какому intent-у отнести вопрос, похоже.

выбирает ответы из базы вопросов/ответов, если в базе вопроса нет, то «ИИ» ищет что-то похожее с похожими словами и даёт ответ

Скорее выделяем признаки из вопроса — потом определяем классификатором, какому классу соответсвуют такие их значения. Ну, если там внутри не kNN :-)
Подключил бота в телеграм по этому мануалу t.me/artemiyrobot
Туповат как пробка, пришлось добавить свои костыли для поддержания беседы
Здравствуйте!
Новичок в этой теме.Вчера узнал, решил попробовать.Но в коне модули не распознаются.
У меня kaili linux.
Сразу прописал git clone и ссылку на telegram bot, тоже самое сделал с dialogflowers.
Потом вбил pip install python-telegram-bot --upgrade, pip install apiai.
Скопировал конечный код. Засунул в файл bot.py. Изменил токены.Пробую запустить
python Desktop/bot/bot.py — ошибка SyntaxError: Non-ASCII character '\xd0' in file Desktop/bot/bot.py on line 1, but no encoding declared; see python.org/dev/peps/pep-0263 for details
Python3 Desktop/bot/bot.py — ошибка Traceback (most recent call last):
File «Desktop/bot/bot.py», line 2, in from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
ModuleNotFoundError: No module named 'telegram'
Что я сделал не так или надо еще сделать?
Здравствуйте.
1. Ошибка — ошибка кодировки, как её решить написано тут
2. Ошибка зависимости. Нужно устанавливать не через git clone, а через pip. Попробуйте ещё раз всё переустановить.
Изначально я делал git clone и pip.
Пробовал еще раз через pip тоже самое — оишибка
Попробуйте использовать команду pip3 вместо pip. Кстати, во втором питоне бот может не отвечать на сообщения (первый пример), потому что type('Получил ваше сообщение') возвращает str. А type(update.message.text) возвращает unicode, поэтому сложение строк не срабатывает. Можно пофиксить через
response = 'Получил Ваше сообщение: ' + str(update.message.text)
Команды pip3 нету.И куда это response = 'Получил Ваше сообщение: ' + str(update.message.text) надо всовывать в итоговой версии
Добрый вечер. В Вашем примере мы подключаем через токен только одного агента Small Talk. А если я в DialogFlow добавил несколько агентов: погода, CRM и т.д., и у каждого токен, как мне подключить несколько агентов к ApiAI?
Тут никак
Один запрос к API — 1 агент
Можно попробовать перенести функционал отдельных агентов к главному, читайте доки Dialogflow.
Это можно сделать с помощью экспорта/импорта добавленых агентов.
Добавляем предустановленного агента, задем экспортируем его.
Выбираем основного агента с тем токеном с которым работаем и импортируем к нему который хотим добавить.
С телеграмом не работал, подскажите, пожалуйста, кратко, о возможностях.
Вопрос, возможно, не совсем по теме, но буду признателен за ответ. Хочу, кроме сообщений, чтоб бот какие-то действия поддерживал (например, «перегрузи сервак, бот!»). Есть ли возможность для бота различать пользователей, что ему пишут? Например, по id телеграм. Вопрос второй: известно ли, что будет если запустить второй инстанс бота? Отказ от телеграм на авторизацию для второго инстанса или какие-то блокировки и т. д.?
Вопрос третий: можно ли кроме текста отдавать какие-то кнопки для пользователя, например: «не совсем понял запрос: хотите А(кнопка_а) или Б(кнопка_б)?».
1. Всё зависит от возможностей Python'а, поэтому да, можно. Различать юзеров по айди можно (читайте документацию пакета бота).
2. Никаких отказов быть не должно, хотя и не проверял.
3. Можно. Опять же таки, читайте доки по телеграмм боту.
В2 — сомнительно, что с одним api key это возможно. И непонятно, зачем.
В3 — лучше читать не документацию, там этого не разжевано, а примеры из examples в репозитории пакета на github — есть примеры с кнопками.
После второго шага бот не пишет что получил мое сообщение, хотя до этого поприветствовал меня. Не подскажете, что может быть?
Сперва сам все написал, потом копировал код, все равно, одно и то же, здаровается, но потом молчит))
Код рабочий. Скорее всего, что Вы его используете неправильно. Я проверял каждую строку кода перед постом.
Попробуйте скопировать конечный код, вставив только везде свои токены.
А для чего это всё если на сайте dialogflow можно подключить телеграм-бота напрямую указав его токен?
Этот вопрос уже задавался много раз. В таком случае Вы будете полностью зависеть от возможностей Dialogflow, теряя очень большой потенциал для реализации чего-то «авторского».
Да, извините, почему-то не подгрузились все комментарии. Кстати, я вот скрипт запускаю на компе, и теперь чат-бот работает только когда запущен скрипт. Выключишь комп – и молчание в эфире :)
Ну ясное дело. Скрипт нужно устанавливать на выделенный сервер, который 24/7 работать будет.
ох, там еще и дедик нужен. окей, а как сделать так чтоб он опять работал без скрипта, как раньше?
Если необходим вывод текста с переносами строки, заменить:
response = responseJson['result']['fulfillment']['speech'] # Разбираем JSON и вытаскиваем ответ

на
response = responseJson['result']['fulfillment']['messages'][0]['speech']

А в dialogflow новую строку заводить через Shift+Enter, то текст в чат будет падать не одной строкой а разбитым по строкам.

Я например учу бота отдавать мне всякие ссылки или сниппеты кода — очень полезно получается.
Скажите пожалуйста, а как добавить бота в чат? Вернее добавить так, чтобы при обращении из чата к боту username привет, как дела? Он отвечал. Почем-то бот не работает, если добавить его в существующий чат телеграмм.
Скажите пожалуйста, а как добавить бота в чат? Вернее добавить так, чтобы при обращении из чата к боту username привет, как дела? Он отвечал. Почем-то бот не работает, если добавить его в существующий чат телеграмм.

Старая тема, дату видел, но т.к. ответа нет, решил ответить.
Чтобы бот видел сообщения в группах, через BotFather нужно дать команду /setprivacy, нажать на своего бота и дальше нажать Disable (отключить).
'Enable' — your bot will only receive messages that either start with the '/' symbol or mention the bot by username.
'Disable' — your bot will receive all messages that people send to groups.
Current status is: ENABLED

Если «Включить» — ваш бот будет получать только сообщения, начинающиеся с символа «/» или упоминающие бота по имени пользователя.
Если «Отключить» — ваш бот будет получать все сообщения, которые люди отправляют в группы.
Текущий статус: ВКЛЮЧЕНО

Если chat_id меньше нуля <0 — это группа, иначе личные сообщ. с одним юзером.
Проверить обращение можно
'@myusernamebot' in msg

if update.message.chat_id < 0 and bot.get_me().username in update.message.text:
	# работаем
else:
	# игнорируем и ничего не делаем
Я так понимаю что на данный момент это не рабочее решение, поскольку доступ с client access token теперь получается не так просто.
Но за статью спасибо!
Only those users with full accounts are able to leave comments. Log in, please.