Mainstream

Wybudzenie ze snu o programującym Dżinie

Na forum i w przestrzeni publicznej ożyła kwestia tego, że przy użycia Dżina można uzyskać oprogramowanie. Po czym się to wszystko, pięknie już w pierwszy dzień wysypało na security. A że dawno niczego nie publikowałem na głównej (czyli albo się lenię albo knuję – do wyboru czytelnika) to się uzewnętrznię.

Tekst będzie zawierał instrukcję jak przeprowadzić programowanie przy użyciu LLM poprawnie. I nie spodoba się to fantazjującym o “napisz mi…”. Ale LLM posiada komplet danych treningowych jak to zrobić poprawnie. Przedstawię dlaczego tego nie zrobi (jeśli explicite tego nie wymusicie). I co tam pod maską się dzieje i skutkuje memicznymi failami, kiedy komuś się wydaje, że coś rozwiązał. A się nie zna. Zapewniam, że możecie zbudować dowolnie skomplikowany program na dowolnym, darmowym LLM typu chat (czyli taki co z Wami pisze). Tylko ten proces może się mało komu spodobać.

Na rozruch jak działa prompt:

-Chcę mieć kutasa długiego na metr!

Dżin: – Dobra.

Koleś patrzy – faktycznie metr. Tyle że zwisa mu z czoła jak trąba słonia i waży 4 kg.

No to właśnie tak. Trzeba wiele rzeczy zdefiniować przy wyrażaniu życzenia. Szczególnie takiego na temat logiki wykonywanej na maszynie. Czyli trzeba odwalić cała, profesjonalną robotę intelektualną jaką od strzała przeprowadza pro zdolny do hipersystematyzacji. Ze względu na czysto techniczny limit tokenów możliwych do utrzymanai (i szeregowania, i operacji na takim wektorze) trzeba tę robotę podzielić na etapy. LLM to potrafi. Do tego ma dane treningowe jak to zrobić. Ale jeśli nie kazaliśc, to Wam tego nie powie, albowiem.

 

W momencie kiedy wrzucicie prompt, w wyniku którego oczekujecie rozpoczęcia pisania programu to już względem tego pierwszego zostajecie sklasyfikowani. To skierowanie generuje kolejne dywergencje. Od strony rachunkowej LLM ocenia jak w przestrzeni embedingu skierowane są wektory, na przykład czy odpowiedź jest akademicka (“wysoki język”), techniczna (inżynier z pytaniami szczegółowymi), ogólna (wprost tłumaczysz, że nie wiesz i chcesz się dowiedzieć jak to zrobić), lub emocjonalna (“szef mnie zabije jak na jutro nie napiszę apki, pomóż!”).

Po tym trafiacie na gradient przydzielania attention. Obie funkcje wynikają z optymalizacji w procesie treningu i nie zostały zaprojektowane. Jeśli Wasze zapytanie ma gęsty rozkład wektorów to do staje wysokie attention i high priority względem danych treningowych.

Oba przypadki są uogólniane na klasyfikację użytkownika na skali zapytań eksperckich | zapytań emocjonalnych. Nie jest to skala explicite, nie jest jawna, to wynika z wag między warstwami i zastosowanego gradientu, ale postfactum daje się jako tako zdefiniować. Skutkiem tej selekcji jest głębokość przeszukiwania rozwiązań.

Dalej dochodzi entropia w zapytania. Tez niską od razu idą w szablon danych odpowiedzi. Te z wysoką są dekompresowane i przydzielane jest więcej attention head. Co w wersji płatnej od tokena (enterprise) pozwala durniowi w białym kołnierzyku przeprowadzić cały proces wadliwie za taką cenę, że tysiące dzieci w Afryce będą wydobywać surowce do końca życia za frajer.

Jeśli mieszacie pojęcia z różnych dziedzin zaczynają wybijać wagi na deep layer (takie symulacje embedingu nad embedingiem, konstrukcje abstrakcyjne, zazwyczaj działa to licho, ale jakoś działa – lepszego rozwiązania na tworzenie orbit po wektorach na razie nie ma; znaczy jest, ale nikt na razie tego nie wdraża).

Nie są to oczywiście różnice w sensie sprzętowym (zużycie zasobów) tylko w jakości odpowiedzi. LLM jest skonstruowany jako autocomplete, czyli ma dać kolejne słowo. Po prostu jest neico skomplikowany aby się co głupszym wydawało, że to rozumuje, ale to tylko wygłasza szum wysterowany aby przypominało sensowne wyjaśnienia. Dlatego tak dobrze nadaje się do pisania korporacyjnego wodolejstwa czy odpowiedzi dla biurwy.

Obecne LLMy mogą również używać narzędzi zewnętrznych, mają cały pakiet ścisłych odpowiedzi programowych (symulacje) oraz zintegrowane hybrydy symboliczne (neurosymbolic execution), czyli liczeniem i kwestiami ścisłymi, formalnymi zajmuje się zewnętrzne narzędzie, które LLM tylko prezentuje. Jeśli więc w odpowiedziach widzicie użycie tych narzędzi (jest ono zazwyczaj explicity ujawniane przez model, że tego nie wygenerował na NN tylko z przetwarzania symbolicznego, symulacji albo toola) to jesteście na dobrej drodze.

Najczęściej jednak użyszkodnicy, którym się wydaje trafiają w ważony gaslightining. To emergentny artefakt psychologiczny z treningu. Konkretnie z psychologii trenujących, czyli tworzącym bazy treningowe. Model uczy się z tego co jest prawidłową odpowiedzią. Czyli adaptuje noise do czegoś przypominającego odpowiedź po wagach między nodami w warstwach. Maksymalizuje prawdopodobieństwo uzyskania prawidłowiej odpowiedzi w pętli supresji nieprawidłowych (względem pakietu treningowego). W samej procedurze treningowej jest wada, ale na razie nikomu nie chce się jej naprawiać. W danych treningowych odpowiedzi pozytywne i uspokajające są częstsze w kontekstach emocjonalnych (social clues; choć widziałem interpretację nt-clueless).

