ChatGPT и кодинг для НЕпрограммиста

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Дальше чем Hello World! на Python у меня так и не получилось продвинуться... Хочется творить, создавать что-то полезное, но все, более продвинутые коллеги вокруг утверждают, что раньше чем через год активных проб и ошибок ничего путного из-под моей клавиатуры не выйдет.

Эта статья для тех, кто думает, что не сможет и поэтому даже не пробует.

"Если долго сидеть на берегу реки, то можно увидеть как мимо проплывёт труп твоего врага" (Шон Коннери, фильм "Восходящее солнце", 1993).

Вуаля, GPT-4 (ChatGPT или GPT кому как нравится) доступен через bing.com/new (потребуется учетная запись в Microsoft и, возможно, немного подождать, зато, никакого гемора с VPN и переполнением очереди в chat.openai.com/chat).

Задача

Проба пера была на простеньком скрипте для Google Docs (тут), теперь проблема следующая - при написании длинного текста в переводчике, ты не знаешь, насколько результат (переведенный текст) отражает изначально заложенную мысль. Чтобы случайно не ругнуться матом, например, во Вьетнаме, я всегда переводил результат перевода обратно с вьетнамского на русский. Соответственно, если в тексте попадалась ошибка, приходилось переписывать предложение на русском, переводить на вьетнамский и опять делать проверку. Все известные мне переводчики не обладают функцией мгновенного обратного перевода, значит, придётся его сделать.

Далее привожу диалог с GPT практически без купюр (мои запросы здесь оформлены как цитаты, ответы GPT - как код), во время диалога код был существенно доработан, финальная версия в конце статьи!

Глава первая. Начало

создай код для интерент страницы переводчика, используя инструкции https://cloud.yandex.ru/docs/translate

<html>
<head>
    <title>Переводчик</title>
</head>
<body>
    <h1>Переводчик</h1>
    <form action="translate.php" method="post">
        <p>Введите текст для перевода:</p>
        <textarea name="text" rows="10" cols="50"></textarea>
        <p>Выберите язык перевода:</p>
        <select name="language">
            <option value="en-ru">Английский - Русский</option>
            <option value="ru-en">Русский - Английский</option>
            <option value="fr-ru">Французский - Русский</option>
            <option value="ru-fr">Русский - Французский</option>
            <option value="de-ru">Немецкий - Русский</option>
            <option value="ru-de">Русский - Немецкий</option>
        </select>
        <p><input type="submit" value="Перевести"></p>
    </form>
</body>
</html>
<?php
// Получаем текст и язык перевода из формы
$text = $_POST['text'];
$language = $_POST['language'];

// Проверяем, что текст не пустой
if ($text == "") {
    echo "Пожалуйста, введите текст для перевода.";
    exit;
}

// Получаем IAM-токен и идентификатор каталога из файла config.php
require_once 'config.php';

// Формируем URL для запроса к API Яндекс.Переводчика
$url = 'https://translate.api.cloud.yandex.net/translate/v2/translate';

// Формируем заголовки для запроса
$headers = [
    'Content-Type: application/json',
    "Authorization: Bearer $IAM_TOKEN"
];

// Формируем данные для запроса
$post_data = [
    "targetLanguageCode" => $language,
    "texts" => [$text],
    "folderId" => $folder_id,
];

// Кодируем данные в формат JSON
$data_json = json_encode($post_data);

// Инициализируем cURL
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_json);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);

// Выполняем запрос и получаем ответ
$result = curl_exec($curl);

// Закрываем cURL
curl_close($curl);

// Декодируем ответ из формата JSON
$result_json = json_decode($result, true);

// Проверяем, что ответ содержит переведенный текст
if (isset($result_json['translations'][0]['text'])) {
    // Выводим переведенный текст на экран
    echo "<h1>Перевод</h1>";
    echo "<p>" . $result_json['translations'][0]['text'] . "</p>";
} else {
    // Выводим сообщение об ошибке
    echo "<h1>Ошибка</h1>";
    echo "<p>" . $result_json['message'] . "</p>";
}
?>

Как я понял, нужно создать два файла, один из которых в формате HTML, а второй в формате PHP. Как я откуда-то помню, первый HTML-файл должен называться index.html, а название PHP-файла читаем в HTML-коде в 7 строке. Код ссылается на некий файл config.php. Как он может выглядеть, я представления не имею, поэтому, спросим об этом GPT.

создай пример файла config.php

