KI für Entwickler (Teil 1, IDE)

  • Was wäre, wenn man die Zeit für schlechten Code reduzieren würde?
  • Ja, und wir machen Zeilenumbrüche im Stil eines Kätzchens!


Ein Mensch, dessen Kopf in Flammen steht, sitzt vor einem Computer und zeichnet mit einem Stift – ein Symbol für kreativen Burnout oder Kreativkrise. (AI-Bildunterschrift)|500x500

Die Anleitung unterstützt noch keine RAG- oder semantische Funktionen.

IDE

Wie finden Sie diese Funktion: Aus dem Code soll ein Beschreibung erstellt werden, was er tut?

Wenn Sie in PyCharm/IDEA arbeiten, ist Ihnen vielleicht der Plugin „Devoxx“ verfügbar, der in der Lage ist, auf LLMs zuzugreifen, um Code-Reviews und alles andere zu erledigen, was Sie ihm anordnen.

Im Folgenden wird eine Verbindung des Plugins mit einem API-Service von LM Server betrachtet.

Funktionen

  • Unterstützung lokaler und cloud-basierter Sprachmodelle: Anthropic, Groq, Ollama, OpenAI, …
  • Hinweise für ausgewählte Codeabschnitte
  • Code-Review
  • Erstellung einer Beschreibung, was der Code tut.

Installationsplan

  • Installieren Sie das Plugin (siehe unten)
  • Stellen Sie sicher, dass Ollama, LMStudio oder GPT4All auf Ihrem System laufen
  • Aktualisieren Sie die Prompts in den Einstellungen
  • Optional: Fügen Sie API-Schlüssel für cloud-basierte LLM-Anbieter hinzu
  • Beginnen Sie mit der Nutzung des Plugins

Installieren Sie das Plugin über den Marketplace. Falls das Plugin aufgrund von Exportkontrollregelungen nicht installiert werden kann (Open-Source ja):

…können Sie das Plugin von einem anderen Computer kopieren oder es von GitHub herunterladen. Beachten Sie folgende Ordner und Dateien (Ubuntu-Beispiel):

# im Home-Verzeichnis
$ 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
```- Entpacken Sie die Datei `DevoxxGenie.zip` in das Verzeichnis `~/.local/share/JetBrains/PyCharmCE2025.1` oder in IDEA, je nach Situation. In meinem Fall musste ich das Verzeichnis `PyCharmCExxx` manuell erstellen, da es nicht vorhanden war.
- Stellen Sie die Konfigurationsdatei `~/.config/JetBrains/PyCharmCE2025.1/options/DevoxxGenieSettingsPlugin.xml` bereit.
- Optional: Sie können den Plugin-Download und dessen Archiv in den Cache hinzufügen.

Starten Sie nun die IDE – Sie sollten den Plugin mit den voreingestellten Einstellungen sehen (auf der Registerkarte „Installed“):

![Bild zeigt das IDE-Einstellungsfenster mit installierten Plugins, darunter Sprachpakete für Chinesisch, Japanisch und Koreanisch. (AI-Bildunterschrift)|690x367](upload://zhRPNYpgtdcMU1upNbivGsosnJG.png)

## Konfiguration

1. Nach der Installation des Plugins gehen Sie über das Menü „File“ in die Einstellungen, um die Parameter des LLM (Large Language Model) wie Temperatur, maximale Tokenanzahl, Wiederholungsversuche und Timeout-Werte anzupassen. Sie können optional auch Cloud-API-Schlüssel für LLM hinzufügen, falls Sie diese nutzen möchten.

   > DevOps kann für Sie einen API-Service bereitstellen, der als ungeschützter HTTP-Server arbeitet. Verwenden Sie diesen nicht fernab, wenn Sie mit sensible Daten arbeiten, da der Traffic abgehört werden kann und öffentliche Daten von Angreifern genutzt werden könnten.

   Es wird erwähnt, dass für die korrekte Bestimmung des Kontextfensters in LM Studio die URL `http://localhost:1234/api/v0` verwendet werden sollte – dies scheint jedoch falsch zu sein. Das Kontextfenster der Modell muss bei der Ladung erhöht werden (4096 → 8192).

   ![Bild zeigt das DevoxxGenie-Einstellungsfenster, in dem der Benutzer URLs für lokale LLM-Provider und OpenAI konfiguriert. (AI-Bildunterschrift)|599x500](upload://a1TZn4KG3kqBYd9sq6XNl2XWXa.png)

   Auf der Registerkarte „Prompts“ können Sie den Systemprompt und Benutzeranfragen konfigurieren.

   Der Systemprompt ist eine Anfrage, die zusammen mit der Benutzeranfrage gesendet wird und den Aufgabenbereich, die Suchgrenzen und den Formatierungsstandard der zurückgegebenen Informationen definiert. Dies ist ein kritischer Punkt.

   Entfernen Sie aus dem Systemprompt die folgenden Zeilen:

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.


Alle Sprachmodelle verstehen Markdown-Formatierung, sodass Sie strukturierte Prompts mit Aufzählungen, Unterpunkten und Codeblöcken erstellen können.

> DevOps: Standard-Prompts (eingeschränkte Anfragen) sind im folgenden Datei definiert:
> 
> ``` 
> ~/.config/JetBrains/PyCharmCE2025.1/options/DevoxxGenieSettingsPlugin.xml
> ```
> 
> Modelle können russische Anfragen ins Englische übersetzen. Falsche Übersetzungen von Begriffen können das Antwortqualität erheblich beeinflussen, ebenso wie ungenaue Fragen. Vergleichen Sie die Anfragen: „Finde die Seite mit der Anleitung“ und „Gib die URL zur Seite an“. Welcher Fall wird wahrscheinlich eine URL liefern? Fordern Sie genau das ein, was Sie erwarten (genau wie bei einer Aufgabenstellung an einen Menschen).

<br>

2. Auf der Registerkarte „Web Search“ befindet sich die Option zur Interaktion des Modells mit dem Internet (standardmäßig aktiviert). Wenn Sie einen persönlichen Google Web Search-Schlüssel besitzen, können Sie diesen nutzen.

3. Details zur Konfiguration von RAG werden später hinzugefügt:

![Bild zeigt die DevoxxGenie-Einstellungen, einschließlich Optionen zum Scannen und Kopieren von Projekten sowie Einstellungen für Retrieval-Augmented Generation (RAG) mit ChromaDB. (AI-Bildunterschrift)|675x500](upload://gYED7Xn3c0twmTBEwwXsRF0f3pK.png)

## Nutzung des Plugins

1. Öffnen Sie entweder die Quelldatei und wählen Sie einen Codeausschnitt aus, oder klicken Sie mit der rechten Maustaste auf die Projektdatei, um sie dem Kontextfenster hinzuzufügen.

Drücken Sie die Taste `<kbd>Devoxx</kbd>`:

![Bild zeigt einen Computerbildschirm,Ein Terminalfenster mit Shell-Code wird angezeigt, sowie geöffnete Ordner mit Projektdateien. (Bildunterschrift von AI)|600x305](upload://2aBOJ4FADHQqiRrCP6OETygGNFT.png)

2. Wählen Sie aus der Dropdown-Liste eine geeignete Modellvariante aus. Leider eignen sich einige Modelle in der Liste nicht für die Verwendung, beispielsweise Embedding-Modelle. Der Modellfilter ist nicht anpassbar.

![Auf dem Bildschirm wird eine Liste verschiedener Machine-Learning-Modelle angezeigt, darunter Modelle auf Basis von GPT und Qwen sowie Einstellungen für RAG und Web-Interface. (Bildunterschrift von AI)|507x500](upload://wgYHxRY5QimRgxam4SGxLL60KSd.png)

3. Nachdem Sie den Kontext der Anfrage definiert haben, können Sie Fragen stellen oder vordefinierte Befehle wie `/test`, `/review`, `/explain`, `/help` verwenden.

4. Sobald Sie eine Antwort von der ausgewählten LLM erhalten, können Sie über die Schaltflächen über dem Codebeispiel den Code in die Zwischenablage kopieren oder ihn in Ihre Datei einfügen. Alternativ können Sie einen fertigen Text für die Beschreibung der Skriptfunktion im Markdown-Format erhalten (auf Englisch, aber Sie können im Prompt angeben, welcher Sprache der Antwort entsprechen soll).

## Beispiel für die Ausgabe der Beschreibung

Analyse des Skripts `/explain` mit dem Modell `qwen2.5-coder-14b-instruct`:

- Anzahl Zeilen Code: 500

- Kontextfenster der Modell: 8192 (erhöht von Standardwert 4096)

- Token:

```json
"usage": {
 "prompt_tokens": 6298,
 "completion_tokens": 620,
 "total_tokens": 6918
}
  • Analysezeit auf der RTX 5060Ti-Karte: 10 Sekunden

  • Qualität der Antwort: mehr als zufriedenstellend in meinem Fall. Das Modell konnte aus dem Code und den Kommentaren eine strukturierte Beschreibung des Codes erstellen, was sehr hilfreich ist.

Spoiler

Natürlich! Lassen Sie uns das Skript in einfachere Begriffe zerlegen, um einem Junior-Entwickler die Funktionalität zu erklären.

Übersicht

Dieses Skript ist darauf ausgelegt, PDF- und Bilddateien (JPG/JPEG) durch Ausführung von Optical Character Recognition (OCR) mit Tesseract zu verarbeiten. Es prüft, ob der PDF-Datei Text enthalten ist, konvertiert sie bei Bedarf in TIFF- und PNG-Formate und protokolliert alle Aktionen für eine detaillierte Berichterstattung.

Hauptkomponenten

  1. Farbdefinitionen:

    • GREEN und NC werden für farbige Ausgabe im Terminal verwendet.
  2. Hilfsfunktion (show_help):

    • Gibt Anweisungen zur Verwendung, Beschreibung, Optionen und Beispiele dafür, wie das Skript ausgeführt werden kann.
  3. Argumentenparsen:

    • Das Skript verwendet eine while-Schleife mit case-Anweisungen, um die Kommandozeilenargumente zu parsen.
    • Optionen umfassen die Einstellung von DPI, Kompressionsart, OCR-Sprache und ob TIFF/PNG/TXT-Dateien nach der Verarbeitung behalten werden sollen.
  4. Validierung:

    • Prüft, ob der angegebene DPI innerhalb eines gültigen Bereichs (72–1200) liegt.
    • Stellt sicher, dass der Kompressionsalgorithmus einer der unterstützten Typen (group4, lzw, zip) ist.
  5. Protokollierung:

    • Initialisiert eine Protokolldatei, um alle Aktionen und Ausgaben zu protokollieren.
  6. Dateifinder:

    • Verwendet find, um PDF- und JPG/JPEG-Dateien im angegebenen Verzeichnis oder im aktuellen Verzeichnis (falls keins angegeben wurde) zu lokalisieren.
  7. Verarbeitung von PDF-Dateien:

    • Für jede PDF-Datei wird überprüft, ob Text bereits vorhanden ist, indem pdftotext verwendet wird.
    • Wenn Text vorhanden ist, wird die Datei als PDF mit Text protokolliert.
    • Wenn kein Text vorhanden ist, wird die PDF in TIFF- und PNG-Formate konvertiert und anschließend OCR auf dem TIFF durchgeführt.
  8. Verarbeitung von Bilddateien:

    • Für jedes JPG/JPEG wird direkt OCR mit Tesseract ausgeführt.
  9. Statistikberechnung:

    • Berechnet verschiedene Statistiken wie insgesamt erkannte Zeichen, maximale Zeichenanzahl pro Datei, Verteilung des Textes nach Zeichenanzahl und mehr.
    • Berechnet den Prozentsatz der gescannten PDFs und die durchschnittliche Erkennungsgeschwindigkeit.
  10. Zusammenfassungsgenerierung:

    • Erstellt eine detaillierte Zusammenfassungsbericht, der alle verarbeiteten Dateien, Statistiken und verwendeten Optionen enthält.
    • Loggt diese Zusammenfassung sowohl im Terminal als auch in der Protokolldatei.

Beispiel für die Verwendung

Führen Sie das Skript mit bestimmten Optionen aus:

./work2.sh --dpi 600 --compress lzw --lang rus+eng --no-keep-tiff --no-keep-txt ./docs
```Dieser Befehl legt die Auflösung auf 600 DPI fest, verwendet für TIFF-Dateien die LZW-Kompression, gibt die Sprachen Russisch und Englisch für die OCR an und behält keine TIFF-/PNG-/TXT-Dateien nach der Verarbeitung bei.

### Fazit

Skript ist ein umfassendes Werkzeug zur Batch-Verarbeitung von PDFs und Bildern mit OCR-Fähigkeiten. Es bietet detaillierte Protokollierung und Statistiken, was es für Automatisierung und Analyse in Dokumentenverarbeitungsaufgaben nützlich macht.

Fazit

Ein sehr praktisches Werkzeug, sowohl für die Suche nach optimalen Lösungen (z. B. Schreiben von Funktionen oder Dokumentation, Visualisierung und Protokollierung) als auch für die Dokumentation.

Arbeitsablauf

Die vollständige Arbeitsablaufdiagramm ist noch im Entwicklungsprozess. In der nächsten Artikel werde ich erklären, wie man AI Code Review in GitLab vor dem Merge Request (MR) verwendet.

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 vor-Review|B1(AI Devoxx):::pclass
    B1 --|Bearbeitung|C(Änderung):::wclass
    C --|Selbstprüfung|D{Selbstprüfung}:::oclass
    B --|Dein Code ist perfekt|F
    F --|Code Review|H2{Code Review}:::oclass
    H2 -.->|Weiterbearbeitung|B1
    D --|Geprüft|F(MR):::pmclass
    H2 --|Merged|E(Merged)

Links

Testergebnisse

Code-Review von 102 Zeilen Python-Code. Bei einigen Modellen wurde eine zweite Durchführung durchgeführt, um die Ladezeit der Modell in den Speicher und den „Warm-up“ zu eliminieren. In der Spalte „Recom“ ist die Anzahl der von der Modell generierten Vorschläge angegeben. Ein Pluszeichen bedeutet eine detaillierte Analyse. „Code = none“ bedeutet, dass kein korrigierter Code ausgegeben wird.

Die Analysezeiten in den Spalten „1st“ und „2nd“ sind in Sekunden angegeben.

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

Der finale Code wurde nicht auf Funktionalität getestet. Die Bewertung war subjektiv bezüglich der Tiefe der Analyse. Die interessantesten Modelle sind Nr. 5, 7, 14 und 18, sowie in geringerem Maße Nr. 20. Mit diesen Modellen wurde eine Zusammenfassung des ausgewählten Forum-Themas durchgeführt, und die Ergebnisse waren am besten mit Phi 4. Gemma 3 und Qwen 3 sehen ebenfalls gut aus. Gemma verfügt zudem über eine Bilderkennungsfunktion, während Qwen oft auf Englisch wechselt.

Der Test wurde auf einer RTX 5060Ti mit 16 GB (15,5 GB effektiv, bei denen Modelle größer als 9,5 GB nicht mehr geladen werden können) durchgeführt. Qwen wechselt oft auf Englisch, weshalb er schwer für Zusammenfassungen zu verwenden ist.

Server: https://lmstudio.ai

Der Kontext wurde von 4096 auf 8192 erhöht.

Für Code-Review und Chatbot:

Für Code-Review, Chatbot und Zusammenfassung:

Für Chatbot und Zusammenfassung:

Für Bilderkennung: