Artigo original: Pair Programming with the ChatGPT AI – Does GPT-3.5 Understand Bash?

Temos ouvido muito sobre inteligência artificial e processamento de linguagem natural – em especial, sobre a versão mais recente do GPT da OpenAI – há semanas.

O recente lançamento do GPT 3.5 e, especificamente, da novíssima ferramenta ChatGPT, é definitivamente um grande avanço.

Você pode ter lido sobre pessoas que pedem à IA para redigir contratos e testamentos imobiliários ou, até mesmo, gerar código de programação. Este artigo aborda a ferramenta de uma perspectiva ligeiramente diferente.

Você pode assistir a uma versão em vídeo deste artigo aqui se quiser usá-lo para complementar seu aprendizado:

Experimentando com o ChatGPT e scripts do Bash

Decidi ver como o ChatGPT lida com scripts do Bash do Linux. No entanto, (alerta de spoiler!) enquanto trabalhava com as sugestões da ferramenta – código bom e código ruim – comecei a perceber que havia um benefício ainda mais poderoso diante de mim: uma oportunidade de programar em par com um parceiro eminentemente útil.

A IA acabou falhando em resolver meu problema, mas a maneira como falhou foi absolutamente fascinante. Observar a IA em busca de novas respostas foi absolutamente louco.

Primeira tentativa – o ChatGPT tenta resolver o problema

Então, vamos ver como tudo aconteceu. Aqui, mais ou menos, está o prompt inicial que forneci à IA:

Escreva para mim um script do Bash que solicite o URL de um vídeo do YouTube e, em seguida, use o programa yt-dlp para fazer o download desse URL. O script deve alterar o nome do arquivo para "meuvídeo.mp4"

Depois de alguns segundos, o ChatGPT me disse que um script estava chegando. Veja como ficou esse código:

#!/bin/bash

# Solicita ao usuário o URL do vídeo do YouTube
read -p "Insira o URL do vídeo do YouTube: " url

# Baixa o vídeo do YouTube usando yt-dlp
yt-dlp $url

# Obtém o nome do arquivo de vídeo baixado
yt-dlp $url

# Altera o nome de arquivo do vídeo baixado para "meuvídeo.mp4"
mv video-filename.mp4 meuvídeo.mp4

A IA, obviamente, sabe o que são scripts do Bash e como apresentar o código. Ela até fez um ótimo trabalho comentando cada linha de código. A IA sabe como solicitar corretamente a entrada do usuário e, em seguida, como importar a string de entrada para uma variável chamada url.

Ela também conhece o programa yt-dlp e como ele funciona, alimentando-o adequadamente com o URL fornecido. Em seguida, ela pelo menos tentou renomear o arquivo de vídeo baixado para meuvídeo.mp4. Mas tudo meio que quebrou quando presumiu que o nome do arquivo de download seria video-filename.mp4. Opa.

De qualquer jeito, a IA me mostrou como criar o script a partir de seu código e executá-lo.

Segunda tentativa – ChatGPT corrige a si próprio

Minha solicitação seguinte apontou o erro óbvio e, após alguns segundos, o ChatGPT admitiu que estava errado e ofereceu uma melhoria.

Você está certo, o script que forneci não funcionaria como esperado porque pressupõe que o vídeo baixado será salvo em um arquivo com o nome video-filename.mp4. No entanto, não é garantido que esse seja o caso. Para consertar isso...

É impressionante como a IA está completamente envolvida no processo aqui. Ela se lembra de seu primeiro código, ouve e entende minha reclamação e pensa em uma solução. Aqui está a segunda tentativa:

#!/bin/bash

# Solicita ao usuário o URL do vídeo do YouTube
read -p "Insira o URL do vídeo do YouTube: " url

# Obtém o nome do arquivo de vídeo baixado
yt-dlp $url

# Obtém o nome do arquivo de vídeo baixado
filename=$(basename $url)

# Altera o nome de arquivo do vídeo baixado para "meuvídeo.mp4"
mv $filename.mp4 meuvídeo.mp4

Ok. Consigo ver como a solução parecia certa. basename é uma ferramenta do Linux que pode remover os diretórios do sistema de arquivos e não deixar nada além do nome do arquivo real.

O problema é que a variável url não contém um nome de arquivo local, mas um endereço de internet. Isso, definitivamente, não vai funcionar.

Terceira tentativa – o ChatGPT tenta novamente