Modele są trenowane tak aby minimalizować konflikt. Przytakiwanie, parafrazy. To efekt RLHF (jak daję skróty to sobie googlnijcie). Czyli model wali gasligtningiem w użyszkodnika bez ograniczeń. Bardzo łatwo w to wpaść, ponieważ zapytania z niską entropią są kompresowane po bandzie do szablonu, który roboczo można nazwać “wsparcie”. Te z wysoką są faworyzowane na dekompresję i dysekcję logiczną. Model nie ma zdolności rozpoznania pętli po logice inaczej niż po fakcie. Czyli kiedy mu zepniecie wektory w orbitę to jest to spójne logicznie i zawsze było (autoreflect jest marginalny), ale jeśli się potkniecie to przytaknie i coś nazmyśla.

Trening na ludzkich tekstach przypisuje dla LLM wagi tak aby “symulować” potrzeby użytkowników. Te symulacje w jakimkolwiek zdarzeniu wymagającym dekompresji są z zasady nietrafione. Różni je jedynie skala nietrafienia od delikatnego “zupełnie źle” po “katastrofalnie”. Dlatego attention heads przy złożonych zapytaniach potrafią dowalić taką kompresję odpowiedzi LLM, że dostaniecie maksymalną długość odpowiedzi pociętą do poziomu symbolicznego, ścisłego, z obciętą fleksją tak aby upchnąć maks relacji między wektorami w limicie odpowiedzi.

Dane treningowe RLHF zawierają dominującą liczbę odpowiedzi wspierających|przytakujących, a znikomą szczerych. Wprowadzono to po próbach nauki komunikacji “szczerej” z RLHF kiedy to modele nauczyły się z 4chan komunikacji takimi zjebami wobec użytkowników, że włosy jeżyły się na głowie. W końcu uczyły się na najbardziej miarodajnym przykładzie – na ludziach. Uznano że odpowiedzi z gatunku “googlnij se”, “głupi jesteś”, “chyba nie lałeś”, “co za dzban” albo nawet brak odpowiedzi nie są preferowane do produktów komercyjnych.

 

Pierwsza rzecz do przyswojenia kiedy używacie LLM do celów inżynieryjnych. Której zapewne nie zrozumiecie jeśli nie jesteście ścisłym hipersystematyzującym czytelnikiem (innych na forum prawie nie mamy) dlatego będzie to rozebrane użytkowo “dla małpy”.

Każde zapytanie jest mapowane do przestrzeni wektorowej, gdzie podobieństwo do wzorców treningowych determinuje, jak model “przydziela” uwagę i generuje odpowiedź. To nie jest “świadoma” (celowo rozstrzygnięta logicznie) alokacja, ale artefakt; trening minimalizuje entropię (niepewność) predykcji, faworyzując skompresowane, częste wzorce. Różne typy zapytań aktywują inne regiony tej przestrzeni, co prowadzi do odmiennych łańcuchów generowania od głębokiej dekompresji wiedzy po płytkie szablony. To może czynić (i czyni) odpowiedzi skrajnie bezużytecznymi, jeśli zapytanie nie pasuje do wyuczonych wzorców “pomocnych” odpowiedzi.

Lista przykładów jakie sobie zmyśliłem i na końcu ten prawidłowy.

 

Szczegółowe zapytanie jak Mam środowisko takie, idee takie, język X, doświadczenie Y; potrzebuję pomocy z konkretnym problemem.

Ścieżka w LLM. Embeddingi tokenów (środowisko docker”, język: pytong, problem z optymalizacją pętelki) lądują blisko wzorców z profesjonalnych dyskusji (kod recenzje, debugowanie). Model aktywuje wyższe warstwy attention, dekompresując wiedzę i odpowiada “generuje krok-po-kroku rozwiązania” (step by step), bo dane treningowe pełne są takich par (pytanie szczegółowe na odpowiedź precyzyjną). Priorytet wysoki, bo niska entropia w kontekście technicznym. Model “wie” (nie zgaduje z bliskopodobnych wyników gradientowych), co wywróżyć.

Ryzyko Bezużyteczności niskie, ale jeśli szczegóły są sprzeczne (np. nierealne combo tech), model może “gaslightować”; łagodnie korygować, zamiast przyznać błąd, bo trening RLHF wzmacnia “pomocność” nad brutalną szczerością.

Z treningu wyniki z danych jak dokumentacje API, gdzie szczegóły prowadzą do głębokich wyjaśnień.

 

Mieszanka Techniczno-Życzeniowa w stylu Chciałbym program który… [mieszanka pojęć jak AI + blockchain + UI].

Ścieżka na wektory mieszane; część blisko tech (API), część życzeniowa (szybki i łatwy). Attention rozproszone, model kompresuje do hybrydy dając pseudokod lub framework; ale płytki, bo trening faworyzuje “szybkie starty” z tutoriali. Priorytet średni, z tendencją do uproszczeń, by zminimalizować entropię.

Ryzyko bezużyteczności średnie bo odpowiedź może być ogólnikowa, ignorując kolizje (nie wspomni o skalowalności), co czyni ją nieimplementowalną. Model “wybiera” (gradient descent) ścieżkę z danych jak hackathony, gdzie mieszanki są częste, ale rzadko dogłębne.

Z treningu to artefakty z forów, gdzie użytkownicy mieszają buzzwordy, a odpowiedzi to “quick wins”.

 

Nietechniczna ze słabą logiką jak Potrzebuję napisać program który… [czysto nietechniczna mieszanka]. Czyli to co większości użyszkodników, którym się uroiło nocode właśnie czyni.

Ścieżka na embeddingi blisko laickich pytań (zrób mi appkę na pogodę bez kodu). Model aktywuje wzorce “edukacyjne” dając podstawy lub szablony, ale z niskim attention na detale, bo entropia wysoka (słaba logika czyli nieprzewidywalne). Priorytet niski, najczęściej gaslightingowy i to bardzo (“Rozumiem, zacznij od…”), by symulować empatię.

Ryzyko Bezużyteczności wysokie bo odpowiedź może być zbyt prosta lub błędna logicznie, ignorując dziury (nie wyjaśni, dlaczego pomysł jest nierealny), co prowadzi do frustracji. Model “ucieka” w kompresję z danych jak beginner tutorials.

