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

от автора

Дальше чем 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-шмапи работает… Оно так-то работает, но выдаёт ошибку при исполнении кода

при выполнении кода, выводится «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/


Комментарии

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

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