AI for Developers (Part 1, IDE)

- А что, если сократить время написания плохого кода?
- Да, и давайте перенос строки будем делать в виде котика!


В инструкции пока нет поддержки RAG и семантики.

IDE

А как вам такая возможность: по коду составлять описание, что он делает?

Если вы работаете в PyCharm/IDEA, то вам может быть доступен плагин Devoxx, который умеет обращаться к LLM с целью кодревью и всем, что вы его попросите.

Ниже рассмотрен вариант связки плагина с API-сервисом от LM Server.

Возможности

  • Поддержка локальных и облачных языковых моделей: Anthropic, Groq, Ollama, OpenAI, …
  • Подсказки для выбранных фрагментов кода
  • Ревью кода
  • Составление описания, что делает код.

План установки

  • Установите плагин (см. ниже)
  • Убедитесь, что у вас запущены Ollama, LMStudio или GPT4All
  • Обновите промпты в настройках
  • Необязательно: Добавьте ключи API для облачных LLM-провайдеров
  • Начните использовать плагин

Выполните установку плагина из маркетплейса. Если по какой-то причине плагин не устанавливается (due to export control regulations, опенсорс да):

…вы можете скопировать этот плагин с другого компьютера или GitHub. Обратите внимание на следующие папки и файлы (пример с Ubuntu):

# в домашней папке
$ 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
  • Распакуйте файл DevoxxGenie.zip в папке ~/.local/share/JetBrains/PyCharmCE2025.1 или в IDEA, по ситуации. В моем случае папку PyCharmCExxx пришлось создавать руками - ее не было
  • Выложите конфиг ~/.config/JetBrains/PyCharmCE2025.1/options/DevoxxGenieSettingsPlugin.xml
  • Необязательно. Возможно вам понадобится добавить плагин и его архив в кеш.

Теперь запустите IDE и вы должны увидеть плагин с готовыми настройками (на вкладке Installed):

Настройка

  1. После установки плагина перейдите в настройки программы (через меню File), чтобы настроить параметры LLM, такие как температура, максимальное количество токенов вывода, повторные попытки и тайм-ауты. При желании вы также можете добавить облачные ключи API LLM, если хотите их использовать.

    DevOps для вас может подготовить сервис API, работающий как незащищенный HTTP-сервер. Не используйте его удаленно, если вы работаете с чувствительными данными, поскольку трафик может быть перехвачен и открытые данные будут использованы злоумышленниками.

    Сказано, что для правильного определения контекстного окна в LM Studio нужно использовать URL http://localhost:1234/api/v0, что видимо ошибочно. Контекстное окно модели приходится увеличивать при ее загрузке (4096 → 8192).

    На вкладке Prompts вы можете сконфигурировать системный промпт и пользовательские запросы.

    Системный промпт - это запрос, который посылается вместе с пользовательским запросом и определяет область задачи, ограничения поиска и задает формат выдаваемой информации. Это критически важный момент.

    Удалите из системного промпта строки:

    The Devoxx Genie is open source and available at https://github.com/devoxx/DevoxxGenieIDEAPlugin.
    You can follow us on Bluesky @ https://bsky.app/profile/devoxxgenie.bsky.social.
    

    Все языковые модели понимают разметку Markdown, поэтому вы можете составлять структурированные промпты со списками, подпунктами, блоками кода.

    DevOps: дефолтные промпты (запрос с ограничениями) заданы в файле

    ~/.config/JetBrains/PyCharmCE2025.1/options/DevoxxGenieSettingsPlugin.xml
    

    Модели имеют возможность переводить русские запросы на английский. Неправильный перевод терминов может сильно влиять на качество ответа, равно как и неточный вопрос. Сравните запросы: “найди страницу с инструкцией” и “предоставь ссылку на страницу”. Как думаете, в каком случае бот предоставит ссылку? Запрашивайте строго то, что ожидаете (прямо как в постановке задачи человеку).


  2. На вкладке Web search находится опция взаимодействия модели с интернетом (включена по умолчанию). Если у вас есть персональный ключ Google Web Search, то можете использовать.

  3. Детали настройки RAG будут добавлены позже:

Работа с плагином

  1. Теперь либо откройте исходный файл и выберите фрагмент кода, либо щелкните правой кнопкой мыши на файле проекта, чтобы добавить его в контекст окна.

    Нажмите кнопку Devoxx:

  2. Выберите из выпадающего списка подходящую модель. К сожалению, некоторые модели из списка могут не подходить для работы, например эмбеддинговые. Фильтр моделей не настраивается.

  3. Определив контекст приглашения, вы можете начать задавать вопросы или использовать предопределенные команды: /test, /review, /explain, /help.

  4. Как только вы получите ответ от выбранной LLM, используйте кнопки над кодом, чтобы скопировать примеры кода в буфер обмена или вставить их в свой файл. Или вы можете получить готовый текст для описания работы скрипта в формате Markdown (на английском языке, но вы можете указать в промпте, какой язык использовать в ответе).

