Поскольку мир становится все более цифровым, люди постоянно ищут новые способы общения друг с другом. Одним из самых популярных приложений для обмена сообщениями сегодня является Telegram, который позволяет пользователям отправлять друг другу сообщения, фотографии и видео. Но что, если бы вы могли делать больше, чем просто отправлять сообщения? Что, если бы вы могли поговорить с ботом, который использует искусственный интеллект, чтобы понимать ваши сообщения и отвечать на них?

Это именно то, что я намеревался сделать, когда создавал телеграмм-бота ChatGPT. Этот бот использует OpenAI GPT-3.5, чтобы предоставить пользователям более естественный и похожий на человеческий опыт общения. Но я не остановился на достигнутом. Я также включил контекст, рисование ИИ и парсинг Google, чтобы сделать бота еще более мощным и универсальным.

Для начала мне нужно было получить необходимые API и установить переменные среды. Первым API, который мне понадобился, был ключ OpenAI, который я получил на веб-сайте OpenAI. С помощью этого ключа я смог получить доступ к модели GPT-3.5-turbo, которая представляет собой мощную языковую модель, которая может понимать ввод на естественном языке и реагировать на него.

Далее мне понадобился ключ от Stable Diffusion, который предоставляет услуги рисования AI. Этот ключ позволил мне включить рисование в бота, что означает, что пользователи могут отправлять команду Paint с описанием сцены.

Затем мне понадобился ключ от модели replicate.com, который обеспечивает преобразование изображения в текст. С помощью этого ключа я смог включить функциональность OCR.

После того, как у меня были настроены все необходимые API и переменные среды, я начал создавать бота. Первым шагом было создание бота Telegram с использованием Telegram Bot API. Этот API предоставляет простой способ создания и управления ботами на платформе Telegram.

const replicate = new Replicate({ token: process.env.REPLICATE_KEY });
const openai = new OpenAIApi(new Configuration({ apiKey: process.env.OPENAI_KEY }));
const bot = new TelegramBot(process.env.TELEGRAM_KEY, { polling: true });
const translation = new TranslationServiceClient();

Далее мне нужно было интегрировать OpenAI API в бота. При этом задействован node-telegram-api, который получает сообщения от пользователей и отправляет их в API OpenAI для обработки. Как только API вернул ответ, мне пришлось отформатировать его и отправить обратно пользователю через бота Telegram.

const getText = async (prompt, temperature, max_tokens, chatId) => {
    try {
        const completion = await openai.createChatCompletion({
            model: "gpt-3.5-turbo",
            messages: [{ role: "user", content: prompt }],
            max_tokens: max_tokens,
            temperature: temperature,
        });
        const response = completion?.data?.choices?.[0]?.message?.content;
        return response;
    } catch (e) {
        console.error(e.message);
    }
};

Чтобы сделать бота еще более мощным, я решил включить контекст в разговор. Это означает, что бот запоминает предыдущие сообщения и использует их для предоставления более персонализированных ответов. Например, если пользователь просит бота порекомендовать ресторан, бот запомнит местоположение пользователя и предыдущие предпочтения ресторана, чтобы предоставить более релевантную рекомендацию.

        // Brain activity
        context[chatId] = context[chatId]?.slice(-CONTEXT_SIZE * premium(chatId)) ?? "";
        writeContext(context);

        if (msg.photo) {
            // visual hemisphere (left)
            visualToText(chatId, msg);
        }
        msg.text = msg.text?.substring(0, MAX_LENGTH * premium(chatId));
        if (msgL.startsWith("google")) {
            textToGoogle(chatId, msg.text.slice(7), msg.from?.language_code);
        } else {
            if (msgL.startsWith("draw") || msgL.startsWith("paint")) {
                // visual hemisphere (left)
                textToVisual(chatId, msgL, msg.from?.language_code);
            } else {
                // audio hemisphere (right)
                textToText(chatId, msg);
            }
        }

С интегрированными API-интерфейсами Stable Diffusion и Google парсинга бот стал еще более универсальным. Теперь пользователи могут попросить бота искать информацию в Интернете и получать соответствующие результаты.

const textToVisual = async (chatId, text, language_code) => {
    if (text === "draw" || text === "paint") {
        // link between right and left hemisphere (painting)
        text = last[chatId];
    }
    if ((language_code == "ru" && !text?.startsWith("draw"))) {
        text = await translate(text, "en");
    }
    const photo = await getArt(
        text +
            (text?.startsWith("draw")
                ? ""
                : ", deep focus, highly detailed, digital painting, artstation, 4K, smooth, sharp focus, illustration")
    );
    if (photo) {
        bot.sendPhoto(chatId, photo);
    }
};

Создание телеграмм-бота ChatGPT было сложным, но полезным опытом. Интегрировав несколько API и используя контекст, стабильное рисование ИИ и парсинг Google, я смог создать бота, который обеспечивает пользователям более естественный и человеческий опыт общения. Поскольку технология искусственного интеллекта продолжает развиваться, я с нетерпением жду, какие новые возможности она принесет в такие приложения для обмена сообщениями, как Telegram.

Гитхаб здесь

Рабочий пример
Чтобы попробовать бесплатно, используйте 

Комментарии (28)


  1. NolReaction
    00.00.0000 00:00

    Отличная работа. Продолжай в том же духе !


  1. Extender Автор
    00.00.0000 00:00

    Спасибо! Пока заинтересовался автоматической генерацией комиксов ???? пара дней и закончу вот это: https://mangatv.shop/

    Сегодня запустил на 5 часов в тестовом режиме - и вот результат! 50 историй.


    1. AnriSSD
      00.00.0000 00:00
      +1

      Ого, а можно тутор? (


      1. Extender Автор
        00.00.0000 00:00

        Я напишу тут статью подробную как закончу. Надо ещё проблемы с производительностью пофиксить. Манга это не бот, там медиа хостится так что хабраэффект будет сильный ????


  1. ioncorpse
    00.00.0000 00:00
    +3

    Нейронка текст писала? Если оскорбил - прошу прощения.


    1. Extender Автор
      00.00.0000 00:00
      +3

      Ни в коем случае не оскорбили! Да, скормил ей README.txt из репы, и попросил сделать статью для хабра ???? потом чуть-чуть отредактировал.


  1. freehabr
    00.00.0000 00:00
    +1

    Оплатить из России нельзя.


    1. Extender Автор
      00.00.0000 00:00
      +1

      Так я для того и выложил исходники! Запустите на своём сервере и никому не платите ????


      1. freehabr
        00.00.0000 00:00
        +2

        Платить в openai все равно придется.


      1. Mifares
        00.00.0000 00:00
        +1

        Здравствуйте, подскажете какую платформу выбрали, чтоб расположить на ней бота?) Заранее спасибо


        1. Extender Автор
          00.00.0000 00:00

          Oracle Free Tier. С always free они дают 4 CPU Ampere server, с 24 Gb RAM и 200 GB SSD. Очень советую, тот случай когда оракл сделала что то хорошее но никто про это не знает )) за 2 года не заплатил им не копейки. Конечно, иногда приходится поискать специфичный контейнер под aarm64, но в итоге все находится и работает. А ещё они дают 2 микроинстанса с АМД. Но ампер круче в разы


          1. Mifares
            00.00.0000 00:00

            Очень благодарен)))


  1. SuddenWind
    00.00.0000 00:00
    +1

    img2prompt - это не OCR

    Спасибо, интересно ????


    1. Extender Автор
      00.00.0000 00:00

      Я обычно этой функцией перерисовываю фотки/картины. То есть кидаешь боту фотку, и сразу как распознает - пишешь Нарисуй (без ничего)


  1. Vitek_87
    00.00.0000 00:00
    +1

    Очень крутой проект!!!! Подскажите, как запустить исходники на Windows?! и в каких файлах нужно менять API ? Заранее спасибо!


    1. Extender Автор
      00.00.0000 00:00

      Надо поставить ноду 18.0, потом сходить хотя бы в ботфазера и опенаи и добыть их ключи. А их уже в переменные окружения или .env. Ну и запускайте! node index.js


  1. Vitek_87
    00.00.0000 00:00
    +1

    Я получил API, в какой файл их прописать?! ))))


    1. Extender Автор
      00.00.0000 00:00
      +1

      .env в корне проекта ????


  1. nurullaev
    00.00.0000 00:00
    +1

    Добрый день.

    Спасибо за ваш труд.

    Можете написать пошаговую инструкцию как запустить бота из исходников у себя на VPS c Ubuntu 22.04?

    Заране спасибо


  1. Dmitryfftfff
    00.00.0000 00:00

    Может видео сделаете с "чистой" винды как это сделать?

    Благодарю


  1. sunwater
    00.00.0000 00:00
    +1

    "Paint с описанием сцены"

    Попробовал - не получается.

    Можно поподробнее синтаксис команды?


    1. Extender Автор
      00.00.0000 00:00

      В группе у людей с этим проблем нет, уже 10000 картинок нарисовали ???? в целом зависит от языка телеграм. Если стоит английский, то переводчик не будет переводить. Так что либо "Нарисуй машинку" либо "Paint a car". Ну и есть ещё режим для гиков "draw a black robot standing on one leg, Akira Toriyama 3d rendering, cgsociety, lesautostites, reimagined with industrial light and magic, steampunk, hard surface modeling". Если draw написана с маленькой буковки, перевода и обогащения стилей не будет. То есть такой сырой режим.


      1. sunwater
        00.00.0000 00:00

        Может я не тем ботом пользуюсь?

        Перебрал уже кучку вариантов.

        Это он https://t.me/testnewaigpt35turboBot ?

        Если да - то вот его ответ:

        "Зачем именно рисовать машину? В данный момент я не обладаю функцией создания изображений. Может быть, я могу помочь с чем-то другим?


        1. Extender Автор
          00.00.0000 00:00

          Это не мой бот ????


  1. sunwater
    00.00.0000 00:00

    Ну так а какой Ваш?


    1. Extender Автор
      00.00.0000 00:00

      В конце статьи же есть ссылки


  1. Firsto
    00.00.0000 00:00

    Картинки рисует. А вот общаться не хочет.

    Request failed with status code 429


    1. Extender Автор
      00.00.0000 00:00

      У вас какая то проблема с OpenAI API. Сервер в России?