- 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!
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“):

## 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).

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:

## 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>`:

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.

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
-
Farbdefinitionen:
GREENundNCwerden für farbige Ausgabe im Terminal verwendet.
-
Hilfsfunktion (
show_help):- Gibt Anweisungen zur Verwendung, Beschreibung, Optionen und Beispiele dafür, wie das Skript ausgeführt werden kann.
-
Argumentenparsen:
- Das Skript verwendet eine
while-Schleife mitcase-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.
- Das Skript verwendet eine
-
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.
-
Protokollierung:
- Initialisiert eine Protokolldatei, um alle Aktionen und Ausgaben zu protokollieren.
-
Dateifinder:
- Verwendet
find, um PDF- und JPG/JPEG-Dateien im angegebenen Verzeichnis oder im aktuellen Verzeichnis (falls keins angegeben wurde) zu lokalisieren.
- Verwendet
-
Verarbeitung von PDF-Dateien:
- Für jede PDF-Datei wird überprüft, ob Text bereits vorhanden ist, indem
pdftotextverwendet 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.
- Für jede PDF-Datei wird überprüft, ob Text bereits vorhanden ist, indem
-
Verarbeitung von Bilddateien:
- Für jedes JPG/JPEG wird direkt OCR mit Tesseract ausgeführt.
-
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.
-
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)
