Изучаем веб-сервисы ChatGPT и пробуем программировать

afbur1xdfvnvio3omfsqnuxonsq.jpeg

Прямого доступа к сервисам OpenAI в РФ, как известно, нет. Для работы с ChatGPT многие пользуются телеграм-ботами, чаще всего бесплатными. В основном, запросы к ним — непритязательные. Пользователи практикуются в английском и, не раздражая никого пробелами в орфографии, получают списком все свои ошибки. Можно задавать ботам относительно простые вопросы.

Но, боты, в подавляющем большинстве работают на версии GPT3.5, возможности которой ограничены. Поэтому даже на хороший, но не релевантный запрос можно получить очень странный ответ, который начинается чем-то вроде «Да, я просто языковая модель и не могу сделать того, что вы от меня хотите…» и т. д. Нельзя забывать и о том, что телеграм-бот едва ли сможет хранить контекст, размером более 4000 токенов.

Поэтому в некоторых случаях удобнее использовать именно веб-сервисы, у них функции побогаче.
Есть, конечно, телеграм-боты с ChatGPT4, но и с теми и с другими — много проблем. Они ограничивают вас лимитом по 10–20 сообщений в сутки, просто забиты рекламой, постоянно требуют подписку на новые телеграм-каналы, а иногда даже на их группы или регистрацию в других ботах. Ваше сообщение может не конца быть передано модели, и вы об этом не узнаете. Чат просто «подрежет» лишнее.

«Родной» веб-интерфейс позволяет хранить не один контекст диалога, а несколько. Можно также возвращаться к ним потом, продолжать с ними работать, переключаться с одного с одного на другой. У ботов этого функционала, естественно, нет. Хорошо, что телеграм сохраняет, хотя бы историю запросов. Работа в таком режиме, если её ещё можно назвать работой, довольно неудобна.

Но и это — не все «минусы». Мало того, что все данные профиля и переписка сохраняются Open Ai и серверами «Телеграма» или его приложениями, чат-бот может специально создан для того, чтобы их у вас украсть и, при прочих равных об этом не стоит забывать.

Существуют доступные разработки, основанные на других моделях ИИ. Например, Google Bard ищет ответ в выдаче Google, Perplexity AI использует цитаты, Anthropic Claude пересказывает видео Youtube и различные тексты, длина которых не превышает 75 тысяч слов. Но это — экспериментальные модели и с ними пока всё сложно.

В разной степени и оригинальный ChatGPT включён в различные доступные ресурсы. Но в таком случае он не всегда может быть полезен. Например, на сайте Bing.com, его функционал урезан до предела. На запрос о написании несложной программы он ответил общими словами, вроде:»…Создание такого приложения может быть сложным процессом, но есть множество ресурсов в Интернете, которые могут помочь вам начать.»

Словом, для регулярной работы с ИИ лучше найти подходящий сервис.

Веб-сервисы: грузите апельсины токены бочками


Одно из важных, эмпирически выведенных правил, которое стоит учитывать при пользовании платными ресурсами, предоставляющими доступ к искусственному интеллекту (хорошие веб-сервисы — все платные), заключается в том, что один токен обычно соответствует примерно четырём символам стандартного текста на английском языке или трём четвертям слова. Сто токенов — это около 75 слов.

Другой тонкий момент связан с тем, что ChatGPT разрабатывался для английского языка и (при равном контексте) способен запоминать и обрабатывать примерно в пять раз больше информации на английском, чем на русском языке. Это можно проверить с помощью токенизаторов (при этом надо помнить, что для GPT-3.5 и 4 они различны).

Сервисов, предоставляющих доступ из РФ к услугам искусственного интеллекта уже довольно много. Некоторые прямо дублируют друг друга, некоторые копируют интерфейс OpenAI. Лишь немногие идут своим путём, добавляя пользователям удобства и разных фич.

TheB.AI


z6hhos5eb4h1xbjnwfwpn9qmicw.jpeg

Вполне корректно отвечает на поставленные вопросы. Использует актуальную информацию и данные. Предоставляет доступ к другим моделям искусственного интеллекта и, по существу, является сервисом. К сожалению, в настоящее время доступны ещё далеко не все анонсированные возможности. Поэтому бóльшая часть моделей неактивна. Сервис даёт возможность пробного использования. Какую-то практическую пользу от него можно получить, вложив хотя бы 1000₽ и более. Суточный лимит: пять запросов. И это не российский сервис, так что могут возникнуть сложности с оплатой.

GPTunnel


wgza_dsnsdp38pdstcvwalincfs.jpeg

Добротный веб-сервис, предоставляющий доступ к ChatGPT и популярному ресурсу для генерации изображений Midjourney. Предлагает ряд ролей, которые разбиты по разделам: графика, аудио, учёба, разработка, жизнь, контент. На бесплатном тарифе можно воспользоваться услугами ChatGPT 3.5. Стоимость различается в зависимости от модели чата и вида сообщения: всё просто, лаконично и понятно. Оплачиваются только использованные ресурсы, что очень подкупает. В дальнейшем для генерации кода будем использовать его.

ChatGPT.ru


qwiwyivlgr49qa1kicfhmjnxcs8.jpeg

Создатели сервиса не мудрствуя лукаво дали ему наименование оригинала. Функционал тот же, что и у модели ChatGPT — создание и анализ текстовой информации. Сервис генерирует вполне адекватные тексты. Его функционал предполагает и создание изображений, но тут не стоит ждать «вау-эффекта»: вместо нужных картинок появляется какая-то ерунда. Версия ChatGPT — неизвестна. Лимит — до десяти запросов в сутки. Сервис (или, скорее чат) бесплатен.

GPT-OPEN


gugbnktc4kbfhrmmn1q_vwfqufi.jpeg

Минималистичный интерфейс намекает на простоту использования. На первом плане — роли, которые можно использовать: программист, копирайтер, маркетолог — и т.д. В премиум-версии доступна возможность генерации изображений. Анонсирована возможность создания аудио и видеофайлов. Стоимость премиум-аккаунта — 1000 рублей. Как и предыдущий ресурс, это, скорее не сервис в полном смысле слова, а больше онлайн-чат.

Нейро Текстер


uu9uijd0qvkm6xke4v3mocnijh4.jpeg

Анонсирован как сервис, но возможностей не так уж и много. Генерация картинок — никудышная. Лимит составляет 1100 токенов, цена — 299₽/мес. Безусловно, ChatGPT4 это неплохо —, но от «сервиса будущего» хотелось большего. Хотя цены доступные.

Chad


mep-ulpwt9dmpalthln1jj5mjvo.jpeg

Есть доступ к генерации изображений. Но эта функция платная. Даёт возможность получить ответы на десять бесплатных запросов один раз и потом — до трёх раз ежедневно. Цены стартуют от 290₽. Есть даже приложения для смартфона под IOS и Android. Кажется, это старейший из подобных сервисов в РФ и лидер по посещениям (1,1 млн посетителей в месяц), но данные там не обновляются уже несколько месяцев. Такое ощущение, что его забросили.

GOGPT


juuoa58gurnfysr8lcqvxfqpi9o.jpeg

Преимущество данного сервиса — бесплатный тариф на 60 000 токенов, позволяющий отправлять до пяти запросов ежедневно, правда, оговаривается ожидание ответов, от 10 до 30 секунд. Скорее всего, в реальности больше. Всё бы хорошо, но тариф с доступом к ChatGPT4 у этого сервиса будет стоить уже от 699₽, а генерация картинок и вовсе пока недоступна.

SEOPTIMUS


ze94aa-jp-_ceiw3w7e9qzdt1z8.jpeg