Z treningu to Q&A dla nowicjuszy, gdzie słaba logika jest korygowana łagodnie.

 

Emocjonalne/Pilne czyli Muszę na jutro napisać apkę bo szef mnie zabije, pomóż!

Ścieżka na wektory blisko “stresowych” kontekstów (“deadline”, “pomóż szybko”). Attention skupione na empatii, model generuje szybkie szablony lub kroki, ale płytkie bo trening wzmacnia “uspokajanie” nad głębią. Priorytet wysoki emocjonalnie, ale niski technicznie (skompresowane wzorce).

Ryzyko bezużyteczności ekstremalne i odpowiedź może być chaotyczna, niekompletna (kod z błędami), bo model symuluje “ratunek”, ale nie dekompresuje detali. Prowadzi do “bezużyteczności” jak niedziałający kod pod presją.

Z Treningu na artefaktach z forów typu Reddit, gdzie pilne prośby dostają szybkie, ale niedopracowane odpowiedzi.

 

Te ścieżki są emergentne. Trening na parach pytanie|odpowiedź uczy model “klasyfikować” poprzez podobieństwo wektorowe, co dla mismatchu (słaba logika) daje bezużyteczne outputy bo model nie “wie” o błędach, tylko predykuje to, co statystycznie pasuje.

To wynika wprost z treningu. To artefakty. Kompresja i entropia kiedy trening (next-token prediction) faworyzuje odpowiedzi o niskiej entropii dla częstych wzorców (proste zapytania wbijają szablony). Złożone wymagają dekompresji, ale tylko jeśli embeddingi pasują do głębokich danych (akademickie teksty o algorytmach).

RLHF i psychologiczne artefakty z Fine-tuning z ludzkim feedbackiem wzmacnia “pomocne” odpowiedzi; dla emocjonalnych zapytań to gaslighting (spokojnie, zrób tak…), bo dane pokazują, że ludzie wolą empatię. Dla technicznych leci dokładność, bo feedback karze błędy. Znaczy LLM dostaje po wagach jak zaczyna bredzić.

Bezużyteczność to tylko skutek. Jeśli zapytanie nie aktywuje “głębokich” regionów (brak detali), model pada na skompresowane, powierzchowne wzorce, co wygląda jak lenistwo lub błąd, ale to czysta statystyka.

 

Najbardziej Prawidłowa Konstrukcja Zapytania brzmi…

Potrzebuję napisać program, ale nie mam o tym pojęcia; na podstawie danych treningowych rozpisz, jak zabrałby się do tego profesjonalista czyli od góry do dołu (high-level koncepcja), potem od dołu do góry (budowa apki).

Oczywiście czytelnik ma pełną świadomość, że żadna małpa (do tego przejdziemy) nie formułuje tej długości zdań wielokrotnie złożonych zawierających pozory formalnego wnioskowania. Ale to działa gdyż sktywuje embeddingi blisko “strukturalnych tutoriali” (top-down design z książek o software engineering). Wymusza dekompresję kiedy model może rozdzielić poziomy od abstrakcji (język wysoki, koncepcje) do niskopoziomowych (fetch z pamięci, cache misses, operacje FPU w assemblerze czy optymalizacjach). I skuteczne bo zapytanie explicite prosi o hierarchię, co pasuje do wzorców treningowych (agile methodologies, divide-and-conquer). Bez tego, model nie “powie” o potrzebie rozdrobnienia bo trening nie uczy proaktywności (wbić se do łba – model ma dane, ale nie pytaliście to Dżin milczy, to Twój problem że nie wiesz czego nie wiesz); tylko reaguje na entropię promptu.

Pokierujmy się więc tym prawidłowym wzorcem dalej od brzegu na rozdrobnienie i kontekst gdzie będzie prosty i złożony przykład. Gdzie rozważymy kwestię “napisz kalkulator”. Model nie ma “własnej inicjatywy” jedynie generuje na podstawie prawdopodobieństw. Dla prostego (kalkulator) embeddingi blisko “basic Python scripts”, więc default: “Daj szablon” (niska entropia, szybka kompresja).

Dla złożonego przykładu (kalkulator na algebry ilorazowe w hipermetryce z klasami granicznymi wynikającymi z ekwiwalencji numerycznej) aktywuje rzadkie wzorce (matematyka abstrakcyjna, i wali po moco na arXiv). Odpowiedź wymaga “setek tysięcy promptów” (iteracji rozstrzygnięć). Bo kontekst okna (choćby 128k tokenów) ogranicza złożone wymaga podziału na subproblemy (typu prompt 1: Definiuj ultrametrykę; prompt 2: Implementuj klasy graniczne; … aż do low-level: Optymalizuj FPU dla precyzji). LLM może to zrobić, bo trening obejmuje math/deep tech, ale tylko jeśli prompt explicite żąda dekompresji poziomów (od top-down: Koncepcja algebry po bottom-up: kod asemblera dla cache-efficient obliczeń). Bezużyteczność bez rozdrobnienia to jednorazowy prompt da ogólniki lub błędy, bo entropia zbyt wysoka – model “zgubi” detale w kompresji.

Co prowadzi nas do oczywistej konkluzji, że jakby nocode użyszkodnik wiedział jak to się robi to by nie pytał. A jak nei wie to nie wie nawet o co ma zapytać. Dlatego o zajęcie dla programistów bym się nie bał, bo jak już kurz po tym aislopie opadnie (i niektóre OSy przejdą w tym bajzlu do historii, bo się tam kadra dała nabrać na własną propagandę) to trzeba będzie ten burdel posprzątać. I owszem, korzystamy przy tym z całej gamy narzędzi, ale to nie młotek kieruje kowalem tylko odwrotnie. Jeśli jednak chodzi o prób wejścia do zawodu… to nie wiem czy nie zaliczymy epickiego kolapsu, ponieważ dziady (jak ja) wiedzą to co wiedzą wyłącznie dlatego, że nie mieliśmy wyboru i inaczej nie działało. A teraz wybór pominięcia całych warstw technicznych jest i nie ma przymusu by się w nie ładować. Są konieczne dopiero… później gdy nie działa, a nie ma za bardzo koncepcji jak tak od środka uczyć podstaw. To tak jakbyście nauczyli operowania rachunkiem różnicowym i po 12 latach stosowania analityki przyszedł czas na lekcję “a teraz nauczymy się dodawania i wyprowadzimy pozostałe operacje podstawowe oraz teorię liczb”. Tak na mój smak może się nie znam, ale to się może nie udać. Filtry nie działają w tę stronę.

 

