Свой ChatGPT-4 telegram bot бесплатно на базе GPT4free

Свой ChatGPT-4 telegram bot бесплатно на базе GPT4free

В этой статье я покажу, как создать свой телеграм бот ChatGPT на базе библиотеки gpt4free.
В моем телеграме меня просили написать гайд, как сделать телеграм бота на базе бесплатной библиотеки gpt4free, я решил написать гайд и так же дополнительно выложить исходный код, в качестве базового примера, но вполне рабочего на гит хаб, что бы любой желающий мог нажать условные пару кнопок и протестировать или использовать в своих целях.
Я был очень удивлен когда увидел, что в интернете на базе бесплатной библиотеки для Python Gpt4free делают проекты, за которые берут деньги! Один из таких проектов даже сделал подписку на токены, по моему мнению это полнейший кринж, брать деньги, за то, что в открытом доступе бесплатно и более того, базируется на сторонних WEB серивисах, которые и предоставляют доступ к ChatGPT, а gpt4free ни что иное, как API к веб мордам этих сервисов,а ни какое не хакерство и уязвимость в API Open AI как в новостях писали неграмотные журналисты. Использование Web версий координально отличается от платного оригинального API Openai со всеми вытекающими минусами, в виде лимитов или блокировок по GEO IP, стоит ли говорить, что 100% стабильности бесплатное решение не гарантирует? Кто те особо одаренные кто платит таким товарищам я не знаю, поэтому и пишу эту статью, что бы любой мог пользоваться бесплатно.
Для создания телеграм бота я буду использовать библиотеки Aiogram и g4f. Структурно для создания простейшего телеграм бота требуется несколько вещей.
1)Хранить историю сообщений пользователя, так как ChatGPT по API не имеет памяти, соответственно, что бы вести связный диалог, нужно отправлять всю историю диалога, вместе с каждым сообщением,максимальный размер такого диалога ограничивается контекстным окном, используя g4f, а не оригинальный API, мы не знаем размер этого контекстного окна у сервисов, поэтому в коде будут использоваться простейшие методы для обнаружения размера этого контекстного окна, в виде простейших принтов в консоль, после каждого сообщения с указанием общей длинный диалога.
2)Обрезать историю сообщений пользователя, для того, что бы не превышать размер контекстного окна, превышение, приведет к ошибке. Так же необходимо дать возможность вручную очищать историю диалога, для того, что бы начать диалог на новую тему например.
3)Отправлять историю сообщений и получать ответ от ChatGPT.

import logging from aiogram import Bot, Dispatcher, types import g4f from aiogram.utils import executor # Включите логирование logging.basicConfig(level=logging.INFO) # Инициализация бота API_TOKEN = 'ВАШ ТОКЕН ТЕЛЕГРАММ' bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) # Словарь для хранения истории разговоров conversation_history = {} # Функция для обрезки истории разговора def trim_history(history, max_length=4096): current_length = sum(len(message["content"]) for message in history) while history and current_length > max_length: removed_message = history.pop(0) current_length -= len(removed_message["content"]) return history @dp.message_handler(commands=['clear']) async def process_clear_command(message: types.Message): user_id = message.from_user.id conversation_history[user_id] = [] await message.reply("История диалога очищена.") # Обработчик для каждого нового сообщения @dp.message_handler() async def send_welcome(message: types.Message): user_id = message.from_user.id user_input = message.text if user_id not in conversation_history: conversation_history[user_id] = [] conversation_history[user_id].append({"role": "user", "content": user_input}) conversation_history[user_id] = trim_history(conversation_history[user_id]) chat_history = conversation_history[user_id] try: response = await g4f.ChatCompletion.create_async( model=g4f.models.default, messages=chat_history, provider=g4f.Provider.GeekGpt, ) chat_gpt_response = response except Exception as e: print(f"{g4f.Provider.GeekGpt.__name__}:", e) chat_gpt_response = "Извините, произошла ошибка." conversation_history[user_id].append({"role": "assistant", "content": chat_gpt_response}) print(conversation_history) length = sum(len(message["content"]) for message in conversation_history[user_id]) print(length) await message.answer(chat_gpt_response) # Запуск бота if __name__ == '__main__': executor.start_polling(dp, skip_updates=True)

Как вы видите, код очень простой, всего 66 строк кода. Это БАЗА. Если вы планируете использовать по не понятной причине бесплатного телеграмм бота в серьезных целях, то, вам потребуется использовать любую базу данных для хранения истории пользователя, в текущем коде сообщения хранятся в памяти и этого более чем достаточно даже для использования совместно с друзьями или коллегами. Так же НИКОГДА не храните API ключи в самом коде, в примере это сделано сознательно для самых маленьких, что бы уж точно запустилось у всех и не было вопросов, в комментариях. Ссылка на исходники на гитхаб
В переменной provider вы можете выбрать любой провайдер из тех что доступны, посмотреть список доступных провайдеров можно на гитхабе.
Провайдеров с доступом к ChatGPT-4 не так много и многие из них не стабильны или имеют ограничения по GEO IP либо требуют авторизацию или cookies. В примере на гитхабе я использовал провайдера который нормально относится к IP адрессам из России.

Свой ChatGPT-4 telegram bot бесплатно на базе GPT4free