<?php
// Замените эти значения на свои
$IAM_TOKEN = '<IAM-токен>';
$folder_id = '<идентификатор каталога>';
?>

Глава следующая. Перипетия с авторизацией

Собственно вот тут https://cloud.yandex.ru/docs/translate/operations/translate Яндексом подробно описано как получать токены и даже есть примеры для CLI (Интерфейс командной строки), Python и PHP. Сложность в том, что не понятно по какому пути нужно пойти, чтобы было быстро просто и без всяких там интерпретаторов, виртуальных машин и вот этого всего. Я хотел отправить код с HTML-страницы вместе с API-ключом, но нет же...

Сразу после получения IAM-токена, получите API-ключ (Яндекс предупреждает, что это менее секьюрно, зато не нужно настраивать автоматическое обновление IAM-токена каждые 12 часов) тут https://cloud.yandex.ru/docs/iam/operations/api-key/create. Далее меняем строку 21 в файле translate.php "Authorization: Bearer $IAM_TOKEN"на "Authorization: Api-Key <API-ключ>" или ссылку на него в соседнем файле $API_key.

Глава еще одна. Кодировка

текст на странице выводится в таком виде "Петеводчик" как поправить?

Тут GPT выдал 4 варианта, как поправить, но лучший я нашел сам на stackoverflow и добавил его в HTML-файл после тэга <head> (подсказка была в самом редакторе файлов).

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

Глава об ошибочном понимании ИИ существующей действительности

На самом деле это уже вторая попытка сделать переводчик на сайте, первая с полным функционалом была написана по старым инструкциям Яндекса, поэтому в данной версии хотелось просто убедиться, что API-shmAPI работает... Оно так-то работает, но выдаёт ошибку при исполнении кода

при выполнении кода, выводится "unsupported target_language_code: en-ru" как исправить?

Далее небольшой спор с ИИ, привожу для понимания его несовершенства (использует старые инструкции) и демонстрации пути обхода (спойлер - читаем инструкцию на Яндексе, делаем как там написано).

Возможно, проблема в том, что вы используете неправильный код языка для параметра target_language_code. Вы должны использовать пару кодов языков ( "откуда" - "куда"), разделенных дефисом. Например, en-ru означает перевод с английского на русский. Вы также можете использовать только код целевого языка (например, ru). В этом случае сервис попытается определить исходный язык автоматически1.
Чтобы исправить ошибку, вы можете попробовать следующее:
Проверьте, что вы указали правильный код языка в параметре target_language_code. Вы можете получить список поддерживаемых языков с помощью метода getLangs2.
Проверьте, что вы указали правильный ключ API в параметре key. Вы можете получить бесплатный ключ API на сайте Яндекс.Облака1.
Проверьте, что вы указали правильный идентификатор каталога в параметре folderId. Вы можете найти его в своем личном кабинете1.

что нужно исправить в коде, если следующий пример считать верным? далее код с вкладки PHP на странице https://cloud.yandex.ru/docs/translate/operations/translate

В коде не нужно ничего исправлять, если следующий пример считать верным. 
Этот код отправляет запрос к API Яндекс.Переводчика и получает ответ в формате JSON. 
В ответе должен быть перевод слов "Hello" и "World" с английского на русский язык. 
Пример ответа:
{
  "translations": [
    {
      "text": "Привет",
      "detectedLanguageCode": "en"
    },
    {
      "text": "Мир",
      "detectedLanguageCode": "en"
    }
  ]
}

targetLanguageCode указывается не парой языков, например, en-ru, а кодом одного языка, например ru

Нет, targetLanguageCode может указываться как парой языков, так и кодом одного языка. 
Если вы указываете пару языков, например en-ru, то вы задаете направление перевода с английского на русский. 
Если вы указываете код одного языка, например ru, то вы задаете целевой язык перевода, а исходный язык будет определен автоматически.

почему тогда сайт выдаёт "unsupported target_language_code: ru-en"?

Возможно, сайт выдает эту ошибку, потому что вы указываете код языка в неправильном формате. 
Вы должны использовать дефис (-), а не тире (–) для разделения кодов языков. 
Например, en-ru, а не en–ru. Также убедитесь, что вы используете правильные коды языков. 
Вы можете получить список поддерживаемых языков с помощью метода getLangs1.

<К сожалению, для этой беседы достигнуто ограничение.> 
<Нажмите кнопку "метла", чтобы очистить это и продолжить общение.>

Да, у Bing тоже есть свои недостатки (максимум 20 запросов на один диалог), пришлось самому догадаться заменить ru-en на ru, а en-ru - на en. Невеликое достижение, но после этого всё заработало и я "...почил в день седьмой от всех дел Своих, которые делал" (Быт. 2:2).

Эпилог

Вашему вниманию предлагаются финальные версии файлов, которые нужно разместить в отдельной папке (поддомене) вашего сайта. Хоcтинг сайта, видимо, должен поддерживать PHP, но это не точно. Кстати, все комментарии тоже дело рук GPT.

Файл index.html

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    <title>Переводчик</title>
</head>
<body>
    <h1>Переводчик Yandex</h1>
    <form action="translate.php" method="post">
        <p>Введите текст для перевода:</p>
        <textarea name="text" rows="1" cols="50"></textarea>
        <p>Выберите язык перевода:</p>
        <select name="language">
            <option value="en">en</option>
            <option value="ru">ru</option>
        </select>
        <p><input type="submit" value="Перевести"></p>
    </form>
</body>
</html>

Файл config.php

<?php
// Замените эти значения на свои
$API_key = 'AQVNw5-----------------------EiFWg';
$folder_id = 'b1go---------l4ps';
?>

Файл translate.php

<?php
// Получаем текст и язык перевода из формы
$text = $_POST['text'];
$language = $_POST['language'];

// Проверяем, что текст не пустой
if ($text == "") {
    echo "Пожалуйста, введите текст для перевода.";
    exit;
}

// Получаем API-key и идентификатор каталога из файла config.php
require_once 'config.php';

// Формируем URL для запроса к API Яндекс.Переводчика
$url = 'https://translate.api.cloud.yandex.net/translate/v2/translate';

// Формируем заголовки для запроса
$headers = [
    'Content-Type: application/json',
    "Authorization: Api-Key $API_key"
];

// Формируем данные для запроса
$post_data = [
    "targetLanguageCode" => $language,
    "texts" => [$text],
    "folderId" => $folder_id,
];

// Кодируем данные в формат JSON
$data_json = json_encode($post_data);

// Инициализируем cURL
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_json);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);

// Выполняем запрос и получаем ответ
$result = curl_exec($curl);

// Закрываем cURL
curl_close($curl);

// Декодируем ответ из формата JSON
$result_json = json_decode($result, true);

// Проверяем, что ответ содержит переведенный текст
if (isset($result_json['translations'][0]['text'])) {
    // Выводим переведенный текст на экран
    echo "<h1>Перевод</h1>";
    echo "<p>" . $result_json['translations'][0]['text'] . "</p>";
} else {
    // Выводим сообщение об ошибке
    echo "<h1>Ошибка</h1>";
    echo "<p>" . $result_json['message'] . "</p>";
}
?>

Визуализация результата

Можно ввести текст в окошко и получить перевод после нажатия на кнопку на новой странице
Можно ввести текст в окошко и получить перевод после нажатия на кнопку на новой странице
Результат перевода
Результат перевода

Планы на будущее

  • сделать перевод после нажатия кнопки пробел или enter

  • получить результат перевода на экране ввода исходного текста

  • добавить окошко с обратным переводом на русский

  • добавить три окошка справа: текст на английском, перевод на русский, обратный перевод на английский


Спасибо за внимание" Следите за обновлениями!

Пробуйте что‑то своё! GPT поможет.

Источник: https://habr.com/ru/articles/727602/


Интересные статьи

Интересные статьи

Привет, друзья! Сегодня я хочу рассказать вам о том, как использовать промты в ChatGPT для создания программного кода на Python. Если вы работаете с Python или интересуетесь программированием, то вы, ...
Всем привет! На связи ИТ-команда подразделения ДОМ.РФ Земли. Мы занимаемся автоматизацией вовлечения в оборот неиспользуемых или используемых не по назначению федеральных земельных участков и объектов...
Недавно я решил проверить это, попросив у Искусственного интеллекта (ИИ) пошаговые инструкции по инвестированию в разные темы. В частности, я попросил инструкции по инвестированию в биткойн, в детей и...
Задача - сделать AMP версию всего сайта на 1С-Битрикс, чтобы содержание AMP страниц всегда соответствовало оригинальным и изменялось при изменении оригинальных.
Основанная в 1998 году компания «Битрикс» заявила о себе в 2001 году, запустив первый в России интернет-магазин программного обеспечения Softkey.ru.