Изучаем веб-сервисы 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
#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 концепт интерфейса программы управления котлом:
Пожалуй, такого не нагуглишь. Для копирования, конечно, не годится, но как идея для дизайна — сойдёт.
Как видим, в общем и целом, некоторые сервисы позволяют комфортно работать как с ChatGPT, так и с Midjourney, так что можно пробовать их в деле. Тот же GPTunnel показывает очень неплохой результат.