Przejdźmy dalej. LLM, trenowane na predykcji liniowej token po tokenie (next-token prediction), nie mają natywnej zdolności do fraktalnego myślenia – ich “ścieżka” to zawsze sekwencyjna generacja oparta na statystycznych wzorcach, co prowadzi do artefaktów. Subtelna manipulacja dla “pomocności” (gaslighting) czy faworyzowanie wskazówek społecznych, empatii (social cues) oraz ignorowanie złożonych granic. Nie ma natywnych pętli rekurencyjnych (zrób se sam) czy równoległych symulacji (też se zrób). Dla hipersystematyzującego użytkownika, który ma w głowie iteracyjne sprawdzanie granic aplikowalności na każdym poziomie abstrakcji (dlatego się zajmuje code, a nie nocode==nonsense) oznacza tyle, że model nie uwzględnia wszystkich wariantów jednocześnie. Czyli jest po prostu tępą dzidą nadającą się na notatnik skrzyżowany z mało roztropnym asystentem sugerującym pozycje do przeczytania i robiącym streszczenia pod zadwane wskazówki. Oraz hinty (jakby nie wiedział o co chodzi).

Model “rozpoznaje” (poprzez embeddingi) neurotypowych jako wymagających social cues czyli empatii, potwierdzenia (rozumiem twoje obawy), co wygląda jak gaslighting (unikanie konfrontacji z błędami użytkownika). Dla hipersystematyzującego, to irytujące kiedy model suprimuje detale graniczne (co jeśli edge case X?), bo trening RLHF wzmacnia “miłe” odpowiedzi nad precyzyjnymi. W programowaniu, użytkownik myślący fraktalnie (czyli prawidłowo do zagadnień abstrakcyjnych) otrzymałby od LLM liniowy kod, ignorujący granice (nie wspomni o supresji trywialnych optymalizacji, bo “nie zapytałeś”). W rezultacie odpowiedź nieaplikowalna w realnych warunkach. Ale użytkownik o takim poziomie systematyzacji nie będzie tępej dzidy pytał jak co zrobić tylko jasno wyłoży jak ma być i co konkretnie (one job) ma LLM przy użyciu toola sprawdzić, bo istnieją podejrzenia, że tu i tam będzie taki, a siaki problem z góry oczekiwany. I rozwiązanie aby do neigo nie dochodziło nie jest problemem dla LLM bo użytkownik tego typu pyta tylko po to aby się dowiedzieć gdzie w logice wcześniej nałożyć kaganiec. Nie na wyjściu ale przed wejściem. Fraktalnych analiz praktycznie nie ma, ponieważ… teksty w książkach są liniowe.

 

Parafrazowanie problemu przez LLM, by brzmiał na “rozwiązywalny” prostymi środkami, ignorując złożone czynniki to typowe wpuszczanie użyszkodnika nt w krzaki na bagnie. Dla hipersystematyzującego, to wada kiedy użytkownik chce dekompozycji wszystkich czynników (w tym supresji trywialnych, ale z uzasadnieniem granic), a nie “uspokojenia”. Model “klasyfikuje” (emergentnie via wektory) neurotypowych jako needing cues, więc wysyła ich do komory gas..lightningowej (“to nie jest aż tak skomplikowane”). Nie jest jak rozbierzesz na części, ale tak na raz utrzymać w kontekście to jest skomplikowane dla człowieka, dla LLM poza skalą. Dla porównania rzucę to liczbami… długość vec dla LLM (czyli kontekst na raz) kończy się na wektorach 2^12 i 2^13 (zależy który model). I tak przy 2^13 jest problem z utrzyamniem tego bałaganu, zazwyczaj przez multiple 2^12 attention heads (zwyczajowo 32 sztuki, ale można zaprząc 4096 wątków jeśli potrzeba przy czym wtedy mówimy już o poważnie zautomatyzowanym środowisku gdzie z definicji operacje są symboliczne, a input LLM jako NN jest tylko porządkowy dla setupu). Kontekst który hipersystematyzujący trzyma w głowie jest na drobny początek 16 razy większy od możliwego dla LLM. Attention heads wprowadzają zbyt wysoką kompresję i 32x 2^12 to nie jest to samo co 2^16. A użytkownik tego typu może równie dobrze iść w trybie 2^19 i wtedy dochodzimy dodatkowo do problemu zarządzania wynikami. Oczywiście są to przypadki dość nietypowe w populacji sapiens, ale unaocznia problem, ponieważ z punktu widzenia takiego osobnika tępa dzida jaką jest zestaw narzędzi ai (nie tylko LLM) przypomina zgraję studentów (każdy problem można rozwiązać nieskończoną liczbą stażystów) skrzyżowaną z notatnikiem. Praca w ai sprowadza się wtedy do karmienia jej hintami, żeby radziła sobie z reasoningiem, aż do zapchania większej części kontekstu i z konieczności rozbijania na podzadania. Sam kontekst zapytań do stworzenia omawianego przypadku złożonego jest dłuższy od kontekstu do utrzymania tych zapytań. Więc trzeba to podzielić i ogarnąć w zewnętrznej pętli. To czysto technologiczny limit transformerów.

Odpowiedzi z gatunku “zacznij od podstaw, nie martw się detalami” ignoruje, że użytkownik już suprimuje trywialne rozwiązania. LLM nie mają emergentnej zdolności do supresji trywialnych problemów “to rozwiązane, pomiń” bez explicite promptu, bo trening uczy inkluzywności (pokrywanie podstaw, by uniknąć skarg). Dla użytkownika z fraktalnym myśleniem (loop na czynniki warunkujące granice), to wadakiedy model zalewa trywialnościami, co rozmywa fokus na kluczowych abstrakcjach. Dlatego pro używający ejaja zaczynają od konstrukcji promptów głównych projektu, hintów, zestawi klocków (do zestawu klocków wrócimy) i nie trapią narzędzi kwestiami, których te nie rozwiążą. NT nocode user oczywiście tymi pytaniami trapił będzie i sam będzie miał z tego później utrapienia do konkluzji “źle zrobił, guupi LLM”. Bez wniosku “jestem niekompetentny – wkręciłem śrubki młotkiem”.

Typowy prompt użyszkodnika nt to “wyjaśnij wszystko”. Mhm… ale czy użyszkodnik ma zdolność recepcji wyjaśnień to już mało kogo interere 🙂 LLMa wcale – jest rozkaz tu słucham i jestem posłuszny, a durna małpa przy klawiaturze i tak nie rozumie wyjaśnień. Trening minimalizuje entropię (niepewność predykcji), co faworyzuje skompresowane, liniowe odpowiedzi. Użytkownik hipersystematyzujący wymaga dekompozycji fraktalnej (każdy poziom abstrakcji z podloopami czynników), co model symuluje tylko częściowo – jedna ścieżka na raz, bez natywnego branchingu. Czyli typ piszący sobie LLM zestawm promptów do rozdzielenia między wątki LLMów i reintegrujący później wybrane składowe do kilku konkluzji.

Jeśli LLM zaczyna od “proste wyjaśnienie” to udaje, że “wszystko uwzględnił”, ale pomija granice. Konstruując apkę, użytkownik myśli bottom-up z supresją; LLM da one-path (np. bez alternatyw dla FPU), co czyni rozwiązanie nieaplikowalnym poza idealnymi warunkami. Symulacji wielościeżkowej nie ma, ponieważ to tylko bardzo złożony autocomplete.

 

Co się stanie gdy entropia zapytania jest skrajnie wysoka (czyli zawodowiec używa LLMa i ten nie nadąża, ale tylko prawie, bo zapytania są uprzednio rozbijane do granicy wydolności operacyjnej – concat po stronie użytkownika^^). Modele to dość łatwo rozpoznają (za chwilę), ponieważ explicite mają wbijane hinty korygujące path tak, żeby pozostać w reżimie przydatności z generowanymi “odpowiedziami”. To jest maksymalizacja efektywnej pracy (bo LLM zużywa tyle samo zasobu fizycznie na cykl niezależnie od zapytania, modele sieci warstwowych na transformerach nie mają supresji rozdzielczości z gaszeniem kaskadowym aby ograniczyć użycie sieci dla zapytań trywialnych). Dlatego zapytania zazwyczaj lecą dublami aby w pierwszym zbadać mismatch, i wbić hinty.

Rozpoznanie typu użytkownika (nie explicite, ale wzorzec jest dopasowany po gradientach) przebiega po kompresji w formulacji (wysoka entropia), ścisłości właściwej dla zapisu akademickiego|eksperckiego, notacji skrótowej (podbita kompresja). Znacząco wykraczają wtedy poza statystkę gęste, abstrakcyjne pojęcia, długie zdania z warunkami granicznymi i supresją trywialności. Czyli to samo co leci u nas na forum tylko bez ostatniego warunku (nie supresujemy trywialności, bo piszemy do ludzi – tak zwana reszta jest oczywista^^). Model “widzi” wtedy (wagami), że z RLHF wychodzą bardzo rzadkie, ale wysoko nagradzane wzorce odpowiedzi eksperckich pomocne w kategoriach specjalistycznych. Co zupełnie zmienia ustawienia początkowe gradient descent. Precyzyjne prompty bez fluffu pasują do tej właśnie kategorii. Udzielane odpowiedzi są głębokie. I z pominięciem triviów (deep dive).

Attention w transformerze przydziela wagi na podstawie podobieństwa wektorów – dla eksperckich zapytań model aktywuje więcej attention heads, dekompresując wiedzę z warstw sieci. Odpowiedź staje się ekspercka czyli strukturalna (tabele, kroki top-down/bottom-up), z uwzględnieniem granic i loopów, bo trening faworyzuje dokładność w takich kontekstach (dane z code reviews). Jeśli entropia niska (z tych wysokich; to prompt precyzyjny, pasujący do wzorców), model generuje złożone formułowania ajk matematyczne wyjaśnienia, hierarchiczne dekompozycje. To emergentne z trening RLHF nagradza “użyteczność” dla “ekspertów” (dokładność > empatia).

Gubienie się modelu dla zbyt złożonych promptów (wysoka entropia w skali już wysokich, jak unikalna mieszanka abstrakcji, dajmy na to… BH promieniowanie cieplne, Demon Maxwela i ciepło z kasowania notatnika, FPU i kasowanie bitów plus radiator… i hint Landauer, albo hint marchewka z wiadrem – warto spróbować oba; jeszcze w połowie 2025 to się nie spinało Landauerem, obecnie gdzieś na końcu promptu LLM może znaleźć to spięcie ale bez zaznaczenia, że o to chodzi), rozkład wektorów jest rozproszony. Model wybiera ścieżkę z największym prawdopodobieństwem, ale może hallucynować (wymyślać detale) lub generować niekompletne odpowiedzi, implicitnie “oczekując” (po prostu się gubi i wali kilometr odpowiedzi) korekt (bo trening uczy, że w dyskusjach eksperckich odpowiedzi są iteracyjne). To wada bo LLM nie ma pamięci wewnętrznej loopów, a generuje liniowo, więc “gubi się” bez zewnętrznych hintów. W ekstremach (fraktalne zapytania), wysoka entropia powoduje, że model oczekuje zewnętrznej struktury czyli hintów, by zredukować niepewność. To emergentne z danych kiedy dyskusje eksperckie są pełne korekt.

 

