За последние месяцы только ленивый не сделал телеграм-бота, который работает с API OpenAI. Были такие статьи и на Хабре. Написать игрушечного ChatGPT-бота можно хоть за час. А вот сделать его удобным в повседневной работе заметно сложнее. Я занимался этим последние несколько недель и хочу показать, что получилось. Итак, pokitoki — это чат-бот на Python, который использует языковую модель ChatGPT (GPT-3.5 или GPT-4) от OpenAI. Вот некоторые его возможности: В личном чате бот работает как ваш персональный ассистент.  Чтобы разрешить личные чаты с другими пользователями, пропишите их в настройке telegram_usernames. По умолчанию у бота ужасная память, поэтому он не помнит предыдущие реплики. Но можно задавать уточняющие вопросы через ответную реплику (Ctrl/Cmd + ↑ на десктопе) или плюсик: Почему так?
В большинстве случаев люди задают нейросети несвязанные вопросы. Поэтому по умолчанию каждый вопрос начинает диалог «с чистого листа». Если человек хочет продолжить диалог, то отвечает на сообщение собеседника — это стандартная для телеграма механика. Поэтому вопрос, заданный в ответ на сообщение бота, считается продолжением беседы. Я рассматривал альтернативный вариант: по умолчанию считать вопросы одним диалогом и принудительно завершать его командой reset. Но оказалось, что так менее удобно. Команды: Чтобы бот ответил на вопрос в группе, тегните его на уже заданном вопросе или задайте прямой вопрос: Чтобы бот отвечал всем участникам группы, пропишите ID группы в настройке telegram_chat_ids. Если настройка не задана, бот игнорирует вопросы от всех участников группы, кроме перечисленных в telegram_usernames. Если не знаете ID группы, команда /version поможет его выяснить: Если скормить ChatGPT ссылку, она либо начнет галлюцинировать, либо признается, что не может прочитать: Q: What is the content of sqlime.org/employees.sql? Make no assumptions. A: As an AI language model, I cannot access external URLs on the internet. Чтобы решить эту проблему, бот предварительно загружает текст по ссылке и подает на вход нейросети:  Поддерживает только текстовый контент (статьи, код, данные), но не PDF, изображения или аудио. Используйте короткие команды, чтобы сэкономить время и заставить бота сделать что-то конкретное с заданным вопросом. Например, попросите проверить и исправить текст командой !proofread: Вот преднастроенные шорткаты: Можно добавлять собственные шорткаты, см. примеры в config.example.yml. Удобство работы с ботом складывается из мелочей. Вот некоторые ситуации, в которых он экономит время и действия. Допустим, вы получили сообщение от коллеги или прочитали пост на канале, и хотите задать по нему вопрос. Просто перешлите сообщение боту и ответьте на уточняющий вопрос, который он задаст: Бывает, что ответ нейросети не вмещается в максимальный размер сообщения, предусмотренный телеграмом. В этом случае бот не сломается и не будет спамить вас сообщениями. Вместо этого пришлет ответ вложенным markdown-файлом:  Чтобы перефразировать или дополнить последний вопрос, отредактируйте его (↑ на десктопе). Бот заметит это и ответит на уточненный вопрос. Команда /version показывает подробную информацию о чате, боте и настройках нейросети: Остановить бота: Для старых версий Docker используйте docker-compose вместо docker compose. Я старался писать понятный модульный код, с комментариями и тестами.  Краткое описание модулей: Исходники на гитхабе Буду рад, если бот вам пригодится. По отзывам, он неплохо подходит как для индивидуального использования, так и для небольших сообществ (по интересам или рабочих). Go, SQLite и разработка софта