[Programação assistida por IA]

Recentemente tivemos uma explosão no uso de inteligência artificial (IA) com produtos como o ChatGPT, Github Copilot, Tabnine, e tantos outros. São ferramentas muito úteis e interessantes, mas não é tanto quanto a mídia diz.

Pense nessas ferramentas como uma maquina que prevê qual a próxima palavra é a mais adequada e coloca ela na sugestão e faz isso repetidamente em loop até atingir um número de palavras ou até a probabilidade de acerto cair abaixo de um valor aceitável, o que vier primeiro.

Isso causa alguns problemas, por exemplo, essas ferramentas não lidam bem com lógica formal, por exemplo, se você pedir algo como crie um mux http sem usar o gorilla mux é quase certeza que a ferramenta usará o gorilla mux. Da mesma forma elas não lidam bem com matemática, o algorítimo é focado em conversação e não faz contas. 

Entretanto, tenho usado algumas dessas ferramentas desde o lançamento tanto diretamente como na forma de API, integrando com meus próprios projetos e mesmo com essas limitações o resultado tem sido bem ok. Sobretudo em tarefas repetitivas.

Segurança

Ainda estamos descobrindo os problemas de segurança que podem ser causados por esse tipo de ferramenta, no mínimo é tão ruim como a telemetria que já acontece com editores vários editores.

Basicamente tudo que você digita é enviado para o serviço e eles usam o seu código para melhorar o produto, retroalimentar o modelo e melhorar os resultados, desde sabendo o código que você aceitou ou rejeitou, as suas edições e todo seu código.

Então algumas regras antigas se aplicam muito bem aqui:

Também está havendo um esforço para criar filtros de segurança impedindo que informações sensíveis vazem.

Por enquanto, desde que tomado os devidos cuidados, minha opinião é que o nível de segurança esta aceitável.  Muitos dos meus colegas não tem a mesma opinião, cabe a você decidir se vale o risco ou não.

Confiabilidade nos resultados

Para trechos curtos e partes mais previsíveis a confiabilidade nas sugestões está ótimo, mas longe de perfeita, você precisa supervisionar de perto o que esta sendo sugerido. A piada interna que cunhamos é que é como ter um estagiário muito inexperiente, mas que está muito empolgado.

O problema das licenças

Os produtos de IA disponíveis foram treinados com tudo que os desenvolvedores conseguiram colocar a mão, isso inclui GitHub, Stack Overflow, etc.

O problema é que o não foi dada atenção as licenças de software, então você pode acabar acidentalmente incluindo código GPL no seu programa porque a ferramenta sugeriu o trecho de código e você não faz ideia de onde ele se originou.

Não vejo como um problema copiar pequenos trechos de código, em parte porque acredito que código nunca devia ter uma licença nem patente. No dia a dia ninguém se importa com copiar um trecho de código do Stack Overflow, e usar no seu projeto.

Assim como na questão de segurança, essa é uma questão em aberto, depende do que você acredita e dos riscos em que está disposto a correr.

Custos

No momento que estou escrevendo isso o GitHub Copilot custa $100 USD/ano. Na minha opinião ele se pagou no primeiro mês, me poupou bastante tempo.

A API do ChatGPT tem um custo variável dependendo do tamanho do prompt e do modelo escolhido e como o valor pode variar bastante dependendo do que você quer criar não tem muito como eu listar os valores aqui. Entretanto, nos meus testes o custo foi bem acessível desde que você não tenha um volume muito grande de tokens.

Escrevendo bons prompts

Escrever um bom prompt tem um impacto muito grande na qualidade da resposta gerada pela IA, aqui vão algumas dicas.

Desativando o GitHub Copilot

Pode ser útil desativar o GitHub Copilot de vez em quanto, às vezes você sabe exatamente o que quer escrever e não precisa de ajuda e as sugestões da IA são apenas uma distração. Quando isso ocorre é bom poder desabilitar momentaneamente a IA. No vim/nvim isso pode ser feito com o comando “:Copilot disable” e “:Copilot enable” ou no VSC você pode usar clicar no ícone do Copilot no canto inferior direito da tela.

Para facilitar e digitar um pouco menos criei esses dois comandos que uso no nvim.

cnoreabbrev dcp Copilot disable
cnoreabbrev ecp Copilot enable

Alem do editor

Estão surgindo outras ferramentas para ajudar em outras tarefas do dia a dia dos desenvolvedores alem da escrita de códiog em si. Algumas mais interessantes que outras.

Na linha de comando

No momento que estou escrevendo esse texto o GitHub Copilot para linha de comando está em uma faze experimental, eu particularmente não gostei da interface e os resultados são abaixo do esperado.

Preenchendo o commit

É fácil e divertido estender o git, então, não é de se admirar que temos várias ferramentas para ajudar com a preencher commits. Eu mesmo criei a minha, o git-hint que ainda é apenas um experimento com problemas com o tamanho do prompt.

Chat da comunidade

Uma das experiências mais divertidas com a API do OpenAI, foi criar um bot para o canal do Telegram do Grupo de estudos de Go.

Eu queria que o bot não respondesse a um comando especifico, no lugar disso ele leria todas as mensagens e quando detectasse que a mensagem era uma pergunta ele responderia.

O resultado foi ótimo, mas tive problemas com tamanho do prompt e com o volume de mensagens crescendo o custo cresceu além do que eu estava disposto a gastar com experimentação. Planejo retomar esse experimento. O código pode ser visto no repo bot-army

Faça você mesmo

As pessoas usam IA a algum tempo, mas se esquecem disso conforme ela vai se tornando comum e esperada no dia a dia. Por exemplo, um filtro de spam nada mais é que um classificador (algoritmo de Bayes) treinada para distinguir entre e-mails bons e ruins, você pode usar o mesmo algorítimo para classificar qualquer coisa. E claro que isso é só o começo, tem uma área enorme para se divertir.


Cesar Gimenes