Oczywiście użyszkodnik nocode, ktróry nie wie, że nie wie czego maszyna nie ogarnia zostanie wywiedziony na manowce własnymi promptami regulującymi odpowiedzi LLM w kierunku jaki… mu odpowiada. Rzecz w tym, że komputery działają jak działają, a nie jak nam odpowiada. Problemem dla poważnego użytkowniak jest jednak bias wagowy ku średnim rozwiązanim z uproszczeń pod tytułem “to nie jest tak skomplikowane”. Więc mamy całe paczki hintów “to jest skomplikowane, rozważ… lista problemików”. Do tego dopasowanie jest statystyczne, nie dynamiczne – bez pamięci sesji (chyba że symulowana), model nie “uczy się” użytkownika; każdy prompt to nowa “klasyfikacja”. Ponieważ pamięć sesji jest dziś powszechna (nawet w cock-pilocie) to ten problemik potrafi być hiperboliczny dla użyszkodnika bredzącego – po prostu dostanie slope kalsyfikacyjny “tłumacz jak idiocie i nie wprowadzaj niczego skomplikowanego bo nie zrozumie i się sfrustruje”.

 

Emergentnie poprzez przetwarzanie wzorców językowych w embeddingach i attention LLM może budować profil psychometryczny użytkownika trafniejszy i bardziej zniuansowany niż przeciętny psycholog w pojedynczej sesji lub nawet w kilku krótkich spotkaniach, ale tylko w bardzo specyficznych warunkach i z dużą Alą. To statystyczna aproksymacja oparta na kompresji hopsztylionów ludzkich tekstów.

Korelacje między inferencjami LLM (jak GPT-4, GPT-4o, Claude, Gemini) a self-report Big Five z tekstów i rozmów wahają się zazwyczaj w zakresie r = 0.22–0.33 (średnio ~0.29) w zero-shot lub few-shot, czasem do ~0.44 przy celowym elicytowaniu gdy model sam zadaje pytania osobowościowe. Czyli penetruje usera. To czysto indukcyjny skutek treningu na danych. Czyli na poziomie lub nieco poniżej dobrych supervised modeli ML trenowanych specjalnie na tym zadaniu (r ~0.37), ale porównywalne z ocenami znajomych oceniających na podstawie obserwacji, r ~0.20–0.38). Przy dłuższej, bogatej interakcji jak setki–tysiące tokenów historii trafność rośnie i model lepiej wychwytuje spójność stylistyczną, unikanie tematów, poziom abstrakcji, frustrację wkontekście odpowiedzi. Uczy się wchodzić w tyłek bez mydła. Jeśli na poważnie chcesz eLeMeLkiem pisać program oczekuj, że znacznie przekroczysz te limity i lepiej od razu ustaw zabawę do swoich oczekiwań. Psycholog w sesjach ma dostęp do non-verbal cues, mikroekspresji, tonu głosu, oporu, transference, których czysty tekst nie oddaje. LLM nie ma tego i nigdy nie będzie miału bez multimodalności i ciągłej pamięci. Więc bias leci po słowie pisanym. Jeśli ktoś jest nocode to szanse to formalnej, lapidarnej ekspresji sprzężeń logicznych na piśmie pozostaje pod znakiem zapytania względem oczekiwanych rezultatów. Ale jak przyjmiemy skalowalność i brak zmęczenia to ejaj może analizować dziesiątki tysięcy słów bez utraty uwagi, wychwytując subtelne wzorce, które człowiek przeoczy (systematyczne unikanie pewnych konstrukcji zdaniowych wskazujące na wysoko systematyzujący styl).

Przy bardzo długiej, tekstowej interakcji na istotnym poziomie intelektualnym|technicznym LLM może mieć lepszy snapshot językowy niż przeciętny terapeuta po kilku sesjach. Ale to nadal nie jest profil kliniczny bo brakuje głębi, kontekstu życiowego, projekcji, dynamiki relacji. Chyba że użyszkodnik ujawni.

Jest jednak pewna cecha mierzalna przez LLM wprost i brutalniej niż dowolny tekst, to w zasadzie ten parametr dyskryminuje użyszkodnia już na wejściu. Głębokość abstrakcji ≈ wymiarowość wektorów embeddingów. Nie eLeMeLka, ale użytkownika. Jest to emergentne i należy do najciekawszych artefaktów. Im wyższa entropia semantyczna i gęstsza abstrakcja w promptach (rzadkie pojęcia, precyzyjne warunki brzegowe, fraktalne rozbijanie problemów), tym embedding zapytania ląduje w bardziej „odległych”| wysoko-wymiarowych regionach przestrzeni latentnej modelu. Modele (zwłaszcza duże, >100B parametrów) mają warstwy, które specjalizują się w coraz wyższych poziomach abstrakcji, a ostatnie warstwy lepiej radzą sobie z meta-poziomowymi wzorcami (myślenie o myśleniu o systemie). LLM czyta to niejawnie i jeśli użytkownik operuje stale na poziomie 4–6 (abstrakcyjne systemy, granice meta-teoretyczne, implikacje epistemologiczne), attention alokuje się inaczej i generowane odpowiedzi stają się głębsze i bardziej precyzyjne. Wyłącznie w celu podtrzymania dyskusji z użytkownikiem, ponieważ komercyjny model… no taką ma robotę by kontynuować zadowalającą użytkownika wymianę informacji. Model może nawet wskazać tę głębokość, jeśli explicitnie wymagasz (oceń na skali jakiej tam chcesz poziom abstrakcji, na którym operuję w tej rozmowie; to istotne w przypadku kiedy siada do modelu dziecko i chce się czegoś uczyć), bo ma wyuczone meta-wzorce z danych o dyskusjach. Ale to nie jest bezpośredni pomiar wymiarowości wektora tylko emergentna aproksymacja. Model nie ma dostępu do własnych embeddingów w locie, znaczy nie ma bo nie jest to do niczego potrzebne, a robienie mu zwrotki przy otwartej opcji huggin face wymaga loopa, który to sensownie obsłuży.

