Complementação de código de linha completa em JetBrains IDEs: tudo o que você precisa saber
A programação com IA ainda é um tema altamente controverso, mas não há como negar que cada vez mais desenvolvedores estão começando a incorporar a IA em seus workflows diários. Não importa se você já escolheu seu lado no debate ou ainda não se decidiu, temos um novo recurso na v2024.1 dos JetBrains IDEs que pode despertar seu interesse: complementação de código de linha completa. Ele é alimentado por IA e funciona localmente sem enviar dados pela Internet.
Nesta postagem do nosso blog, falaremos mais sobre o que é o recurso de complementação de código de linha completa, como ele funciona, quais linguagens são compatíveis e como você pode nos enviar feedback sobre ele.
O que é a complementação de código de linha completa nos JetBrains IDEs?
Esse novo tipo de complementação de código foi adicionado aos JetBrains IDEs com a atualização 2024.1 mais recente. Como você pode ver abaixo, ele assume a forma de sugestões de linha única em tons de cinza que complementam as linhas com base no contexto do arquivo atual:
Essas sugestões são alimentadas por modelos de linguagem especializados que nós treinamos especificamente para diferentes linguagens e frameworks. Os modelos são executados localmente sem enviar código pela Internet.
A complementação de código de linha completa está disponível atualmente para Java, Kotlin, Python, JavaScript, TypeScript, CSS, PHP, Go e Ruby nos JetBrains IDEs correspondentes: IntelliJ IDEA Ultimate, PyCharm Professional, WebStorm, PhpStorm, GoLand e RubyMine. Nos próximos meses, planejamos estender a funcionalidade para C#, Rust e C++, para que ela também chegue ao Rider, RustRover e CLion.
Observe que a complementação de código de linha completa está incluída na sua assinatura ativa do JetBrains IDE sem custo adicional: apenas certifique-se de estar na versão 2024.1 ou posterior. Se você ainda não tem uma assinatura, também pode usar esse recurso durante a avaliação gratuita de 30 dias.
Como funciona a complementação de código de linha completa?
Com a complementação de código de linha completa, tínhamos dois objetivos principais em mente. O primeiro é óbvio: ajudar você a poupar tempo e aumentar sua velocidade de programação. Mas, além disso, também queríamos fornecer uma solução que abordasse as restrições que certas organizações enfrentam quando se trata de usar soluções de IA conectadas à nuvem.
Aqui está um resumo de como a complementação de código de linha completa ajuda a atingir esses dois objetivos:
- Funciona localmente e está disponível offline. Isso significa que você pode aproveitar as vantagens do recurso mesmo se não estiver conectado à Internet.
- Ele não envia dados da sua máquina pela Internet. Os modelos de linguagem que possibilitam a complementação de código de linha completa são executados localmente, o que é ótimo por dois motivos. Em primeiro lugar, seu código permanece seguro, pois nunca sai da sua máquina. Em segundo lugar, não há despesas adicionais relacionadas à nuvem, e é por isso que esse recurso não tem custo adicional.
- Está profundamente integrado aos JetBrains IDEs. Todas as sugestões serão formatadas adequadamente, com o IDE verificando o equilíbrio das aspas e colchetes. Além disso, usamos o poder da análise estática e nossa compreensão do código para filtrar sugestões incorretas. Cada linguagem suportada tem seu próprio conjunto de verificações sugeridas de correção de código. As mais básicas, como verificações de referências não resolvidas, são implementadas na maioria das linguagens para garantir que o IDE não sugira variáveis e métodos inexistentes. Também há suporte para o recurso de importação automática.
- Ele foi projetado para manter seu fluxo de trabalho o mais tranquilo possível. Usamos filtragem inteligente para evitar a exibição de sugestões que tendem a ser canceladas explicitamente ou excluídas logo após serem adicionadas.
Para alguns detalhes técnicos adicionais, consulte esta seção abaixo.
Complementação de código de linha completa vs. AI Assistant
Há duas maneiras de se beneficiar da funcionalidade da IA nos JetBrains IDEs: complementação de código de linha completa e JetBrains AI Assistant. Sabemos que isso pode ser confuso, então vamos examinar mais de perto o que eles têm em comum e como diferem.
Tanto a complementação de código de linha completa quanto o JetBrains AI Assistant visam ajudar você a trabalhar com mais rapidez. Ambos também vão além da complementação padrão que já está disponível nos JetBrains IDEs há algum tempo. No entanto, o JetBrains AI Assistant oferece um conjunto de recursos mais abrangente, incluindo chat inteligente com reconhecimento de contexto e a capacidade de gerar testes ou escrever documentação.
Consulte a tabela abaixo para uma comparação das duas funcionalidades de IA:
Garantimos que nunca treinamos nossos recursos de IA com o código dos nossos clientes. Se a sua empresa tem regulamentações rigorosas de privacidade de dados, mas você ainda deseja acelerar seus workflows com a IA, a complementação de código de linha completa pode ser uma escolha melhor para você.
Nos bastidores
A espinha dorsal da complementação de código de linha completa é um modelo de linguagem específico para cada linguagem de programação, que é treinado internamente usando um conjunto de dados de código open source com licenças permissivas. A entrada do modelo de linguagem é o código antes do cursor, embora, para algumas linguagens, também adicionemos conteúdo de arquivos relacionados. A saída é a continuação sugerida pelo modelo da linha atual, que é mostrada em cinza.
A inferência do modelo de linguagem é executada na sua máquina local. Para garantir a geração mais eficiente, a inferência do modelo é executada em um processo separado e é altamente otimizada para a arquitetura da máquina alvo. Por exemplo, se você estiver usando a arquitetura x86-64, o modelo será executado na CPU e, se estiver usando a arquitetura ARM64, o modelo usará a potência da GPU do seu computador.
Depois que a sugestão é gerada, uma série de etapas de pós-processamento são aplicadas. Primeiro, verificamos se essa sugestão está sintaticamente e semanticamente correta e, em seguida, realizamos filtragem inteligente, formatação, equilíbrio de parênteses e várias outras manipulações. O pós-processamento é crucial para a experiência dos usuários e, por isso, fazemos o possível para mostrar apenas sugestões valiosas que não atrapalham seu fluxo de trabalho.
Por último, você também pode estar se perguntando por que decidimos optar por sugestões de linha única. A extensão das sugestões de complementação da IA é um dilema. Embora sugestões mais longas tendam a reduzir o número de pressionamentos de tecla que você precisa fazer, o que é bom, elas também aumentam o número de revisões necessárias da sua parte. Levando isso em consideração, decidimos que complementar uma única linha de código seria um compromisso justo.
Essa decisão nos permitiu reduzir o tamanho do modelo sem qualquer declínio significativo na qualidade das sugestões. Na versão 2024.1 dos JetBrains IDEs, usamos um modelo de linguagem que possui 100 milhões de parâmetros, com um tamanho máximo de contexto de 1.536 tokens, o que equivale a aproximadamente 170 linhas de código.
Como adaptar o recurso
Você pode configurar a complementação de código de linha completa em Settings | Editor | General | Code Completion : todas as configurações podem ser encontradas lá, na seção Machine Learning-Assisted Completion:
Se quiser desativar o recurso, desmarque a caixa de seleção Enable Full Line suggestions. Como alternativa, você pode desabilitar o plug-in que alimenta esse recurso. Para fazer isso, acesse Settings | Plugins, alterne para a guia Installed e procure Full line code completion.
Como fornecer feedback
A complementação de código de linha completa ainda está em desenvolvimento ativo e, por isso, incentivamos você a compartilhar seus comentários conosco. Você pode fazer isso deixando um comentário nesta postagem do blog. Você também pode votar a favor de issues existentes aqui ou criar um novo fazendo login e clicando no botão New Issue no canto superior direito.
É isso por hoje. Experimente a complementação de código de linha completa e conte-nos o que achou. Continuaremos melhorando ainda mais essa funcionalidade, com o suporte para C#, Rust e C++, bem como a melhor integração com a complementação de código de várias linhas do AI Assistant, sendo nossas principais prioridades por enquanto. Fique ligado nas atualizações!
Artigo original em inglês por: