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

от автора

Прямого доступа к сервисам 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

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

GPTunnel

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

ChatGPT.ru

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

GPT-OPEN

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

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

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

Chad

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

GOGPT

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

SEOPTIMUS

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

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

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

// Импортируем библиотеки #include <OneWire.h> #include <DallasTemperature.h> #include <LiquidCrystal_I2C.h> #include <Tone.h>  // Подключение пинов для управления тэнами 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-файл:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical"     android:padding="16dp">      <TextView         android:id="@+id/air_temperature_text_view"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="Air Temperature: N/A"         android:textAppearance="?android:textAppearanceMedium" />      <TextView         android:id="@+id/water_temperature_text_view"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="Water Temperature: N/A"         android:textAppearance="?android:textAppearanceMedium" />      <Button         android:id="@+id/power_on_button"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="Power On" />      <Button         android:id="@+id/power_off_button"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="Power Off" />  </LinearLayout>

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

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

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

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


ссылка на оригинал статьи https://habr.com/ru/articles/768004/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *