IA para desenvolvedor (Parte 1, IDE)

  • E se reduzirmos o tempo de escrever código ruim?
  • Sim, e vamos fazer quebras de linha no estilo gatinho!

Ainda não há suporte na documentação para RAG e semântica.

IDE

E como vocês acham essa funcionalidade: gerar descrições do que o código faz com base no próprio código?

Se você trabalha no PyCharm/IDEA, talvez tenha acesso ao plug-in Devoxx, que é capaz de interagir com LLMs para revisão de código e qualquer outra tarefa solicitada.

A seguir, será apresentado um exemplo de integração do plug-in com o serviço API do LM Server.

Funcionalidades

  • Suporte a modelos linguísticos locais e em nuvem: Anthropic, Groq, Ollama, OpenAI, …
  • Dicas para trechos selecionados de código
  • Revisão de código
  • Geração de descrições sobre o que o código faz.

Plano de instalação

  • Instale o plug-in (veja abaixo)
  • Certifique-se de que os serviços Ollama, LMStudio ou GPT4All estejam em execução
  • Atualize os prompts nas configurações
  • Opcional: Adicione chaves API para provedores de LLMs em nuvem
  • Comece a usar o plug-in

Instale o plug-in via marketplace. Caso ele não consiga ser instalado (devido a regulamentações de controle de exportação, open-source sim):

…você pode copiar esse plug-in de outro computador ou GitHub. Observe os seguintes diretórios e arquivos (exemplo com Ubuntu):

