- JetBrains Full Line Code Completion (FLCC) ist eine AI-basierte Autovervollständigungsfunktion, die in PyCharm und GoLand verfügbar ist und effektives Schreiben von Logs sowie die Entwicklungseffizienz deutlich verbessert
- Sie reduziert den Aufwand für wiederholtes Schreiben von f-string-Logsyntax oder den Zugriff auf Variablen und DataFrames, und die AI erzeugt automatisch prägnante und klare, zum Kontext passende Logs
- Das Modell ist ein kleines LLM, das auf dem lokalen PC läuft, mit schneller Inferenz, geringer Speicherauslastung (rund 1 GB) und ohne Bedenken hinsichtlich Datenschutz oder Datenabfluss
- Laut dem Paper von JetBrains wurde ein Python-spezialisierter kleiner Transformer (100M Parameter) trainiert, der Ein-Zeilen-Autovervollständigung innerhalb eines Code-Kontexts von 384 Zeichen unterstützt; auch bei Datenvorverarbeitung und Tokenisierung wurden die Eigenschaften von Python aktiv berücksichtigt
- Der Erfolg von FLCC zeigt eindrucksvoll, wie zielgerichtete kleine Modelle statt riesiger LLMs die Produktivität in der realen Entwicklungsarbeit steigern können
Automatisches Schreiben von AI-Logs: die tatsächliche Veränderung der Entwicklerproduktivität
- JetBrains Full Line Code Completion (FLCC) bietet in PyCharm (seit Ende 2023 standardmäßig enthalten), GoLand und weiteren IDEs die Funktion zur Autovervollständigung kompletter Log-Anweisungen
- Bei sequenzieller Datenverarbeitung, asynchronen API-Aufrufen oder Vektoroperationen sind print-Debugging und detaillierte Logs unverzichtbar
- Durch wiederholte Eingaben wie f-strings, Zugriffe auf Variablen/Listen/DataFrames oder die Wahl des Loggers (
loguru vs. logging) wurde der Debugging-Flow häufig unterbrochen
- Zum Beispiel wirkt
logger.info(f'Adding a log for {your_variable} and {len(my_list)} and {df.head(0)}') mit loguru einfach, bringt aber kognitiven Aufwand durch Klammern, Variablennamen, DataFrame-Syntax und Logger-Typ mit sich
Wie FLCC den Entwicklungs-Flow und die Gewohnheiten beim Schreiben von Logs verändert hat
- Full Line Code Completion kombiniert alle Kontextinformationen wie Dateiendung, Pfad und den Code am Cursor zu einem Modell-Prompt und vervollständigt automatisch die natürlichste Log-Anweisung
- Die vorgeschlagenen Logs sind auf Variablen, DataFrames und Operationen im Kontext optimiert und dadurch oft klarer als von Hand geschriebene Varianten
- Dank der prägnanten Logs muss man sie nach dem Debugging oft nicht mehr aus dem Code entfernen; ihre Qualität reicht aus, um sie auch in der Produktionsumgebung beizubehalten
-
Beispiele
- Beim Prüfen einer Redis-URL:
redis = aioredis.from_url(settings.redis_url, decode_responses=True) → die AI schlägt automatisch ein Redis-Verbindungslog vor
- Beim Profiling eines DataFrame: Nach Definition von Daten und Spalten werden automatisch Profiling-Logs etwa für die
shape von df vorgeschlagen
Technische Merkmale und Implementierung des JetBrains-FLCC-Modells
-
Vollständig lokale Ausführung
- Modellinferenz und Code-Vorschläge werden ausschließlich auf dem lokalen PC verarbeitet, wodurch es ohne Sorgen um Datenschutz oder Code-Abfluss sicher ist
- Auf dem Mac beträgt die Modellgröße etwa 1 GB, wodurch der Speicherbedarf gering und die Geschwindigkeit sehr hoch ist
- Cloud-basierte Infrastruktur für große LLMs wie vLLM, SGLM, Ray oder PagedAttention ist nicht nötig
-
Python-spezialisierte kleine LLM-Architektur
- Die erste Implementierung basierte auf einem mit PyTorch entwickelten GPT-2-artigen Decoder-only Transformer (100M Parameter), später wurde die Architektur in Richtung llama2 verbessert
- Aus einem Subset von The Stack mit 6 TB und 30 Sprachen wurden nur 45 GB verwendet; Code-Kommentare und unnötige
import-Anweisungen wurden entfernt, um sich auf echte Codegenerierung zu konzentrieren
- Entsprechend den Eigenschaften der Sprache Python wandelt ein BPE-basierter Tokenizer Strukturen wie Einrückung und Scope in
<SCOPE_IN>/<SCOPE_OUT>-Tokens um, um unnötigen Tokenverbrauch durch Leerraumunterschiede zu vermeiden
- Die Größe des Tokenizer-Vokabulars wurde auf 16.384 optimiert
- Da in Python
import-Anweisungen häufig am Ende des Codes ergänzt werden, wurde diese Gewohnheit auch im Training berücksichtigt und import aus den Daten vollständig entfernt
-
Training und Optimierung
- Das Training lief mehrere Tage auf 8 NVIDIA-A100-GPUs, bewertet mit Cross-Entropy-Loss
- Durch Quantisierung wurde das FP32-Modell in INT8 umgewandelt (400 MB → 100 MB), sodass es ohne Belastung des PC-Speichers genutzt werden kann
- Für CPU-Inferenz kam ONNX RT zum Einsatz, später wurde der Server auf eine llama.cpp-Struktur umgestellt
- Mit Beam Search (
k=20) werden verschiedene Token-Sequenzen erzeugt; ein Zeilenumbruch dient als Abbruchkriterium für das Ergebnis
- Von dem Kontextfenster mit 384 Zeichen werden 50 % vorab prefetched und gecacht, sodass beim Zurückspringen des Cursors in vorherigen Code ohne erneute Inferenz sofort geantwortet werden kann
-
Plugin- und Integrationsarchitektur
- Das PyCharm-Plugin ist in Kotlin geschrieben und liefert Inferenz-Tokens über einen lokalen nativen C++-Server
- Cleane API, schnelle Antworten und Caching-Strategien sind auf reale Entwickler-Workflows optimiert
Konkrete Produktivitätsgewinne durch FLCC in der Entwicklung
-
Gleichzeitige Verbesserung von Log-Qualität und Effizienz
- Durch AI-autovervollständigte Logs verbessern sich sowohl die Qualität von print-Debugging/Produktionslogs als auch die Effizienz beim Schreiben
- Kurze und klare Logs werden automatisch vorgeschlagen, ohne den Debugging-Flow zu unterbrechen
-
Praktischer Wert kleiner spezialisierter LLMs
- Nicht große LLMs, sondern kleine AI-Modelle, die für einen bestimmten Zweck (Ein-Zeilen-Codevervollständigung) optimiert sind, bringen in realen Entwicklungsumgebungen große Produktivitätsgewinne
- Das ist ein repräsentatives Beispiel dafür, dass zielgerichtete kleine Modelle auch in anderen Bereichen reale Workflows substanziell verbessern können
5 Kommentare
So etwas wäre auch für C++ schön!
Dafür monatlich 20 bis 200 US-Dollar auszugeben, ist schon eher …
Diese Person meint wohl die Kosten für das IDE-Abonnement. FLCC wird in der kostenlosen Version nicht angeboten.
Aber es ist auch nicht so, dass die Leute nur deswegen Geld bezahlen.
Ah, in der kostenlosen Version ist das also nicht nutzbar. Da habe ich das falsch verstanden 😅
Da es lokal ausgeführt wird, scheint keine Gebühr erforderlich zu sein.