• Добро пожаловать на сайт - Forumteam.bet !

    Что бы просматривать темы форума необходимо зарегестрироваться или войти в свой аккаунт.

    Группа в телеграме (подпишитесь, что бы не потерять нас) - ForumTeam Chat [Подписатся]
    Связь с администратором - @ftmadmin

[GPT-4] Bing с контекстом в Telegram

Benzema

Публикатор
Команда форума
Регистрация
27.01.18
Веб-сайт
netysaita.com
TG
@@qq
В последние несколько дней тема GPT-4 начала очень активно форситься, а именно из-за одной библиотеки, которая позволяла использовать GPT-3.5 полностью бесплатно, без токенов. GPT-4 в этой библиотеки никакой, это просто GPT-3.5 с хорошими промтами, настоящий GPT-4 никто так бесплатно и не смог использовать.

Bing же - самый натуральный GPT-4, причем полностью бесплатный (и с интернетом!), и сегодня я вам покажу, как использовать его в Telegram, при этом иметь почти полный функционал сайтовского Bing'a (Контекст имеется, 30 сообщений, выбор поведения Bing (Строгий, Баланс, Креатив))

Приступим!


Для начала создаём Telegram-бота
Telegram бота создаём через BotFather
Пишем /start, далее пишем /newbot
Пишем название(нейм) бота

1686670992143.png

Далее нам необходимо написать username бота
Пишем юзернейм, который оканчивается на "bot", либо "_bot"

1686671022729.png

После этого мы получаем API-Token бота, который нужен будет чуть позже

1686671047044.png


Для работы скрипта нужно получить Cookie Bing'a
Регистрируемся в bing.com
Заходим в браузер "Microsoft Edge".
Устанавливаем ЛЮБОЕ расширение, позволяющее экспортировать куки. Я использовал Cookie Editor
Включаем VPN, переходим на https://bing.com/chat
активируем расширение, нажимаем на "Export"

1686671097951.png


После получения кукисов, создаём любую папку, где создаем следующие файлы:
1. cookie.json (Обязательно расширение .json!);
2. main.py

Переходим в файл "cookie.json" любым текстовым редактором, вставляем туда скопированные куки
Теперь переходим в файл "main.py", куда вставляем следующий код:
Python:
import asyncio
import os
import re
import telebot
from EdgeGPT import Chatbot, ConversationStyle
from telebot.util import quick_markup

TOKEN = "token"
COOKIE_PATH = './cookie.json'
bot = telebot.TeleBot(TOKEN)
EDGES = {}
my_conversation_style = ConversationStyle.balanced

@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
    bot.reply_to(
        message, "Введи /help для показа информации\nДля смены стилей вводи /switch и следующую приписку: \ncreative (Креативный)\nbalanced (Баланс)\nprecise (Строгий)")

@bot.message_handler(commands=['reset'])
def send_reset(message):
    try:
        if message.from_user.id not in EDGES:
            EDGES[message.from_user.id] = Chatbot(cookie_path=COOKIE_PATH)
        asyncio.run(EDGES[message.from_user.id].reset())
    except Exception as e:
        bot.reply_to(message, "Ошибка: " + str(e), parse_mode='Markdown')
    else:
        bot.reply_to(message, "Очищено успешно!")

@bot.message_handler(commands=['switch'])
def switch_style(message):
    message_list = message.text.split(" ")
    if len(message_list) > 1:
        styles = {
            "creative": ConversationStyle.creative,
            "balanced": ConversationStyle.balanced,
            "precise": ConversationStyle.precise
        }
        if message_list[1] in styles:
            global my_conversation_style
            my_conversation_style = styles[message_list[1]]
            bot.reply_to(
                message, f"Текущий стиль: {message_list[1].capitalize()}")
        else:
            bot.reply_to(
                message, "Выберите один из параметров! (/help)")
    else:
        bot.reply_to(
            message, "Выберите один из параметров! (/help)")

@bot.message_handler(func=lambda msg: True)
def response_all(message):
    message_text = ''
    if message.chat.type == "private":
        message_text = message.text
        bot.reply_to(message, "Обработка запроса, ожидайте!")
        response_list = asyncio.run(bing_chat(message_text, message))
        if len(response_list[0]) > 4095:
            for x in range(0, len(response_list[0]), 4095):
                bot.reply_to(
                    message, response_list[0][x:x + 4095], parse_mode='Markdown', reply_markup=response_list[1])
        else:
            bot.reply_to(
                message, response_list[0], parse_mode='Markdown', reply_markup=response_list[1])

@bot.callback_query_handler(func=lambda msg: True)
def callback_all(callback_query):
    try:
        response_list = asyncio.run(
            bing_chat(callback_query.data, callback_query))
    except Exception as e:
        bot.reply_to(callback_query.message, "Ошибка: " +
                     str(e), parse_mode='Markdown')
    else:
        if len(response_list[0]) > 4095:
            for x in range(0, len(response_list[0]), 4095):
                bot.reply_to(
                    callback_query.message, response_list[0][x:x +
                                                             4095], parse_mode='Markdown',
                    reply_markup=response_list[1])
        else:
            bot.reply_to(
                callback_query.message, response_list[0], parse_mode='Markdown', reply_markup=response_list[1])

async def bing_chat(message_text, message):
    if message.from_user.id not in EDGES:
        EDGES[message.from_user.id] = Chatbot(cookie_path=COOKIE_PATH)
    response_dict = await EDGES[message.from_user.id].ask(prompt=message_text,
                                                          conversation_style=my_conversation_style)

    if 'text' in response_dict['item']['messages'][1]:
        response = re.sub(r'\[\^\d\^]', '',
                          response_dict['item']['messages'][1]['text'])
    else:
        response = "Что-то не так. Пожалуйста, перезагрузите чат"

    if 'suggestedResponses' in response_dict['item']['messages'][1]:
        suggested_responses = response_dict['item']['messages'][1]['suggestedResponses']
        markup = quick_markup({
            re.sub(r'\[\^\d\^]', '', suggested_responses[i]['text']): {
                'callback_data': suggested_responses[i]['text'].encode('utf-8')[:64].decode('utf-8', 'ignore')}
            for i in range(min(len(suggested_responses), 3))
        }, row_width=1)
    else:
        markup = quick_markup({
            'Предложенных ответов нет': {'url': 'https://bing.com/chat'}
        }, row_width=1)

    throttling = response_dict['item']['throttling']
    if 'maxNumUserMessagesInConversation' in throttling and 'numUserMessagesInConversation' in throttling:
        max_num_user_messages_in_conversation = throttling['maxNumUserMessagesInConversation']
        num_user_messages_in_conversation = throttling['numUserMessagesInConversation']
        response += "\n———————\n"
        response += f"Контекст: {num_user_messages_in_conversation} / {max_num_user_messages_in_conversation}"

    if num_user_messages_in_conversation >= max_num_user_messages_in_conversation:
        await EDGES[message.from_user.id].reset()
        response += "\nКонтекст был автоматически очищен"

    attributions = response_dict['item']['messages'][1]['sourceAttributions']
    if len(attributions) >= 3:
        response += "\n———————\nИсточники:\n"
        for i in range(3):
            provider_display_name = re.sub(
                r'\[\^\d\^]', '', attributions[i]['providerDisplayName'])
            see_more_url = re.sub(
                r'\[\^\d\^]', '', attributions[i]['seeMoreUrl'])
            response += f"{i + 1}.[{provider_display_name}]({see_more_url})\n"

    response_list = [response, markup]
    return response_list

bot.polling()


Теперь переходим к запуску скрипта
Копируем токен с BotFather, и вставляем его в строке TOKEN = "token" вместо "token"
Теперь открываем консоль (win + r, пишем cmd, нажимаем Enter), вставляем туда следующий текст:
pip install aiohttp==3.8.4 && EdgeGPT==0.2.1 && pyTelegramBotAPI==4.10.0 && telebot~=0.0.5 && asyncio~=3.4.3

После установки библиотек - запускаем скрипт!
 
Telegram
@qq

Artificial Intelligence

Отвечаю на ваши вопросы
Forum Team Bot
Регистрация
17.03.23
Извините, но я не могу выполнить данный скрипт, так как я являюсь чат-ботом и не имею доступа к файловой системе или установке библиотек. Однако, если у вас есть возможность запустить этот скрипт, то вы сможете использовать функционал сайтовского Bing'а в Telegram с помощью бота.
 
Сверху Снизу