IA para developers. Apaixonamo-nos?
Publicado o
Se começou a ler este post atraído pelo seu título, talvez fique desapontado. Não encontrará aqui uma história de amor entre humanos e IAs, nem sequer uma narração habitual. São simplesmente algumas notas, com certa estruturação, sobre a minha visão do estado atual do desenvolvimento de software com e para inteligência artificial.
Com "com" refiro-me a escrever código com a ajuda da IA. E com "para", a desenvolver software específico com IA integrada.
Vias para desenvolver com/para IA
Atualmente existem 5:
- Não usar IA
- Chats
- Assistentes de código
- Assistentes de código com agentes IA
- Desenvolvimento de agentes próprios
Não usar IA
Compreendo esta postura, sobretudo se és Sénior e além disso estás um pouco farto/a de toda a conversa que se está a dar sobre o tema. Reconheço que na IA há muito de hype (dá uma oportunidade ao artigo, é sempre bom ter algum vento entre tanto fumo 😉), mas vale a pena usá-la, nem que seja para evitares dar duzentas voltas pelo Stack Overflow para solucionar um erro que te está a bloquear ou evitar ter de ler toda a documentação de uma nova API para desenvolver algo simples.
Chats
ChatGPT, DeepSeek, Gemini, Claude, etc.
São o tipo de ferramenta mais utilizado. Tanto por antiguidade como por acessibilidade, já que todos os modelos têm versões gratuitas através do navegador ou App.
O tipo de interação com a IA é conversacional: fazemos perguntas e obtemos respostas. Mas a desconexão do chat com os nossos ficheiros locais obriga-nos a andar a mover o código de um lado para o outro.
Nos chats, proporcionar o contexto adequado é fundamental. Dado que o seu conhecimento é vastíssimo, para obter respostas precisas sobre uma linguagem de programação específica, é necessário delimitar e definir claramente o âmbito da consulta. Para isto usamos prompts com:
- Papel
- Experiência
- Staff técnico
- Técnicas de prompting como:
- Chain-of-Thought
- Knowledge Generation
Além disso, os chats evoluíram, incorporando a possibilidade de adicionar contexto extra através do carregamento de ficheiros a partir do teu local ou até diretamente de repositórios do GitHub, como no caso do Claude.
Assistentes de código
GitHub Copilot, Gemini Code Assist, V0, etc.
O seu uso não está tão generalizado. Por serem mais recentes que os chats e porque as suas versões gratuitas só duram alguns dias de teste. Embora esta situação pareça estar a mudar, por exemplo, a Google oferece de forma gratuita o seu Gemini Code Assist para uso individual.
Além de poder conversar com a IA, os assistentes oferecem sugestões de código sobre o ficheiro que estamos a editar. Ao contrário dos Chats, aqui não temos de andar a copiar e colar código.
Dar-lhe contexto não é tão importante. O seu conhecimento está limitado ao desenvolvimento de código e lê o ficheiro que temos aberto, o que lhe permite conhecer a linguagem que estamos a usar.
Na altura de realizar consultas podem-se adicionar ficheiros ou linhas específicas dentro de um ficheiro, mas os assistentes não têm o contexto de todos os ficheiros de um projeto.
Assistentes de código com agentes IA
Cursor, Pythagora.ai, CodeGPT, e proximamente GitHub Copilot Agent Mode (se tens uma licença do GitHub Copilot e queres experimentá-lo, inscreve-te na lista de espera, talvez tenha sido sorte, mas a mim deram-me acesso em menos de 24h).
Além da conversação e das sugestões de código, este tipo de assistentes inclui Agentes IA.
Enquanto que para os assistentes de código tradicionais o contexto não era tão importante, com o uso de agentes volta a ser imprescindível, sobretudo se vamos construir software de raiz. Por isso, nada de deixar de lado a engenharia de prompt, e ainda bem porque considero que é uma das partes mais divertidas do trabalho com IAs!
Ao contrário dos assistentes "tradicionais", os agentes têm o contexto de todos os ficheiros de um projeto, incluindo as suas relações (como imports de funções). Além disso, são capazes de:
- Criar e modificar ficheiros. Sempre pendente da tua aprovação final
- Fazer uso do terminal. Vê-lo nas primeiras vezes causa alguma impressão 😅
- Criar ramos e fazer commits. As fusões ficam a cargo de um mamífero bípede.
- Trabalhar em paralelo contigo. Sim, podes rever o código da conexão a uma API enquanto ele desenvolve os 5 novos componentes que lhe pediste 😳
Desenvolvimento de agentes próprios
Esta via é a mais diferente, já que a sua verdadeira função não é ajudar-nos a desenvolver código, mas criar software com IA integrada.
Existem várias frameworks (principalmente de Python) que facilitam o desenvolvimento do código, a criação de agentes e a integração de LLMs. Entre as mais usadas estão LlamaIndex e Crew AI.
Em teoria, poderíamos desenvolver ferramentas próprias para a criação de código. No entanto, a minha opinião é que, a menos que procures uma solução muito específica, construir um agente de assistência não compensa o esforço. A razão é simples: requer desenvolver múltiplos componentes de raiz que no caso dos Assistentes como Cursor ou Pythagora já vêm incluídos:
- Ferramentas para ler o código de um repositório
- RAG (Retrieval-Augmented Generation) para dar contexto ao LLM:
- Base de dados vetorial com o código do repositório
- Retrievers para fazer consultas à base de dados e devolver resultados ao LLM
- Agentes e tarefas
- Ferramentas para escrever código
- Outros componentes técnicos
No entanto, creio que a potência desta via está em que podemos incorporar IA de forma relativamente simples no nosso software e desenvolver ferramentas IA próprias sem depender das oferecidas (e cobradas) por terceiros. Embora por agora não possamos livrar-nos completamente de pagar pelas consultas às APIs dos modelos que usemos nos nossos desenvolvimentos. Uma alternativa às APIs, sobretudo se não precisas de grande profundidade de raciocínio, é usar modelos em local, mas essa é uma história para abordar noutro post 😊
Algumas reflexões finais
Acredito que o uso dos chats não vai desaparecer. Ficar insatisfeito com a proposta do assistente, preferir contrastar a resposta com outros modelos, ou aprender sobre uma nova linguagem enquanto vais no comboio, são situações em que recorrer a estas ferramentas continuará a ser uma boa opção. Por isso, se vires uma pessoa a fazer perguntas ao seu telemóvel sobre Redux enquanto pega num pacote de leite no supermercado, dá-lhe uma oportunidade, talvez não esteja completamente louca e simplesmente pretenda esclarecer essa dúvida que trouxe do trabalho usando a interface de voz do ChatGPT.
Creio que todos os assistentes de código vão acabar por incluir agentes e que se tornarão o padrão de trabalho para programadores num futuro próximo. Também acredito que a forma de trabalhar vai mudar radicalmente com eles, embora não tenha ideia de como será a nossa profissão depois da transformação.
Acredito que vale a pena aventurar-se na criação de software com IA integrada. Começar é acessível, com uma curva de aprendizagem suave. Uma parte importante da nossa profissão vai orientar-se para aí. E fundamentalmente porque está tudo por fazer, o que supõe muita diversão!
Então, deixamo-nos arrastar pela loucura generalizada e apaixonamo-nos? Bem, se algo aprendemos com Theodore é que apaixonar-se por uma IA não é um bom negócio, por isso é melhor explorarmos estas novas ferramentas com calma, aprendermos a usá-las (e a desfrutá-las) e vermos o que resta quando se dissipar toda esta aparente paixão. Porque o que é certo é que durante muito tempo, por detrás de cada linha de código continuará a estar o critério humano.