Из реально стабильно и постоянно работающих ChatGPT-4 провайдеров bing, но для его использования нужен прокси или впн. Если устанавливать телеграм бота на VPS лучше использовать зарубежный. В самой библиотеке gpt4free поддерживается использование прокси, но мое мнение, что если уже есть прокси или впн, зачем тогда этот самый бинг в телеграм боте нужен? Если можно его использовать в оригинальном виде. Chat.geekgpt и phind тоже работают но с переменным успехом. Я лично рекомендую использовать провайдеров ChatGPT 3.5 там и с IP из России можно и не нужно париться с cookies да и работа быстрая и относительно стабильная.Для того что бы использовать прокси используйте следующий код.

response = await g4f.ChatCompletion.create_async( model=g4f.models.default, messages=chat_history, provider=g4f.Provider.GeekGpt, proxy="http://host:port", # or socks5://user:pass@host:port timeout=120, # in secs ) chat_gpt_response = response

Для выбора провайдера, можно запускать телеграм бота прямо из IDE и смотреть в консоль принты для отладки, что бы определить максимальное контекстное окно выбранного провайдера, просто пишите ему сообщения, можно сразу копипастить большие и смотреть сколько символов они занимают, в коде для упрощения считаются только символы сообщений пользователя и ответы чат GPT, то что в словаре по ключу content. Технические данные не считаются, да и это не нужно, тут нужно примерно понимать, это контекстное окно модели 4096 токенов, либо 16384. Либо вообще что-то маленькое и ограниченное, да есть и такие модели их лучше не использовать.

Инструкция по созданию телеграмм бота на Linux Ubuntu для самых маленьких в картинках.

Для начала идем в телеграм бота @BotFatherпишем команду /newbot далее пишем название бота. Следующим сообщением нужно выбрать username для бота в конце обязательно нужно указать _bot по принципу как сделано на скриншоте, все ваш бот создан.

Свой ChatGPT-4 telegram bot бесплатно на базе GPT4free

Копируем токен бота в код.

# Инициализация бота API_TOKEN = 'ВАШ ТОКЕН ТЕЛЕГРАММ' bot = Bot(token=API_TOKEN) dp = Dispatcher(bot)

Далее сразу нужно создать кнопку в меню для очистки истории диалога, что бы потом не возвращаться к этому. Пишем команду /mybots
Выбираем вашего бота. Нажимаем Edit bot, далее Edit commands. Затем пишите clear - очистка истории сообщений. Теперь при написании команды или выборе в меню /clear будет очищаться диалог с пользователем.
Для работы на виндовс например в IDE для тестов, достаточно запустить IDE, создать окружение, клонировать код с гитхаба или вручную скопировать в папку, далее ввести в терминале pip install -r requirements.txt и заменить API_TOKEN на токен вашего телеграм бота который вы только что получили.
На Ubuntu вам придется создать папку, я для удобства использую winSCP, вы можете использовать что удобно, в том числе клонировать с гита и перейти в папку командой
Запускаем Putty и подключаемся к серверу либо из терминала. Далее.

git clone https://github.com/LORD-A-B/Telegram-bot-gpt4free.git cd Telegram-bot-gpt4free

Либо создаем папку в WinSCP копируем в нее main.py и requirements.txt. А затем переходим в нее в консоли командой.

cd названиепапки

Обновляем список пакетов.

sudo apt update

По умолчанию в ubuntu уже установлен Python, проверяем командой.

python3 --version pip3 --version

Обычно менеджер пакетов pip3 не установлен в Ubuntu, устанавливаем командой.

sudo apt install python3-pip

Так же установите виртуальное окружение venv командой

sudo apt install python3.10-venv

Далее убедитесь, что вы находитесь в нужной вам папке, если нет воспользуйте командой cd, так же воспользуйтесь командой ls и проверьте содержатся ли в папке нужные вам файлы.
Создаем виртуальное окружение внутри папки.

python3 -m venv venv

Активируйте виртуальное окружение командой.

source venv/bin/activate

Установите необходимые библиотеки командой.

pip install -r requirements.txt

Теперь нужно сделать так, что бы бот автоматически запускался и был активен при старте сервера. Идем в папку /etc/systemd/system/ и создаем любым удобным вам образом, я рекомендую через winSCP файл tgbot.service в файле пишем.

[Unit] Description=My Telegram bot [Service] WorkingDirectory=/tgbot/ User=ИМЯ ПОЛЬЗОВАТЕЛЯ ЗАМЕНИТЕ НА СВОЕ ExecStart=/tgbot/venv/bin/python3 /tgbot/main.py [Install] WantedBy=multi-user.target

Замените в тексте имя пользователя на свое, а так же tgbot замените на вашу директорию с папкой.
Далее используйте следующие команды.

sudo systemctl daemon-reload sudo systemctl start tgbot.service sudo systemctl enable tgbot.service

Ваш бот готов, что бы проверить его статус используйте команду.

sudo systemctl status tgbot.service

Все готово, тут все очень легко, если выдает ошибку 403, значит ваш IP провайдеру не нравится по каким-то причинам.

Свой ChatGPT-4 telegram bot бесплатно на базе GPT4free

В данный момент я готовлю к релизу программу, асистент на базе ChatGPT для виндовс, который помогает проходить собеседования, лайв кодинг, тестовые задания, а так же можно просто использовать как обычный ChatGPT но без VPN на базе оригинального API или на базе того же gpt4free. От аналогичных программ отличается тем, что имеет распознавание изображения и текста, сразу передает в ChatGPT и выводит ответ, так же имеется режим НЕВИДИМОСТИ, очень полезно для собеседований и лайв кодинга, в режиме невидимости интерфейс программы не видно, а ответы отправляются в вашего личного телеграм бота.Уже протестировал на прохождении собеседований. Когда все будет готово, тоже напишу статью.Если интересно заходите в телеграмм. https://t.me/game_2hard

66
Начать дискуссию