Desde o início, a proposta do RadIA nunca foi apenas colocar uma janela de chat dentro do Delphi. A ideia é construir uma experiência de desenvolvimento assistida por inteligência artificial que compreenda o ambiente da IDE, trabalhe com o projeto real e ajude o desenvolvedor desde a criação do código até a compilação, os testes e o diagnóstico de problemas.
A versão 2.10 representa um passo importante nessa direção. O principal avanço é a introdução de um motor semântico estrutural próprio para Object Pascal, integrado ao Delphi 12 e ao Delphi 13. Com ele, o RadIA passa a entender melhor a organização do código, os símbolos, os relacionamentos entre tipos, a herança e as interfaces do projeto.
Na prática, isso reduz a distância entre uma IA que apenas recebe texto e uma ferramenta que realmente compreende o contexto em que o desenvolvedor está trabalhando.
O problema de trabalhar apenas com texto
Modelos de linguagem são muito eficientes para explicar, gerar e transformar código. Entretanto, quando recebem somente o conteúdo de um arquivo ou um pequeno trecho selecionado, eles não enxergam necessariamente toda a estrutura do projeto.
Considere uma classe que herda comportamento de outra unit, implementa interfaces e utiliza tipos declarados em diferentes partes da aplicação. Apenas ler a linha atual não é suficiente para responder com precisão quais membros estão disponíveis, onde um símbolo foi declarado ou qual método ainda precisa ser implementado.
Enviar cada vez mais arquivos ao modelo também não é a solução ideal. Isso aumenta a latência, o consumo de contexto e a quantidade de código compartilhado, além de não garantir uma interpretação estrutural consistente.
O RadIA 2.10 trata esse problema dentro do próprio ambiente local. Antes de recorrer ao modelo, ele pode consultar uma representação estrutural do projeto e entregar somente o contexto necessário para cada operação.
Um motor semântico próprio para Object Pascal
O novo motor foi desenvolvido como um processo externo, supervisionado e cancelável. Essa separação protege a estabilidade da IDE: o trabalho mais pesado não precisa bloquear a interface principal do Delphi, e uma falha no processo semântico pode ser tratada e recuperada sem comprometer o projeto aberto.
Sua base é formada por três componentes principais:
- um lexer dedicado, responsável por reconhecer os elementos da linguagem;
- um pré-processador que considera diretivas condicionais e arquivos de inclusão;
- um parser estrutural tolerante, preparado para extrair informações úteis mesmo durante a edição de código ainda incompleto.
Essa tolerância é especialmente importante em uma IDE. Enquanto programamos, o arquivo frequentemente passa alguns segundos em um estado que ainda não compila: um begin não foi fechado, um método está pela metade ou uma declaração ainda está sendo escrita. Uma ferramenta de assistência não pode deixar de funcionar justamente nesse momento.
O motor utiliza a configuração ativa do projeto Delphi, incluindo símbolos condicionais, caminhos relevantes e arquitetura selecionada. Assim, sua interpretação se aproxima do contexto real utilizado pela compilação.
Índice incremental e sincronizado com o projeto
Depois de compreender a estrutura dos arquivos, o RadIA mantém um índice semântico incremental. Em vez de reprocessar todo o projeto a cada interação, ele atualiza as partes afetadas conforme documentos são abertos, editados, salvos ou renomeados.
O índice acompanha as revisões do workspace e permite consultar declarações, símbolos, membros, herança e interfaces. Ele também resolve relacionamentos entre tipos distribuídos por diferentes units.
Isso cria uma fonte comum de contexto para vários recursos do RadIA. O agente, a navegação, as ações do editor, a auditoria entre DFM e Pascal e a assistência inline passam a consultar a mesma visão estrutural do projeto, evitando que cada funcionalidade tente interpretar o código de uma maneira diferente.
Completion local antes de chamar a IA
Um dos resultados mais visíveis dessa arquitetura aparece no Ghost Text, a sugestão exibida diretamente no editor.
Quando o cursor está após um acesso a membro, como em Customer.Save, o RadIA pode consultar primeiro o índice local, resolver o tipo da expressão, incluir membros herdados, filtrar pelo prefixo digitado e remover duplicidades. Se houver uma continuação inequívoca, ela pode ser apresentada imediatamente, sem realizar uma chamada ao provider de IA.
Esse caminho traz três ganhos diretos:
- menor latência para sugestões estruturais;
- menor uso de tokens e requisições externas;
- respostas baseadas no código real do projeto.
Quando a resposta local é ambígua, insuficiente ou indisponível, o RadIA continua utilizando a rota de Fill-in-the-Middle configurada. Portanto, o motor semântico não substitui a IA generativa; ele melhora o contexto e resolve localmente aquilo que não precisa de uma geração remota.
Uma nova edição também cancela as consultas anteriores, impedindo que uma sugestão produzida para uma revisão antiga seja aplicada ao buffer atual.
Implementação de membros ausentes
A compreensão estrutural também permite identificar contratos incompletos. O RadIA consegue comparar uma classe com seus ancestrais e interfaces para localizar membros que ainda precisam ser implementados.
Antes de alterar o arquivo, a operação produz uma prévia imutável. A aplicação da mudança continua sujeita ao fluxo de consentimento do usuário e foi projetada para ser idempotente: executar novamente a mesma operação não deve duplicar métodos já criados.
Esse cuidado é parte de uma premissa importante do projeto. Uma integração profunda com a IDE precisa combinar automação com previsibilidade. A ferramenta deve explicar o que pretende fazer, permitir revisão e preservar o controle do desenvolvedor.
Chat, agente e editor falando a mesma língua
Até aqui, muitos assistentes de código funcionavam como superfícies separadas: o chat tinha um contexto, a completion utilizava outro e as ações do editor montavam um terceiro conjunto de informações.
Na versão 2.10, o RadIA compartilha um contexto semântico limitado entre essas experiências. A unit ativa, o símbolo atual, os imports relevantes, as declarações próximas e os membros resolvidos podem acompanhar a solicitação adequada.
Isso não significa enviar o projeto inteiro para um serviço externo. O contexto é selecionado e limitado antes de qualquer chamada remota. O índice estrutural permanece local e reconstruível.
O usuário também pode inspecionar o contexto disponível por meio da opção Show Semantic Editor Context. Essa visualização é somente leitura e ajuda a entender exatamente quais metadados estão sendo utilizados pela assistência.
Conhecimento local e motor semântico não são a mesma coisa
O RadIA já possui recursos de conhecimento local capazes de pesquisar trechos de código e documentação por busca lexical e, opcionalmente, por similaridade vetorial. Esse mecanismo é útil para perguntas como “onde este conceito aparece?” ou “quais arquivos tratam desta funcionalidade?”.
O motor semântico estrutural resolve outro tipo de problema. Ele responde perguntas relacionadas à linguagem e à estrutura do programa: “qual é este símbolo?”, “quais membros este tipo possui?”, “o que foi herdado?” ou “qual contrato ainda não foi implementado?”.
As duas camadas são complementares:
| Camada | Principal objetivo |
|---|---|
| Conhecimento local | Encontrar conteúdo relevante no projeto e em sua documentação |
| Motor semântico estrutural | Compreender símbolos, tipos, membros, herança e interfaces de Object Pascal |
| Provider de IA | Explicar, planejar, gerar e transformar código com base no contexto fornecido |
Essa combinação permite usar cada tecnologia no ponto em que ela oferece mais valor.
Diagnóstico integrado
Uma infraestrutura nova também precisa ser observável. Por isso, o comando /doctor --deep passou a validar o executável do motor semântico, a compatibilidade do protocolo e uma consulta real ao índice.
O diagnóstico mede a latência e apresenta informações sobre a última completion semântica, incluindo seu estado e a quantidade de candidatos encontrados. Em caso de indisponibilidade, o RadIA utiliza fallbacks limitados para manter o editor responsivo e tornar a causa do problema verificável.
O objetivo é evitar mensagens genéricas. Sempre que possível, o diagnóstico deve indicar qual parte não está pronta e o que o usuário pode fazer para corrigir a configuração.
Segurança, privacidade e estabilidade
O motor semântico trabalha localmente e não precisa enviar o índice pela rede. O envio de código para um provider continua dependendo da rota escolhida e das regras de consentimento do RadIA.
Além disso, o processo externo possui supervisão, timeout e cancelamento. Caso ele pare de responder, o cliente pode detectar a falha e recuperar o serviço. Se o motor estiver indisponível, recursos como Ghost Text ainda podem seguir por um contexto limitado, sem congelar a IDE.
Essa arquitetura foi pensada para respeitar uma característica essencial do RadIA: ele funciona dentro do processo de uma ferramenta que o desenvolvedor utiliza durante todo o dia. Ganhar inteligência não pode significar perder estabilidade.
Uma documentação mais direta
A evolução técnica veio acompanhada de uma reorganização da documentação. O conteúdo foi separado por finalidade, com entradas mais claras para guias de uso, referências e desenvolvimento.
O catálogo de ferramentas, os comandos, as configurações e o manual completo continuam disponíveis, mas a navegação busca levar o usuário primeiro à tarefa que deseja realizar. A versão exibida no chat e os diagnósticos também ajudam a confirmar rapidamente qual instalação está ativa.
Compatibilidade e instalação
O RadIA 2.10 oferece suporte aos seguintes ambientes:
- Delphi 12 Win32;
- Delphi 13 Win32;
- Delphi 13 IDE64.
A instalação é feita pelo arquivo RadIA-v2.10.0-Setup.exe. Todas as instâncias do Delphi devem estar fechadas durante a instalação ou atualização.
O RadIA é um projeto de código aberto. Quem preferir pode compilar o código-fonte, estudar a implementação e contribuir com a evolução do projeto.
O que muda para o desenvolvedor
Talvez a melhor forma de resumir a versão 2.10 seja esta: o RadIA passou a depender menos de adivinhações baseadas apenas em texto e ganhou uma base local para compreender o código Delphi.
Isso melhora a precisão do contexto, reduz chamadas desnecessárias, conecta diferentes experiências da IDE e abre espaço para novas automações seguras. Recursos futuros poderão partir de uma representação comum do projeto, em vez de reconstruir a compreensão do código a cada comando.
Ainda há muito a evoluir. Um motor semântico completo é um trabalho contínuo, especialmente em uma linguagem madura, expressiva e integrada a tantos frameworks como Object Pascal. Mas a versão 2.10 estabelece a fundação necessária para que o RadIA avance de assistente integrado para uma verdadeira plataforma de desenvolvimento assistido dentro do Delphi.
Conheça o projeto
O código-fonte, o instalador e a documentação completa estão disponíveis no GitHub:
github.com/regyssilveira/RadIA-Plugin
Se você utiliza Delphi 12 ou 13, experimente a versão 2.10 e compartilhe suas impressões. Relatos de uso real ajudam a direcionar as próximas evoluções do RadIA.
Descubra mais sobre Régys Borges da Silveira
Assine para receber nossas notícias mais recentes por e-mail.
Dê-nos sua opinião, seu comentário ajuda o site a crescer e melhorar a qualidade dos artigos.