Então, tentei novamente, explicando como aquela não era a ferramenta certa para o trabalho. O ChatGPT tenta mais uma vez.

#!/bin/bash

# Solicita ao usuário o URL do vídeo do YouTube
read -p "Insira o URL do vídeo do YouTube: " url

# Extrai o nome do arquivo a partir do URL
filename=$(basename $url)

# Baixa o vídeo usando a ferramenta yt-dlp e especifica o nome de arquivo
yt-dlp -o $filename $url

# Altera o nome de arquivo de vídeo baixado para "meuvídeo.mp4"
mv $filename.mp4 meuvídeo.mp4

Desta vez, ele mostra que se familiarizou com a documentação do yt-dlp, sugerindo que usemos o argumento -o para dar um nome ao vídeo baixado, contra o qual basename deve funcionar agora. A cada iteração, a IA me fornece esse código atualizado para meu prazer de recortar e colar.

Claro, isso também não vai funcionar. Com a próxima tentativa, tenho a sensação de que a IA está um pouco desesperada.

Se, no começo, você não tiver sucesso... ao menos, aprenderá alguma coisa

Vou pular a próxima tentativa ou duas, pois encontramos um problema paralelo: os vídeos vindos do YouTube nem sempre são MP4. Às vezes, são MKVs ou até WEBMs. Essa incerteza pode atrapalhar os nomes dos arquivos com os quais estamos trabalhando. Por isso, pedi ao ChatGPT para incluir isso no código.

#!/bin/bash

# Solicita ao usuário o URL do vídeo do YouTube
read -p "Insira o URL do vídeo do YouTube: " url

# Extrai o nome do arquivo a partir do URL
filename=$(basename $url)

# Baixa o vídeo usando a ferramenta yt-dlp e especifica o nome de arquivo
yt-dlp -F mp4 -O $filename $url

# Altera o nome de arquivo de vídeo baixado para "meuvídeo.mp4"
mv $filename.mp4 meuvídeo.mp4

Quando relatei como isso também não funcionaria, a IA começou a ficar confusa. Primeiro, ela me disse que a opção -F esperava um formato de vídeo válido, mas que "mp4" não era válido. Então, me dá opções válidas, incluindo "mp4".

Quando nada sugerido pela IA funcionou, ela desistiu, aconselhando-me a garantir que o yt-dlp estivesse realmente instalado em minha máquina e me mostrando como fazer isso.

Achei que era um bom momento para desistir. Foi um esforço surpreendentemente bom e, mesmo que não resolvesse o problema, mostrou-me alguma sintaxe útil e me fez pensar.

A propósito, caso você esteja interessado, veja como seria um script de trabalho real.

#!/bin/bash

# Solicita ao usuário o URL do vídeo do YouTube
read -p "Insira o URL do vídeo do YouTube: " url

# Baixa o vídeo usando a ferramenta yt-dlp
yt-dlp $url

# Obtém o nome do arquivo de vídeo baixado
original_filename=$(ls | awk '/mp4/ || /webm/ || /mkv/')

# Altera o nome de arquivo do vídeo baixado para "meuvídeo.mp4"
mv "$original_filename" /home/ubuntu/vids/meuvídeo.mp4

As duas primeiras linhas de código são exatamente como o ChatGPT sugeriu. Em seguida, contudo, isolo o nome do arquivo listando todos os arquivos no diretório atual e usando awk para filtrar apenas nomes de arquivos contendo mp4, webm ou mkv. (Isso pressupõe que nunca haverá mais de um arquivo de vídeo no diretório por vez.)

O nome do arquivo será gravado na variável original_filename. Em seguida, usarei essa variável como parte de um comando mv para renomear o arquivo para meuvídeo.mp4. Pelo que sei, isso funcionará independentemente do formato enviado de fato.

Conclusão

A inteligência artificial pode não estar totalmente pronta para as tarefas de programação do mundo real de hoje, mas eu não apostaria no fato de que ela não conseguirá chegar lá amanhã... ou em algum momento do ano que vem.

Enquanto isso, eu recomendaria absolutamente o uso de ferramentas como o ChatGPT sempre que você se deparar com uma tarefa de programação desafiadora.

Duas mentes são (quase) sempre melhores que uma.

Além do canal do autor no YouTube (no qual você pode se inscrever), o site do autor contém links para todos os tipos de produtos tecnológicos disponíveis, como artigos, livros e cursos.