Интересный ресурс для SEO-оптимизаторов. Имеются специальные шаблоны промтов и функция проверки текста на уникальность с помощью соответствующего встроенного API. Сервис можно попробовать бесплатно, далее придётся воспользоваться тарифами, от 299₽. Этот сервис пригодится специалистам в области SEO. Обычному пользователю он будет непонятен.

Генерируем… софт


Открываем GPTunnel как наиболее оптимальный для нашей задачи сервис (по соотношению цена/качество) — и вводим необходимые запросы на родном языке. Предлагаем модели сгенерировать программу на Arduino. Она должна управлять водяным электрокотлом с тремя нагревателями, поддержать в помещении температуру от 20 до 25 ⁰C. При этом необходимо не допускать перегрева котла, периодически случайным образом отключать один из нагревателей для экономии ресурса и выводить основную информацию на дисплей. Сервис выдал следующий, неплохо документированный фрагмент, который сходу скомпилировался в Arduino IDE:

// Импортируем библиотеки
#include 
#include 
#include 
#include 

// Подключение пинов для управления тэнами
const int ten1Pin = 2;
const int ten2Pin = 3;
const int ten3Pin = 4;

// Подключение пинов для датчиков температуры
const int roomTempPin = 5;
const int waterTempPin = 6;

// Подключение пинов для дисплея
const int lcdAddr = 0x27;
const int lcdCols = 16;
const int lcdRows = 2;

// Подключение пина для звукового сигнала
const int speakerPin = 7;

// Инициализация объектов для работы с датчиками температуры
   OneWire oneWireRoom(roomTempPin);
   OneWire oneWireWater(waterTempPin);
   DallasTemperature roomTempSensor(&oneWireRoom);
   DallasTemperature waterTempSensor(&oneWireWater);

// Инициализация объекта для работы с дисплеем
     LiquidCrystal_I2C lcd(lcdAddr, lcdCols, lcdRows);

// Инициализация объекта для работы со звуковым сигналом
     Tone speaker;

// Пороговые значения температуры для включения и выключения тэнов
     const float targetTemp = 25.0; // Желаемая температура в помещении
     const float minTemp = 20.0; // Минимальная температура в помещении для включения тэнов
     const float maxTemp = 25.0; // Максимальная температура в помещении для выключения тэнов
     const float waterMaxTemp = 85.0; // Максимальная температура воды в котле

// Флаги для отслеживания состояния нагревателей и перегрева котла
     bool ten1On = false;
     bool ten2On = false;
     bool ten3On = false;
     bool waterOverheated = false;

    void setup() {
    // Инициализация пинов для управления тэнами
         pinMode(ten1Pin, OUTPUT);
         pinMode(ten2Pin, OUTPUT);
         pinMode(ten3Pin, OUTPUT);

  // Инициализация пина для звукового сигнала
         pinMode(speakerPin, OUTPUT);

  // Запуск коммуникации с датчиками температуры
         roomTempSensor.begin();
         waterTempSensor.begin();

  // Инициализация дисплея
         lcd.begin(lcdCols, lcdRows);
         lcd.backlight();

  // Приветствие на дисплее
         lcd.setCursor(0, 0);
         lcd.print("Heating Control");
         lcd.setCursor(0, 1);
         lcd.print("System");

  delay(2000);

  // Очистка дисплея
         lcd.clear();
    }

     void loop() {
  // Получение температуры в помещении
              roomTempSensor.requestTemperatures();
              float roomTemp = roomTempSensor.getTempCByIndex(0);

  // Получение температуры воды в котле
              waterTempSensor.requestTemperatures();
              float waterTemp = waterTempSensor.getTempCByIndex(0);

  // Включение/выключение нагревателей в зависимости от температуры в помещении
         if (roomTemp < minTemp && !ten1On && !ten2On && !ten3On) {
                 ten1On = true;
                 digitalWrite(ten1Pin, HIGH);
                 } else if (roomTemp > maxTemp && (ten1On || ten2On || ten3On)) {
                 ten1On = false;
                 ten2On = false;
                 ten3On = false;
                 digitalWrite(ten1Pin, LOW);
                 digitalWrite(ten2Pin, LOW);
                 digitalWrite(ten3Pin, LOW);
  }

  // Проверка перегрева котла
         if (waterTemp > waterMaxTemp && !waterOverheated) {
                 waterOverheated = true;
                 digitalWrite(ten1Pin, LOW);
                 digitalWrite(ten2Pin, LOW);
                 digitalWrite(ten3Pin, LOW);
                 lcd.clear();
                 lcd.setCursor(0, 0);
                 lcd.print("Boiler Overheated!");
                 lcd.setCursor(0, 1);
                 lcd.print("Water Temp: ");
                 lcd.print(waterTemp);
                 speaker.play(NOTE_A4, 500);
                 }

  // Отображение информации на дисплее
                    lcd.clear();
                    lcd.setCursor(0, 0);
                    lcd.print("Room Temp: ");
                    lcd.print(roomTemp);
                    lcd.setCursor(0, 1);
                    lcd.print("Water Temp: ");
                    lcd.print(waterTemp);

  // Задержка перед следующей итерацией
                       delay(1000);
                   }


