IA para developers. Apaixonamo-nos?

Publicado o
Theodore a pensar

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:

  1. Não usar IA
  2. Chats
  3. Assistentes de código
  4. Assistentes de código com agentes IA
  5. 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.