Pull to refresh

Comments 106

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

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

листая ленту постов наткнулся на тему
«Как обучть мдль пнмть упртые скрщня»
habrahabr.ru/post/346578
Тест Тьюринга придуман уже довольно давно и описан даже в Википедии.
Тест Тьюринга описывает конкретные вопросы для разоблачения машины?
Некоторые боты уже прошли его, только если пообщаться с ними, никаких иллюзий ИИ нет.
Читая диалоги на некоторых форумах иногда возникает чувство что собеседники этот тест не пройдут. :)
Подъезжая к сией станцыи и глядя на природу в окно, у меня слетела шляпа.
Того и гляди — эта шляпа ещё и, собственно, тест Тьюринга прошла бы.
В этом направлении копают, но результаты пока так себе. Например, есть датасет 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
Здравствуйте! Буду очень благодарен если кто-нибудь поможет. Проблема в следующем: библиотеку для телеграма я установил, однако питон все равно говорит что нет такого модуля. Должен отметить: у меня стоит несколько версий питона. В одной из них запускается совсем другая программа, а в двух остальных ругается на отсутствие модуля. Библиотеки ставил для всех версий.
Конфликт версий, однозначно. Это urllib3, да?
Тоесть нужно снести все кроме одной? И при чем здесь urllib3?
Насчёт «снести всё кроме одной» не знаю (вы точно устанавливали все пакеты, находясь в папке со скриптом?).
Просто отписал в сообщения один юзер, у которого 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
Что значит «при обращении к api»? К какому api, как обращаетесь?
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 пробовать?
Конечно. Делайте всё, как в статье. Всё отлично работает.
Статья в стиле как собрать автомобиль вкрутив один болт.

Покупаем автомобиль без одного болта, болт и ключ. Вкручиваем болт. Поздравляем, вы собрали свой автомобиль.
Я вам больше скажу, там на страничке есть уже готовые интеграции с меседжерами и телеграм подключается вообще без программирования, только тоокен вбить.

А на node.js можно такое написать?

Интересная статья, а чем нативный механизм интеграции 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, теряя очень большой потенциал для реализации чего-то «авторского».
В былые времена было такая программка — chatmaster. Ностальгия прям
Я правильно понимаю, что бот не обучается сам, а может лишь отвечать на знакомые ему вопросы?
Обучаться он может, не без Вашей помощи, конечно.
Я правильно понимаю, что бот не обучается сам, а может лишь отвечать на знакомые ему вопросы?


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

Если о том, нужно ли вручную разбивать обучающую выборку на отдельные intent-ы — да, кластеризовать (например) готовые диалоги автоматически оно не может.
Технические статьи такие технические.
UFO landed and left these words here
Если есть api от Discord'а, то почему бы и нет.
Если кто-то захочет потренироваться на примере используя 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
Туповат как пробка, пришлось добавить свои костыли для поддержания беседы
UFO landed and left these words here
Здравствуйте.
1. Ошибка — ошибка кодировки, как её решить написано тут
2. Ошибка зависимости. Нужно устанавливать не через git clone, а через pip. Попробуйте ещё раз всё переустановить.
UFO landed and left these words here
Попробуйте использовать команду pip3 вместо pip. Кстати, во втором питоне бот может не отвечать на сообщения (первый пример), потому что type('Получил ваше сообщение') возвращает str. А type(update.message.text) возвращает unicode, поэтому сложение строк не срабатывает. Можно пофиксить через
response = 'Получил Ваше сообщение: ' + str(update.message.text)
UFO landed and left these words here
Добрый вечер. В Вашем примере мы подключаем через токен только одного агента 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.