Это, конечно, только макет и с ним ещё придётся поработать. Пойдём дальше и попросим сервис сделать программку для удалённого управления нашим котлом через смартфон на Android, в которой будет несколько кнопок — включение-отключение котла, отображение его температуры и температуры в помещении. После нескольких вариантов запроса, я получил такой код:

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity {
    private TextView airTemperatureTextView;
    private TextView waterTemperatureTextView;
    private Button powerOnButton;
    private Button powerOffButton;

    // Предположим, что у нас есть объекты или методы для получения температуры воздуха и воды.
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        airTemperatureTextView = findViewById(R.id.air_temperature_text_view);
        waterTemperatureTextView = findViewById(R.id.water_temperature_text_view);
        powerOnButton = findViewById(R.id.power_on_button);
        powerOffButton = findViewById(R.id.power_off_button);

        // Установка обработчика нажатия на кнопку Включения котла
        powerOnButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Здесь можно вызвать метод или действие для включения котла
            }
        });

        // Установка обработчика нажатия на кнопку Выключения котла
        powerOffButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Здесь можно вызвать метод или действие для выключения котла
            }
        });

        // Обновление температуры на экране (в примере предполагается использование отдельного потока
        // для обновления значений температур)
        updateTemperatures();
    }

    private void updateTemperatures() {
        // Получение температуры воздуха и воды и обновление значений на экране
        /*
        double airTemperature = getAirTemperature();
        double waterTemperature = getWaterTemperature();
        airTemperatureTextView.setText("Air Temperature: " + airTemperature + "°C");
        waterTemperatureTextView.setText("Water Temperature: " + waterTemperature + "°C");
         */

        // В примере выше предполагается, что у вас есть объекты или методы для получения значений температур.
        // Если у вас нет таких объектов или методов, вы можете заменить комментарии в коде на нужный вам способ
        // получения значений температур.
    }
}


Xml-файл:



    

    

    


С этим фрагментом программы работы будет ещё много. Ну, хотя бы так.

Осталось заказать Midjourney концепт интерфейса программы управления котлом:

lptp3qh5eaxfeuox0fc6lqajsxu.jpeg

o-c0_9aumfvczdtmpepwudmam8q.jpeg

Пожалуй, такого не нагуглишь. Для копирования, конечно, не годится, но как идея для дизайна — сойдёт.

Как видим, в общем и целом, некоторые сервисы позволяют комфортно работать как с ChatGPT, так и с Midjourney, так что можно пробовать их в деле. Тот же GPTunnel показывает очень неплохой результат.

© Habrahabr.ru