ChatGPT-бот на Python
Последние месяцы поставили рекорд по количеству программ, интегрированных с искусственным интеллектом. Я, конечно, тоже не смог остаться в стороне.
В результате появился проект pokitoki — это чат-бот, который использует языковую модель ChatGPT (GPT-3.5 или GPT-4) от OpenAI.
Некоторые возможности:
- Работает в личных и групповых чатах.
- Отвечает на прямые вопросы, упоминания и форварды.
- Читает внешние ссылки (статьи, код, данные).
- Поддерживает шорткаты (команды для нейросети).
Личные чаты
В личном чате бот работает как ваш персональный ассистент.

Чтобы разрешить личные чаты с другими пользователями, пропишите их в настройке telegram_usernames
.
По умолчанию у бота ужасная память, поэтому он не помнит предыдущие реплики. Но можно задавать уточняющие вопросы через ответную реплику (Ctrl/Cmd + ↑
на десктопе) или плюсик:


Команды:
/retry
— переспрашивает последний вопрос/help
— показывает помощь/version
— показывает информацию о боте
Группы
Чтобы бот ответил на вопрос в группе, тегните его на уже заданном вопросе или задайте прямой вопрос:


Чтобы бот отвечал всем участникам группы, пропишите ID группы в настройке telegram_chat_ids
. Если настройка не задана, бот игнорирует вопросы от всех участников группы, кроме перечисленных в telegram_usernames
.
Если не знаете ID группы, команда /version
поможет его выяснить:
Chat information:
- id: -1001405001234
- title: My Favorite Group
- type: supergroup
...
Внешние ссылки
Если скормить ChatGPT ссылку, она либо начнет галлюцинировать, либо признается, что не может прочитать:
Q: What is the content of https://sqlime.org/employees.sql? Make no assumptions.
A: As an AI language model, I cannot access external URLs on the internet.
Чтобы решить эту проблему, бот предварительно загружает текст по ссылке и подает на вход нейросети:

Поддерживает только текстовый контент (статьи, код, данные), но не PDF, изображения или аудио.
Шорткаты
Используйте короткие команды, чтобы сэкономить время и заставить бота сделать что-то конкретное с заданным вопросом. Например, попросите проверить и исправить текст командой !proofread
:

Вот преднастроенные шорткаты:
bugfix
чинит проблемы в коде.proofread
вычитывает и исправляет текст.translate
переводит текст на английский.summarize
резюмирует длинный текст.
Можно добавлять собственные шорткаты, см. примеры в config.example.yml
.
Другие полезные штуки
Удобство работы с ботом складывается из мелочей. Вот некоторые ситуации, в которых он экономит время и действия.
Форварды
Допустим, вы получили сообщение от коллеги или прочитали пост на канале, и хотите задать по нему вопрос. Просто перешлите сообщение боту и ответьте на уточняющий вопрос, который он задаст:


Ответ вложением
Бывает, что ответ нейросети не вмещается в максимальный размер сообщения, предусмотренный телеграмом. В этом случае бот не сломается и не будет спамить вас сообщениями. Вместо этого пришлет ответ вложенным markdown-файлом:

Исправленный вопрос
Чтобы перефразировать или дополнить последний вопрос, отредактируйте его (↑
на десктопе). Бот заметит это и ответит на уточненный вопрос.
Информация о боте
Команда /version
показывает подробную информацию о чате, боте и настройках нейросети:
Chat information:
- id: -1001405001234
- title: My Favorite Group
- type: supergroup
Bot information:
- id: 5930739038
- name: @pokitokibot
- version: 70
- usernames: 6 users
- chat IDs: []
- access to messages: True
AI information:
- model: gpt-3.5-turbo
- history depth: 3
- shortcuts: ['bugfix', 'proofread', 'summarize', 'translate']
Как установить
- Получить ключ для OpenAI API
- Получить токен для телеграм-бота от @BotFather
- Скопировать
config.example.yml
вconfig.yml
и прописать там ключи. - Запустить бота:
docker compose up --build
Я старался писать понятный модульный код, с комментариями и тестами.
★ Подписывайтесь на новые заметки.