Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Lập trình ghép nối với ChatGPT:Đánh giá mức độ thành thạo Bash của GPT‑3.5

Lập trình ghép nối với ChatGPT:Đánh giá mức độ thành thạo Bash của GPT‑3.5

Chúng tôi đã nghe rất nhiều về trí tuệ nhân tạo và xử lý ngôn ngữ tự nhiên – đặc biệt là về phiên bản GPT mới nhất của OpenAI – trong nhiều tuần.

Việc phát hành GPT 3.5 gần đây và đặc biệt là công cụ ChatGPT rất mới, chắc chắn là một bước tiến vượt bậc.

Bạn có thể đã đọc về việc mọi người yêu cầu AI soạn thảo các hợp đồng và di chúc bất động sản, thậm chí tạo ra mã lập trình. Bài viết này tiếp cận công cụ này từ một góc nhìn hơi khác.

Bạn có thể xem phiên bản video của bài viết này tại đây nếu muốn sử dụng nó để bổ sung cho việc học của mình:

Thử nghiệm ChatGPT và Bash Scripting

Tôi quyết định xem ChatGPT xử lý tập lệnh Linux Bash như thế nào. Nhưng (cảnh báo tiết lộ nội dung!) khi tôi xem xét các đề xuất của công cụ - cả mã tốt và mã xấu - tôi bắt đầu nhận ra rằng có một lợi ích thậm chí còn mạnh mẽ hơn đang nhìn thẳng vào tôi:cơ hội lập trình ghép nối với một đối tác cực kỳ hữu ích.

AI cuối cùng đã không giải quyết được vấn đề của tôi, nhưng cách nó thất bại là hoàn toàn hấp dẫn. Và việc xem AI tìm kiếm câu trả lời mới thực sự là điều điên rồ.

Lần thử đầu tiên – ChatGPT cố gắng giải quyết vấn đề

Vì vậy, hãy xem mọi chuyện diễn ra như thế nào. Đây ít nhiều là lời nhắc ban đầu mà tôi đã cung cấp cho AI:

Viết cho tôi một tập lệnh Bash nhắc URL của video YouTube rồi sử dụng chương trình yt-dlp để tải xuống từ URL đó. Sau đó, tập lệnh sẽ thay đổi tên tệp thành "myvideo.mp4"

Sau vài giây, ChatGPT thông báo với tôi rằng sắp có kịch bản. Mã đó trông như thế này:

#!/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

AI rõ ràng biết tập lệnh Bash là gì và cách trình bày mã. Nó thậm chí còn làm rất tốt việc bình luận từng dòng mã. AI biết cách nhắc người dùng nhập dữ liệu đúng cách và sau đó nhập chuỗi đầu vào vào một biến có tên url .

Nó cũng biết về chương trình yt-dlp và cách thức hoạt động của nó, cung cấp cho nó URL đã được cung cấp một cách thích hợp. Sau đó, ít nhất nó đã cố gắng đổi tên tệp video đã tải xuống thành myvideo.mp4. Nhưng mọi thứ đã tan vỡ khi người ta cho rằng tên tệp tải xuống sẽ là video-filename.mp4. Rất tiếc.

Dù sao đi nữa, AI đã chỉ cho tôi cách tạo tập lệnh từ mã của nó và sau đó chạy nó một cách hữu ích.

Lần thử thứ hai – ChatGPT tự sửa lỗi

Lời nhắc tiếp theo đầu tiên của tôi đã chỉ ra sai sót rõ ràng và sau vài giây, ChatGPT đã thừa nhận điều đó sai và đưa ra cải tiến.

Bạn nói đúng, tập lệnh tôi cung cấp sẽ không hoạt động như mong đợi vì nó cho rằng video đã tải xuống sẽ được lưu vào một tệp có tên video-filename.mp4 . Tuy nhiên, điều này không được đảm bảo là trường hợp. Để khắc phục điều này...

Thật đáng kinh ngạc khi AI hoàn toàn tham gia vào quá trình ở đây. Nó ghi nhớ mã đầu tiên, lắng nghe và hiểu khiếu nại của tôi và suy nghĩ tìm giải pháp. Đây là lần thử thứ hai:

#!/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

