|
| 1 | +# LLM i limit kontekstu: Dlaczego JSON to ślepa uliczka i jak Code2Logic zmienia zasady gry |
| 2 | + |
| 3 | +**Autor: Tom Sapletta** |
| 4 | + |
| 5 | +Jeśli kiedykolwiek próbowałeś "nakarmić" model językowy (LLM) całym repozytorium kodu, by poprosić go o refaktoryzację, znalezienie błędu czy wygenerowanie dokumentacji, na pewno zderzyłeś się ze ścianą. Ścianą tą jest limit okna kontekstowego oraz zjawisko znane jako *lost in the middle* – model zapomina lub ignoruje informacje znajdujące się w środku długiego promptu. |
| 6 | + |
| 7 | +Cześć, jestem Tom Sapletta i od dłuższego czasu pracuję nad tym, jak zoptymalizować komunikację między kodem źródłowym a sztuczną inteligencją. Tak właśnie narodził się projekt **Code2Logic**. |
| 8 | + |
| 9 | +## Dlaczego powstał Code2Logic? |
| 10 | + |
| 11 | +Kiedy LLM analizuje nasz kod, nie potrzebuje wszystkich średników, nawiasów, wcięć ani nadmiarowej struktury danych. Tradycyjne podejście polega na serializacji struktury projektu do formatu JSON. Niestety, JSON jest dla LLM-ów "głośny". |
| 12 | + |
| 13 | +Spójrzmy na to zjawisko wizualnie: |
| 14 | + |
| 15 | +```text |
| 16 | ++-----------------------------------+ +-----------------------+ |
| 17 | +| Tradycyjny JSON (Duży szum) | | Format TOON (Czysto) | |
| 18 | +|-----------------------------------| |-----------------------| |
| 19 | +| { | | classes: | |
| 20 | +| "User": { | | User | |
| 21 | +| "methods": [ | | - get_email() | |
| 22 | +| { | | - set_email(e) | |
| 23 | +| "name": "get_email", | | | |
| 24 | +| "type": "string" | | | |
| 25 | +| } | | | |
| 26 | +| ] | | | |
| 27 | +| } | | | |
| 28 | +| } | | | |
| 29 | ++-----------------------------------+ +-----------------------+ |
| 30 | +``` |
| 31 | + |
| 32 | +W formacie JSON większość tokenów, za które płacimy (i które marnują "uwagę" modelu), to nawiasy klamrowe, cudzysłowy i powtarzające się klucze. Code2Logic powstał po to, aby wyekstrahować **czystą logikę** z kodu i przekazać ją do modelu w maksymalnie skompresowanych formatach, takich jak nasz autorski **TOON** czy **LogicML**. |
| 33 | + |
| 34 | +Poniższy diagram obrazuje, jak Code2Logic zmienia architekturę przepływu danych: |
| 35 | + |
| 36 | +```mermaid |
| 37 | +graph TD |
| 38 | + A[Repozytorium Kodu] -->|Parsowanie<br/>Code2Logic| B(Abstrakcyjna Reprezentacja) |
| 39 | + B --> C{Wybór Formatu} |
| 40 | + |
| 41 | + C -->|Tradycyjny| D[JSON / XML] |
| 42 | + D -->|Zapychanie kontekstu| E(LLM traci skupienie) |
| 43 | + E -->|Gorsza jakość| F[Zła odpowiedź / Błędy] |
| 44 | + |
| 45 | + C -->|Zoptymalizowany| G[TOON / LogicML] |
| 46 | + G ==>|Maksymalna kompresja tokenów| H((LLM skupia się<br/>na architekturze)) |
| 47 | + H ==>|Wysoka precyzja| I[Doskonały Kod / Refaktoring] |
| 48 | + |
| 49 | + style G fill:#2ecc71,stroke:#333,stroke-width:2px,color:white |
| 50 | + style H fill:#3498db,stroke:#333,stroke-width:2px,color:white |
| 51 | + style D fill:#e74c3c,stroke:#333,stroke-width:2px,color:white |
| 52 | +``` |
| 53 | + |
| 54 | +## Fascynujące rezultaty benchmarków |
| 55 | + |
| 56 | +Zbudowałem w pełni zautomatyzowane środowisko testowe, które sprawdza, jak LLM (np. `google/gemini-3-flash-preview`) radzi sobie z rekonstrukcją kodu na podstawie różnych specyfikacji. Otrzymane wyniki przerosły moje oczekiwania i jednoznacznie pokazały, że format ma znaczenie. |
| 57 | + |
| 58 | +Oto co odkryliśmy w trakcie naszych najnowszych benchmarków na próbie 20 plików: |
| 59 | + |
| 60 | +### 1. Kolosalna różnica w rozmiarze i tokenach |
| 61 | +Zrzut struktury tego samego projektu waży: |
| 62 | +* **JSON:** ~918 KB (~235 000 tokenów) |
| 63 | +* **TOON:** ~170 KB (~43 000 tokenów) |
| 64 | + |
| 65 | +Zredukowaliśmy objętość ponad 5-krotnie! Oznacza to, że do kontekstu modelu jesteśmy w stanie zmieścić 5 razy większy projekt, płacąc ułamek oryginalnej ceny. |
| 66 | + |
| 67 | +### 2. LLM lepiej rozumie skompresowaną wiedzę |
| 68 | +Mogłoby się wydawać, że JSON, jako standard branżowy, będzie najbardziej zrozumiały dla maszyny. Prawda jest jednak inna. Brak redundancji w formacie TOON sprawia, że LLM znacznie rzadziej się "gubi". |
| 69 | + |
| 70 | +Wyniki z naszego *Project Benchmark* (Zdolność LLM do odtworzenia poprawnego strukturalnie i semantycznie kodu na bazie specyfikacji): |
| 71 | + |
| 72 | +```mermaid |
| 73 | +xychart-beta |
| 74 | + title "Jakość Reprodukcji Projektu przez LLM (Wynik w %)" |
| 75 | + x-axis ["TOON", "YAML", "Markdown", "LogicML", "JSON", "CSV", "Gherkin"] |
| 76 | + y-axis "Zgodność rekonstrukcji (%)" 40 --> 90 |
| 77 | + bar [82.7, 79.2, 76.2, 76.0, 73.5, 67.8, 48.0] |
| 78 | +``` |
| 79 | + |
| 80 | +Format **TOON uzyskał imponujące 82.7%**, zostawiając JSON (73.5%) daleko w tyle. Jeszcze ciekawszy jest **LogicML**, który zużywa średnio zaledwie 245 tokenów na plik (10-krotnie mniej niż JSON!), a nadal utrzymuje wynik powyżej 76%. |
| 81 | + |
| 82 | +## Wnioski i wyzwania na przyszłość |
| 83 | + |
| 84 | +Dane z benchmarków pokazały nam drogę, ale obnażyły też obszary do natychmiastowej poprawy: |
| 85 | + |
| 86 | +1. **Przejście z heurystyk (Regex) na AST (Abstract Syntax Tree):** |
| 87 | + Obecny benchmark świetnie radzi sobie z Pythonem, ale traci skuteczność przy ocenie rekonstrukcji w JavaScripcie, Javie czy Rust (często oceniając wygenerowane struktury na 0%). Wdrożenie parserów opartych na AST sprawi, że metryki będą w 100% niezależne od języka, a ewaluacja struktury (klasy, funkcje) nie będzie mylona z różnicami w formatowaniu tekstu. |
| 88 | + |
| 89 | +2. **Głębsza reprodukcja logiki funkcji:** |
| 90 | + O ile ogólna architektura klas odtwarza się na poziomie ~82%, o tyle rekonstrukcja wewnętrznej logiki ukrytej *w ciałach funkcji* nadal oscyluje wokół 38.5%. Rozwiązaniem, które właśnie testujemy, jest równoległe dołączanie pliku `project.functions.toon`, który w kompresowanym formacie wstrzykuje informacje o przepływie danych wewnątrz metod. |
| 91 | + |
| 92 | +## Podsumowanie |
| 93 | + |
| 94 | +Przekładanie całego repozytorium do formatu JSON, by porozmawiać z LLM-em o architekturze, to ślepa uliczka zjadająca budżet i precyzję. **Code2Logic** udowadnia, że kluczem do lepszych wyników AI nie zawsze jest większy lub droższy model – częściej jest nim po prostu podanie mu wiedzy w lepszym, "czystszym" formacie bez zbędnego szumu. |
| 95 | + |
| 96 | +Dalszy rozwój projektu to pełna abstrakcja języków poprzez AST i poprawa ewaluacji behawioralnej. Przed nami jeszcze sporo pracy, ale już teraz TOON i LogicML mogą uratować Wasze portfele i nerwy. |
| 97 | + |
| 98 | +--- |
| 99 | +*Jeśli interesuje Cię, jak optymalizować pracę sztucznej inteligencji z kodem, |
| 100 | +sprawdź [repozytorium projektu Code2Logic](http://github.com/wronai/code2logic) na GitHubie!* |
0 commit comments