目录
用 ChatGPT 和 Bash 脚本进行实验
第一次尝试——ChatGPT 试图解决这个问题
第二次尝试——ChatGPT 纠正了自己的错误
第三次尝试——ChatGPT 再次尝试
如果一开始你没有成功......至少你会学到一些东西
总结
在过去的几个星期,我们已经听到了很多关于人工智能和自然语言处理的消息——特别是关于 OpenAI 的最新版本 GPT。
最近发布的 GPT 3.5,特别是非常新的 ChatGPT 工具,绝对是一个巨大的飞跃。
你可能已经读到有人要求人工智能起草房地产合同和遗嘱,甚至生成编程代码。这篇文章从一个稍微不同的角度来探讨这个工具。
我决定看看 ChatGPT 是如何处理 Linux Bash 脚本的。但是(破坏者警报!)当我执行该工具的建议——包括好的代码和差的代码——我开始意识到有一个更强大的好处:有机会与一个非常有帮助的伙伴结对编程。
人工智能最终没能解决我的问题,但它失败的方式绝对是迷人的。看着人工智能寻找新的答案,绝对是疯狂的。
让我们看看这一切是如何发生的。以下内容,或多或少,是我提供给人工智能的最初提示:
给我写一个 Bash 脚本,要求输入一个 YouTube 视频的 URL,然后使用 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 承认了自己的错误,并提出了改进措施。
你是对的,我提供的脚本不会像预期的那样工作,因为它假定下载的视频将被保存到一个名为 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 又进行了一次尝试。
#!/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
现在应该对它起作用。每一次迭代,人工智能都会给我更新的代码,供我剪切和粘贴使用。
当然,这也是行不通的。在下一次尝试中,我感觉到人工智能有点绝望了。
我打算跳过接下来的一两次尝试,因为我们遇到了一个问题:来自 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 这样的工具。
两个头脑(几乎)总是比一个好。