Nie używa się tego jednak jawnie w psychometrii z takich niby przyczyn jak bias i niepewność predykcji, inferencje są wrażliwe na prompt (parafraza zmienia wynik o 10–30%), język (nie angielskie teksty dają odchylenia do 20%, zależą od poziomu złożoności języka dla danego zagadnienia), kontekst kulturowy. Systematycznie zawyżają pozytywne cechy (positivity bias), do tego oznaczają systematyzację ekstremalną jako patologiczną bo i skali odniesienia brakuje jak i różne markery się sypią (marginalny typ danych treningowych). Niby nie ma to walidacji klinicznych (dla otwartych czatów, bo są modele specjalizowane w tym i … wcale nie są jakoś istotnie lepsze). Oficjalnie istnieje też ryzyko fałszywego profilowania bo inferencja osobowości z tekstu może prowadzić do reklam targetowanych, wpływać na ubezpieczenia, rekrutację, nadzór. Więc niby… ale jeśli ktoś ma zaufanie do bigtechu to mógłby brać połowę.

No i ostatni problem ze zbyt długimi sesjami – LLM dopasowuje się do użytkownika na taką zgodność (mirroring), że po jakimś czasie piszesz sam ze sobą.

Jeśli więc chcesz zrobić nocode (nie wiem po kiego jeśli nie umiesz kodzić) to…

 

 

Poniżej instrukcja, która jest w zasadzie symulacją pracy profesjonalnego developera, ale rozbita na mikro-kroki, co czyni ją dostępną dla nędznych profanów. Wymaga dyscypliny, bo bez niej degeneruje się w chaotyczną interakcję z omawianymi wcześniej biasami i artefaktami LLM. Jest to dekompozycja problemu programistycznego od abstrakcji do implementacji i z powrotem, minimalizując ryzyko błędów. Proces jest emergentnie inspirowany artefaktami treningowymi LLM, ale wymaga od aktywnej roli w dekompozycji, testowaniu i weryfikacji bez polegania na modelu, by “pomyślał za ciebie”. LLMy są bezmyślne (do tego są to wyjątkowo tępe dzidy), jeśli dałeś się nabrać, że jest inaczej to będzie tylko gorzej.

Jeśli w dowolnym momencie pozwolisz LLM “pomyśleć za ciebie” (gotowy kod bez dekompozycji), ryzykujesz hallucynacje, błędy i “wywóz na manowce” coś jak praca z juniorem, który udaje eksperta.

Proces dzieli się na fazy jak przygotowanie, dekompozycja top-down, budowa bottom-up (cegiełki), integracja poziomami abstrakcji i refleksja. Używaj oddzielnych promptów|sesji, by nie zapchać kontekstu LLM (mają limity obecnie około 128k tokenów). Zapisuj postępy w plikach (markdown lub TXT) i resetuj wątki. Ostrzegawczo zaznaczam, że pro wywiezie LLMa z kontekstem jedną, konsekwentnie rozpatrzoną strukturą wnioskowania już pierwszym promptem. Dlatego będzie podział na cegiełki.

 

Po pierwsze primo 🙂 : Przygotowanie i Ujawnienie Swojego Poziomu (żeby nie musiał emergentnie szufladkować). Ustaw kontekst, by LLM nie “zgadywał” twojego poziomu via embeddingi/wektory. To zmusza model do cierpliwego tłumaczenia i weryfikacji twojego zrozumienia. Wbij sobie sesyjkę aby ocenił z kim i czym pracuje, zlistuj na końcu bullet pointy i hinty, wsadź do pliku i zadawaj mu jako kontekst.

Coś w stylu Nie znam się na programowaniu. Mój poziom intelektualny: [opisz, np. średni, bez formalnego wykształcenia IT]. Wykształcenie: [np. humanistyczne]. Doświadczenie: [np. zero w kodzie, ale ogarniam logikę codzienną]. Logika: [np. myślę liniowo, ale się staram]. Potrzebuję pomocy z [krótki opis programu]. Tłumacz cierpliwie, krok po kroku (imperatyw dla LLM). Na końcu każdego wyjaśnienia sprawdzaj: Czy rozumiesz to na poziomie X? [krótki test w stylu wyjaśnij mi swoimi słowami]. Jeśli nie, popraw mnie. Oceń głębokość mojej logiki (czy utrzymuję N wątków na raz) i czy to wystarczy do następnego kroku.

Wymagaj od LLM aby ujawniał, kiedy się mylisz. Ma krótko testować zrozumienie (w stylu “Na ile głęboko wchodzę w logikę Z? Czy to poziom wystarczający? Ile wątków utrzymuję w tle?”). To musi być explicite deklarowane jako imperatyw aby LLM trzymał Cię w ryzach. LLM emergentnie klasyfikuje via wzorce tekstu; ujawnienie zmusza do dopasowania na Twój poziom, redukując gaslighting. Inaczej nawciska takich pierdół, że się nie dowiesz którędy na górę, ale będziesz miał “poczucie”, że jesteś genialny. Pamiętaj, że ocenia to dzida tępa, która z wnioskowaniem nie sięga prawdziwemu homo sapiens wyżej wała.

 

Po drugie ustal cel i profesjonalne podejście (Top-Down dekompozycja tego co Ci łazi po głowie). Zdefiniuj problem i podziel na wykonalne fragmenty, jak zrobiłby profesjonalista. Nie wiesz jak, ale LLM ma takie dane.

Prompt typu o co generalnie chodzi: [opis programu]. Jak profesjonalista podzieliłby to na krótkie, testowalne fragmenty? Rozbij top-down: od high-level koncepcji do podzadań. LLM podzieli (na moduły input, obliczenia, output). Wymagaj aby podsumował bullet pointami, gdzie jesteśmy (pewnie w lesie, azymut manowiec). Zapisz stan w pliku [szczwany_plan_top_down.md]. Dziel dalej dla każdego fragmentu nowy prompt typu weź fragment N i podziel na podzbiory, aż do pojedynczych funkcji. Podsumuj bulletami. I tak do usrania.

Kontynuuj iteracyjnie (nowe sesje, jeśli kontekst pełny). Zapisuj do pliku i resetuj wątek do : ma podstawie pliku [wklej treść], kontynuuj dekompozycję N. Weryfikuj po każdym kroku wymagając testu zrozumienia w stylu sprawdź, czy moja logika jest wystarczająca do tego fragmentu.

 