Được rồi, tôi có thể thấy giải pháp này có vẻ đúng như thế nào. basename là một công cụ Linux có thể loại bỏ các thư mục hệ thống tệp và không để lại gì ngoài tên tệp thực tế.

Vấn đề là biến url không chứa tên tệp cục bộ mà chứa địa chỉ internet. Cái này chắc chắn sẽ không có tác dụng.

Lần thử thứ ba – ChatGPT thử lại

Vì vậy tôi đã thử lại và giải thích rằng đó không phải là công cụ phù hợp cho công việc. Và ChatGPT sẽ thử lại lần nữa.

#!/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

Lần này, nó cho thấy rằng nó đã tự làm quen với tài liệu yt-dlp, gợi ý rằng chúng tôi nên sử dụng -o đối số để đặt tên cho video tải xuống, theo đó basename bây giờ nên làm việc. Với mỗi lần lặp lại, AI sẽ cung cấp cho tôi mã cập nhật này để tôi có thể cắt và dán thoải mái.

Tất nhiên, điều đó cũng không có tác dụng. Với lần thử tiếp theo, tôi có cảm giác AI hơi tuyệt vọng.

Nếu lúc đầu bạn không thành công...Ít nhất bạn sẽ học được điều gì đó

Tôi sẽ bỏ qua một hoặc hai lần thử tiếp theo vì chúng tôi gặp phải một vấn đề phụ:Video đến từ YouTube không phải lúc nào cũng là MP4, đôi khi chúng là MKV hoặc thậm chí là WEBM. Sự không chắc chắn đó có thể gây rối với tên tệp mà chúng tôi đang làm việc, vì vậy tôi đã yêu cầu ChatGPT đưa điều đó vào mã.

#!/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

Khi tôi báo cáo rằng điều đó cũng không hoạt động, AI bắt đầu bối rối. Đầu tiên nó báo với tôi rằng -F tùy chọn mong đợi định dạng video hợp lệ nhưng "mp4" đó không hợp lệ. Sau đó, nó cung cấp cho tôi các tùy chọn hợp lệ, bao gồm cả "mp4".

Khi AI đề xuất không hoạt động, nó từ bỏ, khuyên tôi đảm bảo rằng yt-dlp thực sự đã được cài đặt trên máy của tôi và chỉ cho tôi cách thực hiện điều đó.

Tôi nghĩ đó là thời điểm tốt để từ bỏ. Đó là một nỗ lực đáng ngạc nhiên và ngay cả khi nó không giải quyết được vấn đề, nó vẫn cho tôi thấy một số cú pháp hữu ích và khiến tôi phải suy nghĩ.

Nhân tiện, trong trường hợp bạn quan tâm, đây là hình thức của một tập lệnh hoạt động thực sự.

#!/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

Hai dòng mã đầu tiên đúng như cách ChatGPT đề xuất. Nhưng sau đó tôi tách biệt tên tệp bằng cách liệt kê tất cả các tệp trong thư mục hiện tại và sử dụng awk để chỉ lọc tên tệp chứa mp4, webm hoặc mkv. (Điều này giả định rằng sẽ không bao giờ có nhiều hơn một tệp video trong thư mục cùng một lúc.)

Tên tệp sau đó sẽ được ghi vào original_filename biến. Sau đó tôi sẽ sử dụng biến đó như một phần của move lệnh đổi tên file myvideo.mp4 Theo như tôi có thể nói, điều đó sẽ hoạt động bất kể định dạng thực sự được gửi là gì.

Kết thúc

Trí tuệ nhân tạo có thể chưa hoàn toàn sẵn sàng cho các nhiệm vụ lập trình trong thế giới thực ngày hôm nay, nhưng tôi không muốn đánh cược rằng nó sẽ đạt được điều đó vào ngày mai... hoặc một thời điểm nào đó trong năm tới.

Tuy nhiên, trong thời gian chờ đợi, tôi thực sự khuyên bạn nên sử dụng các công cụ như ChatGPT bất cứ khi nào bạn gặp phải một nhiệm vụ lập trình đầy thử thách.

Hai tâm trí (gần như) luôn tốt hơn một.

Bên cạnh kênh YouTube của tôi (mà bạn có thể đăng ký), trang web của tôi liên kết đến tất cả các loại công nghệ tốt có sẵn dưới dạng bài viết, sách và khóa học.

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu