Tecnologia além do código.
Régys Borges da Silveira
← Voltar para explorar os artigos

Rad IA: A Evolução do Assistente de IA para Delphi IDE (da v0.0.16 à v0.0.21)

Neste artigo 8 tópicos

Se você desenvolve em Delphi, sabe o quanto a produtividade e a estabilidade dentro da IDE são valiosas. O Rad IA, assistente de IA projetado especificamente para a IDE do Delphi (usando a Open Tools API), tem passado por uma evolução fantástica.

Desde a versão v0.0.15, o plugin recebeu uma série de melhorias arquiteturais, novos recursos de produtividade, estabilidade de nível corporativo e correções profundas para garantir uma experiência de desenvolvimento fluida e sem interrupções.

Neste artigo, vamos explorar tudo o que foi implementado e aprimorado da versão v0.0.16 até a mais recente v0.0.21, trazendo exemplos práticos para você ver como essas mudanças impactam o seu dia a dia.

Principais Novidades e Recursos de Produtividade

Geração de Código Direta com “Create Example from Comment” (v0.0.21)

Uma das novidades mais empolgantes da v0.0.21 é a ação Create Example from Comment no menu contextual do editor. Agora, você pode preencher métodos vazios a partir de uma descrição em linguagem natural.

  • Como funciona: Basta escrever um comentário (seja usando //, { ... } ou (* ... *), inclusive multilinha) acima ou dentro de um método vazio e acionar o comando.
  • O parser localiza o escopo pelo cursor e a IA gera a implementação correspondente, inserindo o código diretamente abaixo do comentário sem a necessidade de abrir o comparador Smart Diff.
  • O fluxo é inteligente e totalmente compatível tanto com provedores tradicionais (BYOK) quanto com o inovador Web Login.

Exemplo Prático de Uso:

Imagine que você declarou a seguinte assinatura na sua unit:

function TMathHelper.RecursiveFactorial(const AValue: Integer): UInt64;
begin
  // Calcula o fatorial de um número inteiro de forma recursiva
  |
end;

Ao posicionar o cursor no caractere | e acionar Create Example from Comment, o Rad IA realiza a chamada em segundo plano e insere o código diretamente no editor:

function TMathHelper.RecursiveFactorial(const AValue: Integer): UInt64;
begin
  // Calcula o fatorial de um número inteiro de forma recursiva
  if AValue <= 1 then
    Exit(1);  Result := AValue * RecursiveFactorial(AValue - 1);
end;

Ações Contextuais Inteligentes com Fallback para Unit Inteira (v0.0.19)

Antes, para usar comandos como Explain, Generate Tests, Locate Bugs, Document Method ou Optimize/Refactor, era obrigatório selecionar um trecho de código.

  • A partir da v0.0.19, se você acionar qualquer uma dessas ações sem nenhuma seleção active, o Rad IA automaticamente lê a unit inteira do editor ativo (via IOTAEditReader em chunks eficientes) e a envia como contexto.
  • O plugin detecta de forma inteligente se o retorno da IA deve substituir o buffer inteiro do arquivo ou apenas um cursor selecionado.

Exemplo Prático de Uso:

Você abriu uma unit complexa e antiga de persistência e quer verificar se há problemas estáticos ou memory leaks ocultos:

  1. Clique com o botão direito no editor (sem selecionar nenhuma linha).
  2. Selecione a opção Locate Bugs (ou envie o comando /bugs no chat).
  3. O Rad IA lerá as 500 linhas da unit inteira em segundo plano, enviará o contexto e exibirá a análise detalhada no chat:

Retorno do Chat: “Identificado na Unit UPersistenciaCliente.pas:

  • 1. No método TClienteRepository.Salvar (linha 142), o objeto LConnection é criado localmente mas não está protegido por um bloco try..finally. Risco de memory leak caso ocorra uma exception.
  • 2. O método ConsultarInadimplentes (linha 180) está fazendo uma consulta SQL sem parâmetros. Sugere-se parametrizar para evitar SQL Injection…”

Smart Diff Integrado ao Web Login (v0.0.20)

O recurso Smart Diff (comparador visual lado a lado que permite aplicar sugestões com um clique) agora é totalmente compatível com o Web Login (que permite usar contas como ChatGPT Plus/Pro e Gemini Advanced sem chave de API).

  • O Rad IA agora gerencia a ponte do WebView e extrai as sugestões formatadas em blocos pascal mantendo quebras de linha e indentação de forma limpa, garantindo a mesma experiência rica do comparador visual para quem não usa chaves BYOK.

Exemplo de Diferença Visual (Smart Diff):

Quando você solicita Optimize/Refactor na sua unit, o Rad IA exibe no comparador:

<<<< ORIGINAL
 procedure TClienteService.Salvar(ACliente: TCliente);
 begin
   FRepository.Insert(ACliente);
 end;
==== SUGERIDO
 procedure TClienteService.Salvar(ACliente: TCliente);
 begin
+  if ACliente = nil then
+    raise EArgumentException.Create('Cliente não pode ser nulo');
+
   FRepository.Insert(ACliente);
 end;
>>>>

(Ao clicar no botão [Aplicar Alteração], a alteração sugerida é inserida automaticamente no seu código).

Estabilidade da IDE e Robustez de Integração

Integrar plugins à IDE do Delphi (bds.exe) exige muito cuidado técnico para evitar congelamentos e Access Violations. Vários avanços fundamentais foram feitos nesse sentido:

  • Prevenção de Deadlocks e Crashes no Menu (v0.0.16 e v0.0.19): O registro de notifiers OTA (IOTAIDENotifier e IOTAEditorNotifier) agora gerencia os hooks de menu de forma assíncrona e segura, aguardando que o TEditWindow esteja totalmente renderizado pela IDE antes de injetar o menu. Isso elimina conflitos conhecidos de code folding (como crash na DLL boreditu.dll ao iniciar projetos) e garante estabilidade no Delphi 12 e Delphi 13.
  • Leitura de Grandes Arquivos em Chunks (v0.0.19): A captura da unit ativa passou a ler o buffer do editor em blocos, evitando gargalos de memória e permitindo o envio de units grandes sem travar o processo principal da IDE.
  • Gerenciamento do Ciclo de Vida do WebView2 (v0.0.16): Implementação de rotinas robustas para encerramento síncrono da WebView2 no shutdown da IDE, evitando travamentos de até 1 minuto ou Access Violations em rtl290.bpl ao fechar o Delphi.

Polimento de UI, UX e Marca Rad IA (v0.0.18)

A experiência de uso do chat e a interface com o desenvolvedor também receberam um banho de loja:

  • Nova Tela Inicial Interativa: O painel do chat agora conta com uma tela de boas-vindas contendo animações, atalhos rápidos e histórico de conversas carregado sob demanda (otimizando a velocidade de abertura do painel).
  • Bloqueio de Sessões em Processamento: Durante a geração de respostas da IA, todas as ações de troca de chat, criação, renomeação ou exclusão de sessões ficam travadas. Isso previne corrupção de contexto e mantém a integridade da conversa ativa.
  • Polimento Visual de Temas: Suporte visual aprimorado para o tema claro (incluindo o tom Mountain Mist) com larguras de scrollbars otimizadas e remoção de bordas escuras desnecessárias nos blocos de código.
  • Padronização da Marca: Toda a interface visual, menus da IDE, documentação e metadados foram revisados para padronizar o nome oficial do plugin como Rad IA.

Evolução Arquitetural e Qualidade de Código

Por trás dos panos, o Rad IA se tornou um projeto extremamente robusto do ponto de vista de engenharia de software:

  • Introdução do Padrão MVP (v0.0.16): A lógica do painel de chat e das telas de configuração foi totalmente desacoplada dos formulários VCL, sendo encapsulada em Presenters (TChatPresenter e TConfigPresenter), transformando a UI em uma View passiva.
  • Abstração de Armazenamento com ISettingsStorage (v0.0.16): A persistência das opções foi abstraída. Em produção, os dados utilizam o registro do Windows (TRegistrySettingsStorage). Nos testes unitários, uma implementação em memória (TMemorySettingsStorage) garante testes 100% isolados, impedindo que testes de regressão sobrescrevam a chave de API real do desenvolvedor.
  • Aumento da Cobertura de Testes: A suíte de testes unitários baseada em DUnitX saltou de 117 para 155 testes aprovados, validando desde o parser de comentários até os fluxos do apresentador.

Resumo Cronológico das Releases

Para quem gosta de acompanhar versão por versão:

  • v0.0.21 (Create Example from Comment): Introdução do recurso de preenchimento de métodos vazios a partir de comentários e validação com 155 testes.
  • v0.0.20 (Web Login + Smart Diff): Integração do comparador visual para usuários de login web e correção de isolamento em testes de registro.
  • v0.0.19 (Fallback Unit Ativa): Habilitação de comandos contextuais sem código selecionado, leitura por chunks e correção do menu no Delphi 13.
  • v0.0.18 (UX & Marca): Nova tela inicial no chat, bloqueio anti-corrupção em streams ativos, ajustes finos de temas e consolidação do nome Rad IA.
  • v0.0.17 (Estabilização & WebView Cache): Correção de renderização Markdown em mensagens de código e inclusão de cache-busting automático no script de build (build.ps1) para evitar JavaScript antigo em atualizações.
  • v0.0.16 (MVP & Robustez): Refatoração arquitetural completa para MVP, configuração abstrata em memória/registro e hooks OTA assíncronos e seguros.

Como Instalar ou Atualizar

A atualização é simples e automatizada pelo script PowerShell na raiz do projeto:

# Abra o PowerShell como Administrador e execute:
powershell.exe -ExecutionPolicy Bypass -File build.ps1 -Install

O script detecta suas IDEs instaladas, remove caches antigos e atualiza os arquivos do WebView2 localizados em %APPDATA%\RadIA\Web.

Gostou das novidades? O Rad IA continua evoluindo para se tornar o assistente definitivo do desenvolvedor Delphi. Experimente na sua IDE e potencialize sua produtividade!

Capa do livro FireDAC na PráticaCapa do livro SDD em DelphiCapa do livro Delphi Vivo

Continue aprendendo com os livros

Conheça os temas, leia as apresentações e explore as degustações disponíveis no catálogo.

Explorar os livros →
Compartilhar por e-mail

3 comentário(s)

  1. Rad IA v0.0.x – Delphi 12 Athens

    Problema:
    Mesmo selecionando OpenAI ChatGPT com Web Login (Plus/Pro), o Rad IA continua executando os comandos pelo Gemini.

    Evidência:
    No rodapé aparece “OpenAI ChatGPT”, mas ao executar /explain o retorno mostra:

    “Codex AI – Gemini (gemini-1.5-flash)”
    “Error: API Key is missing for Google Gemini. Please check settings.”

    Resultado esperado:
    Ao selecionar OpenAI ChatGPT / Web Login, os comandos de barra e o chat deveriam usar o provedor OpenAI ChatGPT, não Gemini.

    Ambiente:
    – Delphi 12 Athens
    – Windows 11
    – Rad IA instalado via build.ps1 -Install
    – OpenAI configurado como Web Login Plus/Pro
    – Gemini sem API Key configurada

Dê-nos sua opinião, seu comentário ajuda o site a crescer e melhorar a qualidade dos artigos.

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.

Um próximo passo para cada interesse.

Continue estudando com os livros, acompanhe as videoaulas ou consulte as soluções para o seu projeto.

Descubra mais sobre Régys Borges da Silveira

Assine agora mesmo para continuar lendo e ter acesso ao arquivo completo.

Continuar lendo