Пример вывода описания

Анализ /explain скрипта с помощью модели qwen2.5-coder-14b-instruct:

  • число строк кода: 500

  • контекстное окно модели: 8192 (увеличено с дефолтного 4096)

  • токенов:

      "usage": {
        "prompt_tokens": 6298,
        "completion_tokens": 620,
        "total_tokens": 6918
      }
    
  • время анализа на карте RTX 5060Ti: 10 секунд

  • качество ответа: более чем устраивает в моем случае. Модель смогла по коду и комментариям составить структурированное описание, что делает этот код.

Спойлер

Certainly! Let’s break down the script into simpler terms to help a junior developer understand its functionality.

Overview

This script is designed to process PDF and image files (JPG/JPEG) by performing Optical Character Recognition (OCR) using Tesseract. It checks if the PDF contains text, converts it to TIFF and PNG formats if necessary, and logs all actions for detailed reporting.

Key Components

  1. Color Definitions:

    • GREEN and NC are used for colored output in the terminal.
  2. Help Function (show_help):

    • Provides usage instructions, description, options, and examples of how to run the script.
  3. Argument Parsing:

    • The script uses a while loop with case statements to parse command-line arguments.
    • Options include setting DPI, compression type, OCR language, and whether to keep TIFF/PNG/TXT files after processing.
  4. Validation:

    • Checks if the provided DPI is within a valid range (72-1200).
    • Ensures the compression algorithm is one of the supported types (group4, lzw, zip).
  5. Logging Setup:

    • Initializes a log file to record all actions and outputs.
  6. File Discovery:

    • Uses find to locate PDF and JPG/JPEG files in the specified directory or current directory if none is provided.
  7. Processing PDF Files:

    • For each PDF, it checks if text is already present using pdftotext.
    • If text is found, it logs the file as a text-containing PDF.
    • If no text is found, it converts the PDF to TIFF and PNG formats, then performs OCR on the TIFF.
  8. Processing Image Files:

    • For each JPG/JPEG, it directly performs OCR using Tesseract.
  9. Statistics Calculation:

    • Calculates various statistics such as total characters recognized, maximum characters in a single file, distribution of text by character count, and more.
    • Computes the percentage of scanned PDFs and average recognition speed.
  10. Summary Generation:

*   Generates a detailed summary report including all processed files, statistics, and options used.
*   Logs this summary to both the terminal and the log file.

Example Usage

To run the script with specific options:

./work2.sh --dpi 600 --compress lzw --lang rus+eng --no-keep-tiff --no-keep-txt ./docs

This command sets the DPI to 600, uses LZW compression for TIFF files, specifies Russian and English languages for OCR, and does not keep TIFF/PNG/TXT files after processing.

Conclusion

The script is a comprehensive tool for batch processing of PDFs and images with OCR capabilities. It provides detailed logging and statistics, making it useful for automation and analysis in document processing tasks.

Вывод

Очень удобный инструмент, как для поиска оптимальных решений (например, написание функций или справки, визуализации и логирования), так и написания документации.

Схема работы

Полная схемы в процессе разработки выглядит так. В следующей статье расскажу о том, как использовать AI Code Review в Gitlab перед запросом на слияние (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(Правка):::wclass
    C --> D{Самопроверка}:::oclass
    B --> |Твой код идеален|F
    F --> H2{Code Review}:::oclass
    H2 -.-> |На доработку|B1
    D --> |Проверено|F(MR):::pmclass
    H2 --> E(Merged)

Ссылки

Test Results

Code review of a 102-line Python script. Some models had a second run to exclude model loading time and warm-up. The “Recom” column shows the number of recommendations from the model. A plus sign indicates a detailed breakdown. “Code = none” means output without an example of corrected code.

Analysis time in the “1st” and “2nd” columns is in seconds.

Arch VL Model Params Quant 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

Final code was not tested for functionality. Subjective assessment of analysis depth was provided. Models #5, #7, #14, and #18 are of most interest, with #20 being of lesser interest. These models were used for summarizing selected forum topics, with the best results from Phi 4. Gemma 3 and Qwen 3 also perform well. Gemma has the added feature of image recognition, while Qwen often switches to English.

The test was conducted on an RTX 5060Ti 16GB (15.5GB available, models larger than 9.5GB won’t load). Qwen often switches to English, making it difficult to use for summarization.

Server: https://lmstudio.ai

Context length increased from 4096 to 8192.

For code review and chatbot:

For code review, chatbot, and summarization:

For chatbot and summarization:

For image recognition: