
Modelul AI care generează sugestii de cod este componenta principală a unui sistem de completare automată, dar nu este singurul factor important. Există multe mecanisme în spate, în special la nivelul pluginului, care decid:
• Când să fie afișată o sugestie.
• Dacă sugestia ar trebui să fie pe o singură linie sau pe mai multe linii.
• Ce sugestii să fie afișate sau ascunse – de exemplu, o sugestie poate fi incorectă semantic, poate avea un scor prea mic sau poate conține un limbaj nepotrivit.
Dar definirea regulilor de filtrare nu este întotdeauna simplă.
Pe scurt, vrem să afișăm doar sugestiile pe care le veți folosi cu adevărat. Asta înseamnă mai puține sugestii irelevante – cele pe care le anulați, editați sau ștergeți – fără a pierde din eficiența funcției de completare a codului.
Din punct de vedere al performanței, ne concentrăm pe:
✅ Creșterea ratei de acceptare.
✅ Reducerea ratei de anulare explicită și a procentului de sugestii editate/șterse.
✅ Menținerea sau îmbunătățirea procentului de cod completat.
Soluția: Modelul local de filtrare
Cum putem obține aceste îmbunătățiri? Răspunsul evident ar fi îmbunătățirea modelului de completare.
Însă această abordare are dezavantaje:
• Este costisitoare și consumă timp – antrenarea unui model mai bun necesită multe resurse.
• Nu putem analiza unde apar erorile – nu stocăm codul utilizatorilor, deci nu putem examina sugestiile slabe.
• Contextul singur nu este suficient – trebuie luat în considerare și comportamentul utilizatorului, precum și modul în care sugestiile se integrează în codul existent.
În loc să îmbunătățim modelul de completare LLM, am adoptat o abordare diferită: un model local de filtrare, ușor și eficient.
Acest model rulează peste modelul de completare AI și este antrenat folosind jurnale anonimizate.
Modelul analizează trei factori principali:
1️⃣ Contextul: Tipul limbajului, numărul și tipul importurilor, poziția cursorului.
2️⃣ Comportamentul utilizatorului: Viteza de tastare, timpul scurs de la ultima tastare.
3️⃣ Sugestia în sine: Dacă face referințe valide, dacă se repetă sau dacă este similară cu liniile învecinate.
Tehnologia din spatele modelului de filtrare
Rolul acestui model este simplu: decide dacă o sugestie trebuie afișată sau respinsă pe baza acțiunilor utilizatorului. Însă am ajustat modelul astfel încât să acorde o greutate mai mare acțiunilor explicite ale utilizatorilor, cum ar fi acceptarea sau anularea unei sugestii. Dacă utilizatorul editează sau șterge o sugestie după acceptare, aceasta este considerată mai puțin relevantă – cu cât modificările sunt mai mari, cu atât sugestia inițială este considerată mai puțin valoroasă.
Modelul este construit folosind CatBoost, un algoritm eficient care nu necesită volume uriașe de date. Este optimizat pentru a fi foarte ușor, ocupând doar 2,5 MB și rulând direct în Kotlin pe dispozitivele utilizatorilor, oferind predicții în 1-2 milisecunde.
Rezultatele obținute
Testele A/B realizate în Early Access Program (EAP) au arătat rezultate excelente:
✔️ Rata de acceptare a sugestiilor a crescut cu aproximativ 50%.
✔️ Rata de anulare explicită a scăzut cu aproximativ 40%.
✔️ Procentul de cod completat a rămas stabil.
Am implementat oficial modelul de filtrare în versiunea 2024.1 a JetBrains IDEs, acoperind limbaje precum Java, Kotlin, Python, PHP, JavaScript/TypeScript, Go, CSS și Ruby. În versiunile ulterioare, am extins suportul și pentru C#, C++, Rust și HCL, precum și pentru completarea cloud cu Mellum în Python, Java și Kotlin.
În prezent, lucrăm la extinderea modelului pentru și mai multe limbaje.
Ce am învățat
Chiar și atunci când un model LLM funcționează bine, există mereu loc de îmbunătățire. Nu este nevoie întotdeauna de modele masive și complexe pentru a obține rezultate mai bune. Uneori, utilizarea inteligentă a datelor suplimentare, cum ar fi jurnalele de activitate, poate face o diferență semnificativă.
Ce urmează pentru completarea automată a codului cu AI? Cât de departe putem merge?
![]()
Etiam magna arcu, ullamcorper ut pulvinar et, ornare sit amet ligula. Aliquam vitae bibendum lorem. Cras id dui lectus. Pellentesque nec felis tristique urna lacinia sollicitudin ac ac ex. Maecenas mattis faucibus condimentum. Curabitur imperdiet felis at est posuere bibendum. Sed quis nulla tellus.
63739 street lorem ipsum City, Country
+12 (0) 345 678 9
info@company.com