# na pasta pessoal
$ find . -iname 'devoxx*'
./.config/JetBrains/PyCharmCE2025.1/options/DevoxxGenieSettingsPlugin.xml
./.cache/JetBrains/PyCharmCE2025.1/DevoxxGenie
./.cache/JetBrains/PyCharmCE2025.1/plugins/DevoxxGenie.zip
./.local/share/JetBrains/PyCharmCE2025.1/DevoxxGenie
```- Extraia o arquivo DevoxxGenie.zip na pasta `~/.local/share/JetBrains/PyCharmCE2025.1` ou na IDE, conforme o caso. No meu caso, precisei criar manualmente a pasta PyCharmCExxx — ela não existia.
- Faça upload do arquivo de configuração `~/.config/JetBrains/PyCharmCE2025.1/options/DevoxxGenieSettingsPlugin.xml`.
- Opcional. Talvez você precise adicionar o plugin e seu arquivo ZIP ao cache.

Agora, inicie a IDE e você deverá ver o plugin com as configurações prontas (na aba Installed):

![A imagem mostra a janela de configurações da IDE, exibindo plugins instalados, incluindo pacotes de linguagens para chinês, japonês e coreano. (Legenda gerada pela IA)|690x367](upload://zhRPNYpgtdcMU1upNbivGsosnJG.png)

## Configuração

1. Após instalar o plugin, acesse as configurações do programa (via menu File) para ajustar os parâmetros do LLM, como temperatura, número máximo de tokens de saída, tentativas repetidas e timeouts. Se desejar, também pode adicionar chaves API de serviços LLM em nuvem.

   > DevOps: Pode-se preparar um serviço API que funcione como um servidor HTTP não protegido. Não use-o remotamente se estiver lidando com dados sensíveis, pois o tráfego pode ser interceptado e os dados abertos serão utilizados por malfeitores.

   Foi mencionado que, para determinar corretamente o contexto da janela no LM Studio, deve-se usar o URL `http://localhost:1234/api/v0`, o que parece incorreto. O contexto da janela da modelo deve ser aumentado ao carregá-lo (4096 → 8192).

   ![A tela exibe a janela de configurações do DevoxxGenie, onde o usuário configura URLs para diferentes provedores locais de LLM e OpenAI. (Legenda gerada pela IA)|599x500](upload://a1TZn4KG3kqBYd9sq6XNl2XWXa.png)

   Na aba Prompts, você pode configurar o prompt do sistema e os prompts do usuário.

   O prompt do sistema é o que é enviado junto com o prompt do usuário e define a área de tarefas, limites de busca e formato da resposta. Esse é um ponto crítico.

   Remova das linhas do prompt do sistema:

The Devoxx Genie is open source and available at GitHub - devoxx/DevoxxGenieIDEAPlugin: DevoxxGenie is a plugin for IntelliJ IDEA that uses local LLM's (Ollama, LMStudio, GPT4All, Jan and Llama.cpp) and Cloud based LLMs to help review, test, explain your project code..
You can follow us on Bluesky @ @devoxxgenie.bsky.social on Bluesky.


Todas as modelos de linguagem entendem a formatação Markdown, portanto, você pode criar prompts estruturados com listas, subitens e blocos de código.

> DevOps: Os prompts padrão (com restrições) estão definidos no arquivo:
> 
> ``` 
> ~/.config/JetBrains/PyCharmCE2025.1/options/DevoxxGenieSettingsPlugin.xml
> ```
> 
> As modelos têm a capacidade de traduzir consultas em russo para inglês. Traduções incorretas de termos podem afetar significativamente a qualidade da resposta, assim como perguntas imprecisas. Compare os seguintes prompts: “encontre a página com a instrução” e “forneça o link para a página”. Em qual caso o bot fornecerá o link? Solicite exatamente o que espera (como se estivesse pedindo a um humano).

<br>

2. Na aba Web search, há a opção de interação da modelo com a internet (habilitada por padrão). Se você tiver uma chave pessoal do Google Web Search, pode utilizá-la.

3. Detalhes sobre a configuração RAG serão adicionados posteriormente:

![A imagem mostra as configurações do DevoxxGenie, incluindo parâmetros para varredura e cópia de projetos, além de configurações de Retrieval-augmented Generation (RAG) usando ChromaDB. (Legenda gerada pela IA)|675x500](upload://gYED7Xn3c0twmTBEwwXsRF0f3pK.png)

## Uso do plugin

1. Agora, abra o arquivo original e selecione um trecho de código, ou clique com o botão direito no arquivo do projeto para adicioná-lo ao contexto da janela.

Clique no botão <kbd>Devoxx</kbd>:

![Na tela do computadorÉ exibida uma janela de terminal com código shell, além de pastas abertas contendo arquivos do projeto. (Legenda da imagem gerada por IA)|600x305](upload://2aBOJ4FADHQqiRrCP6OETygGNFT.png)

2. Escolha o modelo adequado da lista suspensa. Infelizmente, alguns modelos da lista podem não ser compatíveis com o uso, por exemplo, modelos de embedding. O filtro de modelos não pode ser ajustado.

![Na tela é exibida uma lista de diferentes modelos de aprendizado de máquina, incluindo modelos baseados em GPT e Qwen, além de configurações para o uso com RAG e interface web. (Legenda da imagem gerada por IA)|507x500](upload://wgYHxRY5QimRgxam4SGxLL60KSd.png)

3. Após definir o contexto da solicitação, você pode começar a fazer perguntas ou usar comandos pré-definidos: /test, /review, /explain, /help.

4. Assim que receber a resposta da LLM selecionada, use os botões acima do código para copiar os exemplos de código para a área de transferência ou colá-los em seu arquivo. Ou você pode obter um texto pronto para descrever a funcionalidade do script no formato Markdown (em inglês, mas você pode especificar no prompt qual idioma deseja usar na resposta).

## Exemplo de saída de descrição

Análise do script `/explain` com o modelo `qwen2.5-coder-14b-instruct`:

- Número de linhas de código: 500

- Tamanho do contexto do modelo: 8192 (aumentado do padrão de 4096)

- Tokens:

```json
"usage": {
 "prompt_tokens": 6298,
 "completion_tokens": 620,
 "total_tokens": 6918
}
  • Tempo de análise na placa RTX 5060Ti: 10 segundos

  • Qualidade da resposta: mais do que satisfatória no meu caso. O modelo conseguiu, com base no código e nos comentários, elaborar uma descrição estruturada sobre o que faz esse código.

Spoiler

Certamente! Vamos quebrar o script em termos mais simples para ajudar um desenvolvedor junior a entender sua funcionalidade.

Visão geral

Esse script foi projetado para processar arquivos PDF e imagens (JPG/JPEG) realizando reconhecimento óptico de caracteres (OCR) usando Tesseract. Ele verifica se o PDF contém texto, converte-o para formatos TIFF e PNG, se necessário, e registra todas as ações para relatórios detalhados.

Componentes principais

  1. Definições de cor:

    • GREEN e NC são usados para saída colorida no terminal.
  2. Função de ajuda (show_help):

    • Fornece instruções de uso, descrição, opções e exemplos de como executar o script.
  3. Análise de argumentos:

    • O script usa um loop while com instruções case para analisar argumentos da linha de comando.
    • As opções incluem definir DPI, tipo de compressão, idioma do OCR e se manter ou não os arquivos TIFF/PNG/TXT após o processamento.
  4. Validação:

    • Verifica se o DPI fornecido está dentro de um intervalo válido (72-1200).
    • Garante que o algoritmo de compressão seja um dos tipos suportados (group4, lzw, zip).
  5. Configuração de logs:

    • Inicializa um arquivo de log para registrar todas as ações e saídas.
  6. Descoberta de arquivos:

    • Usa find para localizar arquivos PDF e JPG/JPEG no diretório especificado ou no diretório atual, se nenhum for fornecido.
  7. Processamento de arquivos PDF:

    • Para cada PDF, verifica se já contém texto usando pdftotext.
    • Se texto for encontrado, registra o arquivo como PDF contendo texto.
    • Se não houver texto, converte o PDF para formatos TIFF e PNG, e realiza OCR no TIFF.
  8. Processamento de arquivos de imagem:

    • Para cada JPG/JPEG, realiza OCR diretamente usando Tesseract.
  9. Cálculo de estatísticas:

    • Calcula várias estatísticas, como total de caracteres reconhecidos, máximo de caracteres em um único arquivo, distribuição de texto por contagem de caracteres e mais.
    • Calcula a porcentagem de PDFs escaneados e a velocidade média de reconhecimento.
  10. Geração de resumo:

    • Gera um relatório detalhado com todos os arquivos processados, estatísticas e opções usadas.
    • Registra esse resumo tanto no terminal quanto no arquivo de log.Este comando define a DPI para 600, usa compressão LZW para arquivos TIFF, especifica os idiomas russo e inglês para OCR e não mantém os arquivos TIFF/PNG/TXT após o processamento.

Conclusão

O script é uma ferramenta abrangente para processamento em lote de PDFs e imagens com capacidade de OCR. Ele fornece logs e estatísticas detalhadas, tornando-o útil para automação e análise em tarefas de processamento de documentos.

Conclusão

Muito útil como ferramenta, tanto para a busca de soluções ótimas (por exemplo, escrita de funções ou documentação, visualização e registro), quanto para a elaboração de documentação.

Fluxo de trabalho

A arquitetura completa em desenvolvimento se apresenta assim. Na próxima publicação, explicarei como utilizar o Code Review com IA no GitLab antes do pedido de mesclagem (MR).

graph LR
    classDef pclass fill:#f5f5dc
    classDef wclass fill:#f96
    classDef pmclass fill:#4f7
    classDef yclass fill:#ff9
    classDef oclass fill:#ffbf00

    B(IDEA) --|Code pre-Review|B1(AI Devoxx):::pclass
    B1 -- C(Edição):::wclass
    C -- D{Auto-verificação}:::oclass
    B --|Seu código é ideal|F
    F -- H2{Code Review}:::oclass
    H2 -.-|Revisão|B1
    D --|Verificado|F(MR):::pmclass
    H2 -- E(Merged)

Links

Resultados dos Testes

Revisão de código de 102 linhas de script Python. Algumas modelos tiveram uma segunda tentativa de execução, para excluir o tempo de carregamento da modelagem na memória e aquecimento. A coluna “Recom” indica a quantidade de recomendações da modelagem. O sinal de mais (+) significa análise detalhada. “Code = none” significa que não há exemplo de código corrigido.

O tempo de análise nas colunas “1st” e “2nd” está em segundos.

Arquitetura VL Modelo Parâmetros Quantização GB Recom Code 1st 2nd
1 qwen3 deepseek-r1-0528-qwen3 8b q8_0 8.71 3 - 126
2 llama deepseek-r1-distill-llama 8b q4_0 5.28 6 - 34 s
3 qwen3 deepseek-r1-0528-qwen3 8b q4_k_m 5.03 3 none 85
4 gemma3 gemma-3 12b q6_k 9.66 10+ - 84
5 gemma3 :eye: gemma-3 4b q8_k_xl 6.84 11+ - 49
6 gemma3n gemma-3n 6.9b q8_0 7.35 2 none 20
7 gemma3 gemma-3 12b q4_k_m 7.30 10++ - 66
8 gemma3 :eye: gemma-3 4b q8_0 4.98 4 - 41
9 llama llama-3-gpt4o-ru 8b q4_k_m 4.92 8 none 25
10 llama llama 3.2 8x3b q3_k_s 8.25 6 - 24
11 llama llama 3.1 8b q6_k 6.60 8 - 25
12 llama llama 3.1 8b q8_0 8.54 8 - 35
13 phi3 phi-4 15b q4_k_m 9.05 12 - 47 34
14 phi3 phi-4-reasoning 15b q4_k_m 9.05 13 - 66 14
15 llama mistral-nemo-2407 12b q6_k 10.06 5 - 40 25
16 llama oh-dcft-v3.1-gemini-1.5-flash 8b 6_k 6.60 5 - 29 27
17 qwen3 qwen3-14b-gemini 14b q4_k_m 9.00 13+ - 127 76
18 qwen3 qwen3-8b 8b q8_0 8.71 14+ - 63 43
19 qwen2 qwen2.5-coder 14b q4_k_m 8.99 8 - 47 36
20 qwen2vl qwen2.5-vl 7b q8_0 8.10 8+4 - 41 36
21 qwen2vl spaceQwen2.5-vl 3b f16 6.18 3 - 30

O código final não foi testado quanto à funcionalidade. A avaliação foi subjetiva quanto à profundidade da análise. As modelos nº 5, 7, 14 e 18 chamam mais atenção, e em menor grau a nº 20. Com essas modelos foi realizada a resumo do tópico do fórum, e os resultados foram melhores com o Phi 4. Gemma 3 e Qwen 3 também se mostraram bons. A Gemma ainda possui a função de reconhecimento de imagens, e o Qwen frequentemente passa para o inglês.

O teste foi realizado na RTX 5060Ti 16GB (15,5, modelos maiores que 9,5GB não carregam). O Qwen frequentemente muda para o inglês, o que dificulta seu uso em resumos.

Servidor: https://lmstudio.ai

O contexto foi aumentado de 4096 para 8192.

Para revisão de código e chatbot:

Para revisão, chatbot e resumo:

Para chatbot e resumo:

Para reconhecimento de imagens: