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 a coloca 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:
- Nunca use chaves reais no seu código, não as commit, etc. Aliás para coisas de trabalho é melhor nem mesmo ter acesso a nada, deixe as chaves de acesso com o pessoal de segurança.
- O mesmo cuidado vale para dados de cliente, sempre use um mock, nunca dados reais.
- Cuidado com o código se ele for realmente sigiloso. Hoje isso não é uma preocupação para mim já que o meu trabalho é muito interagindo com APIs e não tem nada de realmente sigiloso nisso, as APIs estão documentadas na internet e qualquer um pode acessá-las. Mas já teve época no início da minha carreira que eu trabalhava com alguns produtos onde as equações eram a alma do negócio e mantidas a sete chaves.
- Nesse caso eu não usaria nenhum dos produtos de IA, seria melhor escrever uma pequena biblioteca ou API sem usar nenhuma dessas ferramentas e o resto do seu sistema apenas consumir a biblioteca.
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.
- Quanto menos ambiguidade melhor, parece obvio, mas quando estamos conversando acidentalmente adicionamos várias ambiguidades que não são percebidas por nos.
- Escrever corretamente ajuda, nos meus testes tomar um pouco de cuidado com a gramática e ortografia geraram resultados ligeiramente melhores.
- Tente escrever as frases de forma positiva, “faça tal coisa” é melhor que “não faça tal coisa”, o motivo é a IA não entender logica formal. Podem ser necessários alguns testes antes de conseguir o resultado desejado.
- Você pode especificar coisas que quer no retorno, por exemplo, pode pedir para que “todos os trechos de código serem formatados com o markdown usado pelo Telegram”, ou para que se a pergunta não for relacionada a Go retornar apenas a string “—1234—”. Daí você pode interceptar esse resultado e tomar a ação adequada.
- Mantenha o tamanho do prompt sob controle, mensurar o prompt é complicado, o número de tokens é aproximadamente 3.5 para cada palavra em inglês e você tem um número de tokens bem limitado, se você passar um prompt muito grande para a API ela vai do OpenAI ele vai simplesmente retornar um erro.
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
Além do editor
Estão surgindo outras ferramentas para ajudar em outras tarefas do dia a dia dos desenvolvedores além da escrita de código 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.
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.
Faça você mesmo
As pessoas usam IA há 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.