Как ChatGPT обрабатывает скрипты Linux Bash
20 февраля 2023 г.В течение нескольких недель мы много слышали об искусственном интеллекте и обработке естественного языка, в частности о последней версии GPT OpenAI.
Недавний выпуск GPT 3.5 и особенно нового инструмента ChatGPT, безусловно, является огромным шагом вперед.
Возможно, вы читали о людях, которые просили ИИ составлять контракты на недвижимость и завещания и даже генерировать программный код. В этой статье инструмент рассматривается с несколько иной точки зрения.
Вы можете посмотреть видеоверсию этой статьи здесь, если хотите использовать ее в дополнение к обучению:
https://www.youtube.com/watch?v=GxJKuINwPSw%3F&embedable =правда
Эксперименты с ChatGPT и Bash Scripting
Я решил посмотреть, как ChatGPT обрабатывает сценарии Linux Bash. Но (предупреждение о спойлере!) по мере того, как я работал с предложениями инструмента — как с хорошим кодом, так и с плохим кодом — я начал понимать, что передо мной стояло еще более важное преимущество: возможность программировать в паре с чрезвычайно полезным партнером. .
ИИ в конечном итоге не смог решить мою проблему, но то, как это удалось, было просто захватывающим. И наблюдать, как ИИ ищет новые ответы, было просто безумием.
Первая попытка — ChatGPT пытается решить проблему
Итак, давайте посмотрим, как все это было. Вот примерное изначальная подсказка, которую я дал ИИ:
<цитата>Напишите мне сценарий Bash, который запрашивает URL-адрес видео YouTube, а затем использует программу yt-dlp для загрузки с этого URL-адреса. Затем скрипт должен изменить имя файла на "myvideo.mp4"
Через несколько секунд ChatGPT сообщил мне, что идет скрипт. Вот как выглядел этот код:
#!/bin/bash
# Prompt user for YouTube video URL
read -p "Enter YouTube video URL: " url
# Download video from YouTube using yt-dlp
yt-dlp $url
# Get the name of the downloaded video file
yt-dlp $url
# Change the downloaded video filename to "myvideo.mkv"
mv video-filename.mp4 myvideo.mp4
Искусственный интеллект явно знает, что такое скрипты Bash и как представлять код. Он даже проделал большую работу, комментируя каждую строку кода. ИИ знает, как правильно запросить у пользователя ввод, а затем импортировать введенную строку в переменную с именем url
.
Он также знает о программе yt-dlp и о том, как она работает, соответствующим образом передавая ей предоставленный URL-адрес. Затем он по крайней мере попытался переименовать загруженный видеофайл в myvideo.mp4. Но все как-то сломалось, когда предполагалось, что имя загружаемого файла будет video-filename.mp4. Упс.
Во всяком случае, ИИ услужливо показал мне, как создать скрипт из своего кода, а затем запустить его.
Вторая попытка — ChatGPT исправляется
Моя первая дополнительная подсказка указала на очевидную ошибку, и через несколько секунд ChatGPT признал, что это неправильно, и предложил улучшение.
<цитата>Вы правы, предоставленный мной сценарий не будет работать должным образом, поскольку он предполагает, что загруженное видео будет сохранено в файле с именем video-filename.mp4
. Однако это не гарантируется. Чтобы это исправить...
Удивительно, как ИИ полностью вовлечен в процесс. Он запоминает свой первый код, слушает и понимает мою жалобу и продумывает решение. Вот эта вторая попытка:
#!/bin/bash
# Prompt user for YouTube video URL
read -p "Enter YouTube video URL: " url
# Download video from YouTube using yt-dlp
yt-dlp $url
# Get the name of the downloaded video file
filename=$(basename $url)
# Change the downloaded video filename to "myvideo.mkv"
mv $filename.mp4 myvideo.mp4
Хорошо, теперь я вижу, как решение выглядело правильным. basename
— это инструмент Linux, который может удалять каталоги файловой системы и оставлять только фактическое имя файла.
Проблема в том, что переменная url
содержит не локальное имя файла, а интернет-адрес. Это определенно не сработает.
Третья попытка – повторная попытка ChatGPT
Поэтому я попробовал еще раз, объяснив, что этот инструмент не подходит для этой работы. И ChatGPT делает еще одну попытку.
#!/bin/bash
# Prompt user for YouTube video URL
read -p "Enter YouTube video URL: " url
# Extract the filename from the URL
filename=$(basename $url)
# Download the video using the yt-dlp tool and specify the filename
yt-dlp -o $filename $url
# Change the downloaded video filename to "myvideo.mkv"
mv $filename.mp4 myvideo.mp4
На этот раз он показывает, что ознакомился с документацией yt-dlp, предлагая использовать аргумент -o
, чтобы дать загружаемому видео имя, в сравнении с которым basename< /code> теперь должно работать. С каждой итерацией ИИ дает мне этот обновленный код для вырезания и вставки.
Конечно, это тоже не сработало. При следующей попытке я чувствую, что ИИ немного отчаялся.
Если сначала у вас не получится... По крайней мере, вы чему-то научитесь
Я пропущу следующую или две попытки, поскольку мы столкнулись с побочной проблемой: видео, поступающие с YouTube, не всегда имеют формат MP4, иногда это файлы MKV или даже WEBM. Эта неопределенность может испортить имена файлов, с которыми мы работаем, поэтому я попросил ChatGPT включить это в код.
#!/bin/bash
# Prompt user for YouTube video URL
read -p "Enter YouTube video URL: " url
# Extract the filename from the URL
filename=$(basename $url)
# Download the video using the yt-dlp tool and specify the filename
yt-dlp -F mp4 -O $filename $url
# Change the downloaded video filename to "myvideo.mkv"
mv $filename.mp4 myvideo.mp4
Когда я сообщил, что это тоже не сработает, ИИ начал путаться. Сначала он сказал мне, что параметр -F
ожидает допустимый формат видео, но этот «mp4» недействителен. Затем он дает мне допустимые варианты, включая "mp4".
Когда ничто из предложенного ИИ не сработало, он сдался, посоветовав мне убедиться, что yt-dlp действительно установлен на моей машине, и показав, как это сделать.
Я подумал, что это хорошее время, чтобы сдаться. Это была удивительно хорошая попытка, и, даже если она не решила проблему, она показала мне полезный синтаксис и заставила меня задуматься.
Кстати, если вам интересно, вот как будет выглядеть реально работающий скрипт.
#!/bin/bash
# Prompt user for YouTube video URL
read -p "Enter YouTube video URL: " url
# Download video from YouTube using yt-dlp
yt-dlp $url
# Get the name of the downloaded video file
original_filename=$(ls | awk '/mp4/ || /webm/ || /mkv/')
# Change the downloaded video filename to "myvideo.mkv"
mv "$original_filename" /home/ubuntu/vids/myvideo.mp4
Первые две строки кода соответствуют предложению ChatGPT. Но затем я выделяю имя файла, перечисляя все файлы в текущем каталоге и используя awk
для фильтрации только тех имен файлов, которые содержат mp4, webm или mkv. (Это предполагает, что в каталоге никогда не будет одновременно более одного видеофайла.)
Затем имя файла будет записано в переменную original_filename
. Затем я буду использовать эту переменную как часть команды move
для переименования файла myvideo.mp4
. Насколько я могу судить, это будет работать независимо от того, какой формат фактически отправлено.
Подведение итогов
Искусственный интеллект сегодня может быть не совсем готов к реальным задачам программирования, но я бы не стал ставить на то, что он появится там завтра... или где-то в следующем году.
А пока я настоятельно рекомендую использовать такие инструменты, как ChatGPT, всякий раз, когда вы сталкиваетесь со сложной задачей программирования.
Два ума (почти) всегда лучше, чем один.
Избранное изображение, созданное с помощью HackerNoon AI “ Робот с искусственным интеллектом устраивает вечеринку».
Помимо моего канала YouTube (на который вы можете подписаться), мой веб-сайт содержит ссылки на всевозможные технические достижения, доступные в виде статей, книг и курсов.
Также опубликовано здесь.
Оригинал