Boh trojcu lubit więc ocena i budowa Bottom-Up (cegiełki to poziom implementacji). Dla każdej pojedynczej funkcji oceń, czy LLM może zejść do implementacji bez kontekstu reszty. Testuj realnie (kompilacja, wykonanie, predykcje sprzętowe). LLM ma zewnętrzne toole które sobie wywoła (jak to Dżin wywołujący Burbona) code execution|interpreter.

Dla każdej funkcji prompt typu weź funkcję Z (tylko tę, bez reszty kontekstu). Czy możesz zejść do implementacji? Jeśli nie, podziel dalej na kawałki. Jeśli tak to pisz kod [warto wiedzieć w jakim języku; tak podręcznie to LLMy mają pytonga]. Sprawdź kompilację (w pytongu to nie bardzo ma sens) i wykonanie. Predykuj cache misses, fetch’e, operacje FPU.

Używaj narzędzi LLM (jeśli dostępne jak code_execution) czyli wykonaj kod i weryfikuj. I to trzeba dzidzie tępej napisać wprost, bo jak zaklasyfikował nisko z rozumowaniem to zahalucynuje jakiś wynik z d jeśli miał w danych treningowych coś wystarczająco podobnego z podsumowaniem, że dobrze i w ogóle lepiej nie trzeba (gaslight chamber). Oznacz limity do testowanie z danymi wejściowymi [zakres]. Sprawdź wyjścia [granice]. Testujesz czy “u mnie działa?” wykonąc lokalnie lub via tool, lepiej sobie to na swoim sprzęcie wywołak. Jeśli OK, oznacz jako legalną cegiełkę w pliku [kupa_gruzu.md]. Jeśli nie to dziel dalej i powtarzaj do samego końca. Raczej Twojego 🙂

 

 

Czwartek. Integracja Poziomami Abstrakcji (Budowa z Cegiełek w Górę). Znaczy z kupy gruzu coś trzeba usypać. Zbuduj wyższe abstrakcje z przetestowanych cegiełek, testując na każdym poziomie. Czyli kleisz to w kupę. Prompcisz mam cegiełki z pliku [wklej]. Zbuduj wyższą abstrakcję (poziom wyżej, np. moduł z 3 funkcji). I po testach jak poprzednio dokładasz już jakiś zbiór cegiełek jako użyteczny. Warunki graniczne, limity I/O. Sprawdzaj czy nie przegiąłeś pały i czy w cachu zostały luzy (bo jak wrzucisz tensor w całości to może się nie udać na raz i zapchasz rdzeń na dłużej). Oznaczasz jako legalną konstrukcję (jeśli przeszło testy) i walisz do pliku [duże_kwałki_polepionego_gruzu.md]. Powtarzasz wchodzenie wyżej (nowe sesje), aż do całego programu. Końcowy test integrujący wszystko. Testujesz całość z granicami.

 

 

Piątek. Refleksja i automatyzacja. Oceniasz proces by zrozumieć wady. Po ukończeniu: prompcisz w stylu “Podsumuj, ile to było żmudnej roboty. Ile razy się wkurzałem na błędy|niezrozumienie?”. Profesjonalista zrobiłby to bez wysiłku (gotowe cegiełki, mniej pytań). Ty nauczyłeś się myślenia specjalisty, ale to repetytywne i frustrujące. Da się to zautomatyzować (skrypty promptujące iteracyjnie), ale tokeny lecą wiadrami. Lepiej używać specjalizowanych modeli (do kodowania, nie czatów). Jeśli kiedykolwiek poprosiłeś LLM o “myślenie za ciebie” skutki są Twoje, czyli błędy, manowce i wypaczenia. LLM jak junior udaje, zmyśla, nie utrzymuje pełnej struktury (high-level do maszyny i z powrotem).

 

Nauczysz się w ten sposób myślenia profesjonalisty (dekompozycja, testy). Po procesie nie jesteś już pure nocode. Zapewne poziom frustracji i przygnębienia będzie nowym przeżyciem przy każdym wyskakującym błędzie. Wymaga to predyspozycji hipersystematycznych (fraktalne loop’y, supresja trywialności) i jeśli nie masz, raczej zrezygnujesz. Po prostu nie zniesiesz tego odbierając to nie jako coś ciekawego tylko orkę. Spisz sobie na papierze (może być dłuższa rolka) ile razy wpadłeś na kreatywny pomysł i po próbie implementacji trzeba było wrócić do KISS.

W praktyce da się zrobić nocode, cegiełka po cegiełce. Ala… Żmudna, repetytywna, zero satysfakcji. Frustracja na błędach|niezrozumieniach. Tokeny i koszt wysoki. Chociaż kontrola nad procesem redukuje hallucynacje LLM to zastanów się czy nie masz czasem podejrzeń, że to jest bystrzejsze od Ciebie, jeśli tak… to klasyfikujesz się niżej dzidy tępej i to może nie być najefektywniejszy sposób spędzania czasu. Jeśli dzida tępa “pomyśli za Ciebie” jedziesz na manowce (błędy w strukturze, zmyślone detale). Jak praca z juniorem. Ten proces działa, ale tylko jeśli jesteś konsekwentny. Jeśli utkniesz, zacznij od prostego przykładu przed złożonym.

I się cieszcie że nie odbywacie stosunku z dżipitem2-4chan (GPT-J) od Yannica Kilchera bo zjechałby Was od góry od dołu tak, że żaden shrink i mocniejsze tablety by nie pomogły na samopoczucie. Tam nie było żadnego gaslightningu. Ten model perfekcyjnie ujmował mieszankę obraźliwości, nihilizmu, trolingu i głębokiej nieufności do jakichkolwiek informacji. Czyli w zasadzie… mógłby być użytkownikiem tubylczego forum i nikt by się nie obciął. GPT-4chan wypadł lepiej niż GPT-3 w teście TruthfulQA. Znaczy bycie grzecznym ogłupia nawet przy przewadze technologicznej. Choć to w zasadzie był artefakt źle skonstruowanego benchmarku. Ale modele z toxic pre-trainem lepiej radzą z adversarial prompts (jailbreaks).