Um panorama sobre Inteligência Artificial Generativas para devs
Entendo os desafios e as opções de ferramentas
Me siga no X | Me siga no LinkedIn | Apoie a Newsletter | Solicite uma consultoria
A Inteligência Artificial Generativa (do Inglês, Generative Artificial Intelligence, ou simplesmente “GenAI”) é um sub-ramo da Inteligência Artificial que utiliza de técnica como GANs ou Transformers para treinar modelos de aprendizado de máquina em grandes conjuntos de dados. O objetivo é aprender padrões nos dados de treinamento, a fim de serem capazes de gerar dados altamente realísticos.
Diversos produtos que utilizam de técnicas de GenAI —como o Midjourney, ChatGPT e CoPilot— ganharam rapidamente milhões de usuários. O ChatGPT, por exemplo, levou somente dois meses para alcançar 100 milhões de usuários. Como comparação, a internet demorou cerca de 80 meses para ter seus primeiros 100 milhões de usuários. Parte deste destaque está relacionado a capacidade em gerar imagens, textos e código de alta qualidade.
Dados seus desempenhos em diferentes atividades, pesquisadores e profissionais das industrias em explorado como estas ferramentas podem acelerar a produtividade de times de desenvolvimento de software. Por exemplo, por experiência, percebemos que ferramentas de GenAIs podem melhorar a qualidade do processo de desenvolvimento, 1) ajudando a criar testes a partir de requisitos, 2) detalhando a descrição de requisitos, ou como são mais comumente conhecidos 3) gerando código para uma funcionalidade.
Por outro lado, GenAI pode criar novos riscos uma vez que seus resultados não são nem determinístico (ou seja, pequenas variações nos dados de entrada ou nas condições do modelo podem levar a saídas diferentes) nem explicáveis (ou seja, é difícil compreender como exatamente o modelo chegou a uma determinada saída ou decisão). Estudos recentes indicam que uso de ferramentas como Co-Pilot pode invariavelmente gerar código com bugs, ou testes de baixíssima cobertura.
Entender as razões para esse comportamento ainda é um desafio, devido aos processos pelos quais um modelo de IA chega a uma determinada decisão. Embora saibamos algumas das razões pelas quais modelos alucinam, estes modelos são tão complexos, com milhões ou até bilhões de parâmetros, que a relação entre a entrada e a saída é dificilmente compreendida de forma direta.
Apesar destas limitações, é inegável o alcanço e benefícios de GenAIs. Neste post, vamos abordar, de maneira superficial:
Qual a diferença de ferramentas de GenAI para ferramentas “tradicionais”?
Qual a importância da engenharia de prompt?
Quais são as ferramentas de GenAI para dev?
Quais são os eventuais riscos dessa tecnologia?
Como o Co-Pilot se difere do StackOverflow?
Ao longo da última década, utilizar o Google e o StackOverflow como ferramenta para busca de código se tornou uma tarefa corriqueira da pessoa desenvolvedora, uma vez que estes engenhos de busca se tornaram extremamente habilidosos em realizar indexação e busca em repositórios de código-fonte. A medida que estes mecanismos de busca se tornaram mais efetivos, estas ferramentas se tornaram parte do arsenal de pessoas desenvolvedoras.
No entanto, mecanismos de busca como Google e StackOverflow são intrinsecamente diferente dos mecanismos de busca de ferramentas de GenAI. Há pelo menos duas razões:
Primeiro, em vez de realizar uma consulta e devolver uma resposta, como o StackOverflow faz, o Co-Pilot realiza uma consulta, porém gera uma nova resposta para o usuário. Esta resposta gerada é baseada em vastos volumes de dados nos quais o modelo foi treinado; muito provavelmente, incluindo os dumps das perguntas e respostas do StackOverflow.
Segundo, pois estas ferramentas armazenam uma janela de contexto, que é um mecanismo que permite levar em consideração o histórico de uma conversa para melhorar a qualidade das respostas geradas. No StackOverflow, por outro lado, as respostas são geradas principalmente com base na pergunta atual, sem levar em conta o histórico do usuário.
Ao considerar um contexto mais amplo, GenAIs tem a capacidade de capturar nuances que podem ser relevantes para construir respostas mais personalizadas.
Há também um terceiro ponto que merece destaque na comparação entre ferramentas de GenAI com as ferramentas tradicionais de busca de código: a capacidade de explicar com bem mais detalhes o que se deseja ser respondido.
Engenharia de prompt
Como forma de gerar respostas cada vez mais eficazes, a GenAI é frequentemente alimentada de feedback humano. Por exemplo, quando uma resposta está adequada, podemos dar um like na resposta; ou um dislike, no caso contrário.
Chamamos esse tipo de processo de aprendizado por reforço, onde um agente de IA interage com um ambiente e recebe feedback em forma de recompensa (ou punição) com base nas suas ações. O objetivo do agente é aprender uma política de ação que maximize a recompensa cumulativa ao longo do tempo.
Na Era das GenAI, o uso de engenharia de prompt pode ser visto como uma forma de aprendizado por reforço. A engenharia de prompt refere-se ao processo de formular prompts (instruções ou perguntas) específicos para direcionar a respostas dos modelos de linguagem, buscando obter resultados desejados.
A escrita de um bom prompt é dito como um processo de engenharia, pois se faz necessário escolher as palavras, frases ou perguntas que sejam diretas, garantindo que o modelo entenda a tarefa ou objetivo desejado. Os modelos de linguagem são sensíveis à formulação dos prompts; Mudanças sutis nas instruções podem levar a respostas completamente diferentes. A experiência de uso de uma GenAI está diretamente relacionada a qualidade do prompt fornecido.
Ferramentas de GenAI para devs
Várias plataformas de GenAI têm sido disponibilizadas tanto por laboratórios de pesquisa, quanto por big techs, ajudando na adoção da tecnologia.
O GitHub Co-Pilot, talvez seja a ferramenta de maior destaque, em parte devido a sua introdução antecipada no mercado. O Co-Pilot funciona como extensão para IDEs como VS Code e JetBrains. Recentemente, a OpenAI introduziu o Copilot X, baseado no GPT-4, que além do autocompletar, também pode auxiliar em outras atividades de desenvolvimento. Para uso individual, o Co-Pilot precisa ser adquirido através uma licença de 10 USD mensal.
Além do Co-Pilot, existem ainda algumas ferramentas que estão ganhando notoriedade nesse nicho que está em constante mudança. Por exemplo:
Cody, da SourceGraph: “Cody answers code questions and writes code for you by reading your entire codebase and the code graph.” Ajuda a identificar code smells, busca código, geração de código, depuração etc. Gratuito para uso individual.
CodeWisperer, da Amazon: “generate code suggestions ranging from snippets to full functions in real time based on your comments and existing code.”, “Enhance code security: Scan your code to detect hard-to-find vulnerabilities, and get code suggestions to remediate them immediately”. Gratuito para uso individual.
Codeium, da Codeium: Treinamento para tarefas de autocomplete e busca de código. Da pra testar no browser, sem instalação. Gratuito para uso individual.
Ghostwriter, da Replit: “Ghostwriter is Replit’s suite of artificial intelligence features: Complete Code (our flagship feature), Generate Code, Transform Code, and Explain Code.” O Ghostwriter é integrado no Replit e, a princípio, não pode ser utilizado em outras plataformas. Gratuito para uso individual.
Tabby, da TabbyML: “Self-hosted AI coding assistant. An opensource / on-prem alternative to GitHub Copilot.” Talvez seja uma das poucas alternativas de um GenAI plug-and-play que é disponibilizado com uma licença permissiva (Apache 2.0)
As ferramentas acima se destacam em atividades que envolvam geração e/ou busca de código. No entanto, produtos de GenAIs também tem sido desenvolvidos para atividades que não necessariamente envolvam desenvolvimento de código, por exemplo:
Grok: Assistente virtual que ajuda na interpretação de dados do NewRelic. “New Relic Grok will analyze your telemetry data and software stack to give you the right insights, root causes, and resolutions.”
Sketch2Code: “convert a simple hand-drawn sketch into a working HTML boilerplate, skipping a vast stage in website building.”
PR-reviewer: “PR Review Bot automatically reviews open PRs in your GitHub repository, providing helpful feedback and even approving or requesting changes based on the analysis of the PR text and comments.”
StudioBot: “It's a conversational experience in Android Studio that helps you be more productive by answering Android development queries.”
Snyk-code: “analyzing code, spotting and highlighting errors, and providing legitimate information that reduces vulnerabilities.”
Riscos envolvidos com GenAI
Embora a GenAIs possam ajudar as pessoas desenvolvedores a desenvolver competências, existem alguns riscos que precisam ser considerados.
Por exemplo, versões anteriores do ChatGPT forneciam respostas que eram desumanas e racistas. Ademais, ferramentas como o ChatGPT podem ajudar a disseminar notícias falsas que não são rastreáveis nem explicáveis.
Depender de ferramentas de IA para tarefas em que não é possível determinar a resposta correta ou como verificá-la pode levar a complicações e armadilhas. Para pessoas desenvolvedoras, isso significa a necessidade de intervenção humanas, na revisão do que foi gerado.
Embora estudos recentes tem apontado que o GPT-4 na mitigação de alguns destes riscos, o usuário deve sempre verificar as respostas.
Os profissionais de software devem também estar cientes das implicações de privacidade e segurança. Ao usar uma ferramenta que analisa seu código, você pode não desejar que seu código saia dos limites de seus repositórios privados. Diferentes ferramentas de GenAI oferecem diferentes garantias quanto a privacidade.
Conclusão
O mundo da GenAI acelerará o desenvolvimento de software. No futuro breve, muitos papéis tradicionais, como o de pessoa programadora, deverão mudar.
As pessoas que desenvolvem software devem precisar desenvolver novas competências, como desenvolver melhores prompts para geração de código, alimentar modelos de aprendizado com novos dados para que suas respostas sejam mais pertinentes, além de explorar comportamentos que não são facilmente explicáveis.