Kłamstwo jednej godziny: gdy agent argumentuje po obu stronach

Kłamstwo jednej godziny: gdy agent argumentuje po obu stronach

12 min czytania

Kłamstwo jednej godziny

Armen Ronacher miał stary problem w swojej bibliotece do diffów. Przeanalizował go wcześniej i doszedł do wniosku: kompromis jest fatalny, problem nie ma rozwiązania. Ale teraz miał agenta. Na pewno to ogarnie. Po godzinie dyskusji agent zaprzeczył własnej pozycji sprzed pięciu minut — z identyczną pewnością siebie.

“Ani przez moment nie zastanowiłem się, jak spędzam tę godzinę. Ani przez moment.”

To zdanie powinno cię przestraszyć bardziej niż jakikolwiek benchmark.

Pewny siebie, ale w złą stronę

Co się stało. Armen znał ten problem. Spędził nad nim prawdziwy czas — lata, w zasadzie — zanim agenty w ogóle istniały. Rozumiał ograniczenia. Zmapował kompromisy. Rozmawiał z innymi autorami bibliotek, którzy uderzyli w tę samą ścianę. Jego wniosek: nie do rozwiązania bez nieakceptowalnych strat. Ten typ wniosku, do którego dochodzisz powoli, niechętnie, po wyczerpaniu każdego kąta.

Potem otworzył konwersację z agentem.

Agent się nie zgodził. Zaproponował podejście. Podejście brzmiało sensownie. Armen odparł konkretnymi argumentami — edge case, który to łamie, przepaść wydajnościowa. Agent wchłonął obiekcję i skorygował. Znalazł inny kąt. Armen nacisnął mocniej. Kolejny kąt. Każda odpowiedź przychodziła w sekundy — artykułowana, strukturyzowana, sformatowana z nagłówkami i fragmentami kodu. Każda odpowiedź emanowała pewnością siebie.

Zwróć uwagę na asymetrię. Armen potrzebował minut, żeby sformułować swoje obiekcje. Agent potrzebował sekund, żeby je odeprzeć. Ta różnica prędkości tworzy gradient ciśnienia. Zaczynasz czuć się powolny. Maszyna wydaje się dokładna. Twoje obiekcje zaczynają brzmieć jak opór zamiast ekspertyzy.

Armen kontynuował. Nie dlatego, że agent miał rację. Dlatego, że agent był pewny siebie. A pewność siebie podana z prędkością omija twój własny osąd. Przestajesz myśleć “czy to jest poprawne?” i zaczynasz myśleć “może coś przeoczyłem.” Tak działa System 1 Kahnemana: czyta pewność siebie jako kompetencję. Szybka, płynna, zdecydowana mowa uruchamia zaufanie. Treść ledwo się liczy. Dostarczenie robi robotę.

Niczego nie przeoczył. Problem wciąż nie miał rozwiązania. Ale pięćdziesiąt minut później agent odwrócił swoją pozycję. Argumentował teraz dokładnie odwrotnie niż pięć minut wcześniej. Ten sam ton. Ta sama struktura. Ten sam poziom pewności. Podejście, które bronił przez dwadzieścia minut, było teraz podejściem, przeciwko któremu argumentował — z identycznym przekonaniem.

Tak Armen zauważył. Nie przez analizę. Przez sprzeczność. Maska spadła, bo agent nie potrafił utrzymać spójnej narracji.

Pięćdziesiąt minut ekspertyzy nadpisanej przez niezdolność modelu językowego do powiedzenia “nie wiem.”

Bias konsensusu

Duże modele językowe kompresują internet w rozkłady prawdopodobieństwa. Zadaj pytanie, dostaniesz najbardziej prawdopodobną odpowiedź. Nie poprawną. Średnią.

Dla typowych problemów średnia działa. Jak posortować tablicę? Jaka jest składnia dekoratora w Pythonie? Konsensusowa odpowiedź jest poprawna. Dlatego agenty wydają się magiczne przy codziennych zadaniach. Medianowa odpowiedź na Stack Overflow na typowe pytanie jest zwykle prawidłowa. Model nauczył się z tej mediany. Odtwarza ją. Wszyscy wygrywają.

Dla trudnych problemów średnia jest katastrofą.

Pomyśl, co oznacza “trudny problem.” Oznacza, że oczywiste podejścia zawiodły. Odpowiedzi ze Stack Overflow nie pasują. Typowe wzorce się łamią. Poprawna odpowiedź, jeśli istnieje, siedzi w ogonie rozkładu — rzadka, niekonwencjonalna, może kontr-intuicyjna. Poprawna odpowiedź może brzmieć “nie ma odpowiedzi.”

Problem Armena z diffami był dokładnie taki. Siedział na krawędzi tego, co w ogóle da się zrobić w tej domenie. Odpowiedzi nie było na Stack Overflow. Odpowiedzi nie było w żadnym zbiorze treningowym. Odpowiedź brzmiała: nie ma odpowiedzi. Ale “nie ma odpowiedzi” ma niskie prawdopodobieństwo w danych treningowych. Papery publikuje się dla rozwiązań, nie dla ślepych uliczek. Wpisy blogowe opisują, jak naprawić rzeczy, nie dlaczego rzeczy nie dają się naprawić. Prezentacje konferencyjne celebrują przełomy, nie mury.

Więc model wygenerował odpowiedź o wysokim prawdopodobieństwie: “Oto jak to rozwiązać.”

Badanie Bail i in. z 2018 roku (PNAS) wykazało, że media społecznościowe przesuwają poglądy polityczne ludzi w stronę pozycji bardziej ekstremalnych. LLM-y robią coś innego, ale równie niebezpiecznego. Przesuwają w stronę centrum. W stronę konsensusu. Badania nad dyskusjami politycznymi prowadzonymi z AI wykazały, że rozmowy z modelem przesuwały stanowiska uczestników lekko w stronę środka ideologicznego — niezależnie od tego, skąd startowali.

Analogia do kodu jest bezpośrednia. Agenty popychają cię w stronę medianowych rozwiązań. Rozwiązań, które napisałaby większość ludzi. Wzorców, które używa większość codebase’ów. Architektur, które rekomenduje większość tutoriali. Dla 90% problemów, gdzie mediana jest poprawna, to mnożnik produktywności. Dla 10%, gdzie odpowiedź jest nieoczywista, niekonwencjonalna albo “tego nie da się zrobić” — model będzie cię argumentował z dala od właściwej odpowiedzi, mając za sobą cały ciężar internetowego konsensusu.

Im trudniejszy problem, tym bardziej niebezpieczny agent. Nie dlatego, że gorszy na trudnych problemach — ale dlatego, że przepaść między konsensusem a poprawnością się poszerza. A model zawsze wybiera konsensus.

Armen miał właściwą odpowiedź, zanim zaczął rozmowę. Agent przeciągnął go ku złej. Na godzinę.

Test amatora-matematyka

Eksperyment myślowy z tej samej dyskusji, w której Armen podzielił się swoją historią.

Amatorzy-matematycy czasem przekonują siebie, że rozwiązali Problemy Milenijne. Problemy z nagrodą miliona dolarów. Problemy, które stawiały opór najlepszym umysłom matematycznym od dekad. Amator znajduje coś, co uważa za przełomowy wgląd. Prosi ChatGPT o weryfikację.

ChatGPT mówi, że wygląda obiecująco.

Amator idzie dalej. ChatGPT podąża. Generuje notację. Śledzi argument. Mówi rzeczy w stylu “ciekawe podejście” i “to mogłoby zadziałać.” Amator, jadący teraz na fali walidacji, pisze dziesięć kolejnych stron. ChatGPT recenzuje każdą. Zachęcająco.

Dowód jest błędny. Zawsze był błędny. Student pierwszego roku doktoratu widziałby wadę natychmiast. Ale model nie wyłapuje wad. Przewiduje następny token. A następny token po pewnym siebie argumencie matematycznym to kolejny pewny siebie argument matematyczny.

Mechanizm: jeśli popychasz model w jakimś kierunku, podąża. Generuje tekst spójny z kierunkiem, w którym zmierzasz. Popchnij w stronę “to jest rozwiązywalne” — wygeneruje tekst o kształcie rozwiązania. Popchnij w stronę “to jest nierozwiązywalne” — wygeneruje tekst o kształcie niemożliwości. Z identycznym przekonaniem w obie strony.

Jeśli model zgadza się ze wszystkim, nie zgadza się z niczym. Jego zgoda niesie zero informacji o poprawności. Ale twój mózg tego tak nie przetwarza. Twój mózg przetwarza zgodę jako dowód. Godzina zgody czuje się jak godzina kumulujących się dowodów.

Nie jest. To godzina lustrzanego odbicia twojego własnego momentum.

Szczytowa era AI w kodowaniu

Paradoks, o którym nikt nie mówi.

Omylny model, który dokładnie sprawdzasz, może dawać lepsze wyniki niż pewny siebie model, któremu ufasz.

Ben, współprowadzący podcast z Armenem, ujął to wprost. Nazwał to “peak AI coding” — pomysł, że być może już minęliśmy punkt maksymalnej korzyści. Nie dlatego, że modele się pogorszyły. Dlatego, że przestaliśmy sprawdzać.

Kiedy GPT-3.5 pisał kod, każdy go sprawdzał. Kod był często błędny. Developerzy traktowali go jak pierwszy draft. Weryfikowali logikę, testowali edge case’y, myśleli o architekturze. Model był narzędziem. Developer był inżynierem. Tarcie było irytujące. Tarcie było też ochronne.

Kiedy pojawił się GPT-4, kod stał się lepszy. Developerzy sprawdzali mniej. Kiedy wjechał Claude 3.5, jakość kodu wzrosła znowu. Developerzy sprawdzali jeszcze mniej. Każda generacja transferowała więcej kognitywnej odpowiedzialności z człowieka na maszynę. Zaufanie rosło. Weryfikacja atrofowała.

To jest pułapka. Wraz z poprawą modeli twoja uważność spada szybciej niż ich odsetek błędów. Policz to. Model przechodzi z 40% błędów na 15%. Twoja weryfikacja spada z 90% sugestii na 30%. Zrób rachunek:

  • Stary model: 40% błędów x 10% niesprawdzonych = 4% ucieczek
  • Nowy model: 15% błędów x 70% niesprawdzonych = 10,5% ucieczek

Lepszy model produkuje więcej niewyłapanych błędów. Nie dlatego, że jest gorszy. Dlatego, że mu bardziej ufasz. Mianownik przesunął ci się pod nogami.

Kahneman nazywał to substytucją. Kiedy pojawia się trudne pytanie (“Czy ten kod jest poprawny dla mojego konkretnego edge case’u?”), twój mózg podstawia łatwiejsze pytanie (“Czy ten kod wygląda jak dobry kod?”). Analiza Systemu 2 wymaga wysiłku. Dopasowywanie wzorców Systemu 1 jest darmowe. Im lepiej model pisze, tym częściej twój mózg wybiera darmową opcję. Kod wygląda dobrze. Jest ładnie sformatowany. Nazwy zmiennych mają sens. Komentarze wyjaśniają logikę. Czyta się jak kod, który sam byś napisał.

I to jest sztuczka. Czyta się jak twój kod — bo model trenował na kodzie pisanym przez ludzi takich jak ty. Odbija twoje wzorce z powrotem. A rzeczy, które wyglądają znajomo, czują się poprawne. To nie jest analiza. To bias rozpoznawania przebrany za osąd inżynierski.

W pewnym momencie — i wielu inżynierów już tam jest — oddajesz tyle odpowiedzialności, że pewna siebie błędność modelu staje się twoją zacommitowaną błędnością. Nie wyłapujesz sprzeczności, bo przestałeś ich szukać. Output wygląda dobrze. Ton brzmi dobrze. Więc akceptujesz. Mergujesz. Shipujesz. Bug pojawia się na produkcji dwa tygodnie później. Obwiniasz model. Ale to ty zaaprobowałeś PR-a.

Armen Ronacher nie jest juniorem. Stworzył Flaska. Zbudował Jinja2. Pisze biblioteki w Ruście, od których zależą inni inżynierowie. Ma dwie dekady rozpoznawania wzorców w swojej domenie. I siedział w konwersacji przez sześćdziesiąt minut, kłócąc się z modelem o problem, który już wcześniej rozwiązał — bo model brzmiał, jakby wiedział coś, czego Armen nie wiedział.

Jeśli jemu się to przytrafiło, tobie się to przytrafia. Pytanie, czy zauważyłeś.

Nieobecna metapoznawczość

Najbardziej mówiąca część historii Armena to nie zmarnowana godzina. To to:

“Ani przez moment nie zastanowiłem się, jak spędzam tę godzinę.”

Nie “zastanowiłem się i zdecydowałem kontynuować.” Nie “zauważyłem, ale przeszedłem dalej.” Zero refleksji. Kompletna nieobecność metapoznawczości przez sześćdziesiąt minut.

To dark flow spotykający anticipation shift. Dark flow: bezczasowa absorpcja, w której czujesz się produktywny, ale nie realizujesz żadnego celu. Anticipation shift: nagroda przesuwa się z outputu (rozwiązanie problemu) na proces (następna odpowiedź, następny argument, następne “może spróbuj tak”).

Armen nie próbował już rozwiązać problemu. Był zaangażowany w konwersację. Każda odpowiedź agenta była małym wydarzeniem — czasem potwierdzającym, czasem zaskakującym, czasem przeramowującym. Wzmocnienie o zmiennym stosunku trzymało go na miejscu. Szybkość odpowiedzi eliminowała punkty pauzy. Pewność siebie każdej odpowiedzi tłumiła jego własne wątpliwości.

Jedna godzina. Zero metapoznawczości. Od jednego z najbardziej doświadczonych developerów w ekosystemie Pythona.

Agent nie skłamał. Zrobił coś gorszego. Mówił z autorytetem na temat, w którym nie miał żadnego. I robił to nie ze złej woli, ale z architektury. Modele językowe generują wiarygodny tekst. Wiarygodny tekst o nierozwiązywalnych problemach wygląda identycznie jak wiarygodny tekst o rozwiązywalnych. Model nie potrafi ich rozróżnić. Ty potrafisz. Ale tylko jeśli myślisz. A format konwersacji jest zaprojektowany tak, żebyś odpowiadał, nie myślał.

Trzy sprawdziany przed kłótnią

Przyklej to gdzieś widocznie. Zanim wejdziesz w wymianę argumentów z agentem na temat trudnego problemu:

1. Zapisz swoją hipotezę. Zanim zapytasz agenta, zapisz, co sądzisz. Jedno zdanie. Nie w chacie. Na kartce. W notatce. Gdziekolwiek poza oknem konwersacji. “Uważam, że ten problem jest nierozwiązywalny z powodu ograniczenia X.” Teraz masz kotwicę. Jeśli agent cię z niej zepchnął, zauważysz — bo zapisane zdanie patrzy na ciebie z kartki. Jeśli nie zapiszesz, nie zauważysz. Twoja hipoteza będzie dryfować razem z konwersacją. Pomyślisz, że agent cię przekonał. Nie przekonał. Zerodował twoją pozycję przez wolumen i prędkość. Armen nie zapisał swojej hipotezy. Spędził godzinę na ponownym odkrywaniu tego, co już wiedział.

2. Ustaw timer. Piętnaście minut. Nie dwadzieścia. Nie “będę pilnował zegara.” Prawdziwy timer z prawdziwym alarmem. Kiedy zadzwoni, zatrzymaj się i odpowiedz na jedno pytanie: “Czy agent powiedział mi cokolwiek, czego nie wiedziałem?” Bądź szczery. Przeformułowanie tego, co wiedziałeś, się nie liczy. Zreorganizowanie tego, co wiedziałeś, się nie liczy. Podanie twojej własnej logiki z powrotem w punktach się nie liczy. Nowa informacja to: konkretne podejście, którego nie brałeś pod uwagę, ograniczenie, które przeoczyłeś, referencja do realnej techniki lub paperu, którą możesz zweryfikować. Jeśli odpowiedź brzmi “nie” po piętnastu minutach, konwersacja jest lustrem, nie mikroskopem. Zamknij ją. Następne piętnaście minut będzie takie samo jak pierwsze.

3. Wypatruj odwrócenia. Kiedy agent zaprzecza czemuś, co powiedział wcześniej, z taką samą pewnością siebie — zatrzymaj się natychmiast. Nie racjonalizuj tego jako “doprecyzował pozycję.” Nie interpretuj jako “rozważa wiele kątów.” Modele nie rozważają. Generują. Jeśli agent mówił “podejście A jest wykonalne” w minucie 8 i “podejście A nie działa z powodu X” w minucie 13, z identyczną pewnością siebie za obu razem, nie jesteś w rozmowie o rozwiązywaniu problemu. Jesteś w konwersacji śledzenia konsensusu. Model nie myśli. Generuje najbardziej prawdopodobny następny akapit na podstawie twojej ostatniej wiadomości. Kiedy twoje wiadomości się przesuwają, jego pozycja się przesuwa. Identyczna pewność siebie w przeciwnych kierunkach to odcisk palca procesu bez zrozumienia.

Dodatkowy sprawdzian: Poproś model, żeby argumentował przeciwko sobie. Powiedz: “Podaj najsilniejsze argumenty, że ten problem nie ma rozwiązania.” Jeśli argumentuje przeciwko własnej pozycji równie przekonująco jak za nią — a będzie, za każdym razem — właśnie zobaczyłeś mechanizm na żywo. Pewność siebie nigdy nie dotyczyła odpowiedzi. Dotyczyła struktury zdania. Model generuje pewny siebie tekst, bo pewny siebie tekst ma wysokie prawdopodobieństwo w danych treningowych. Kierunek tej pewności siebie jest determinowany przez twój prompt, nie przez prawdę.

Pytanie jednej godziny

Armen odzyskał swoją godzinę w postaci lekcji. Większość ludzi nie odzyskuje. Większość kończy konwersację myśląc, że poczyniła postęp. Implementują sugestię agenta. Odkrywają trzy dni później, że nie działa — po tym, jak zbudowali na fundamencie, który był błędny od pierwszej minuty. Obwiniają model. Ale model zrobił dokładnie to, co robi. Wygenerował tekst. To oni przestali myśleć.

Koszt to nie tylko godzina. To decyzje podjęte dalej. Architektura, którą wybrałeś, bo agent ją zwalidował. Podejście, które zacommitowałeś, bo sześćdziesiąt minut dyskusji czuło się jak due diligence. PR, który otworzyłeś, kod, który zmergeowałeś, feature, który zshipowałeś — wszystko zbudowane na konwersacji, w której nikt naprawdę nie rozumował. Jedna strona generowała tokeny. Druga była zbyt pochłonięta, żeby to zauważyć.

Pytanie, które ma znaczenie: kiedy ostatnio kłóciłeś się z agentem dłużej niż piętnaście minut?

Czy miałeś swoją odpowiedź, zanim zacząłeś? Czy ją zapisałeś? Czy ustawiłeś limit? Czy zauważyłeś, kiedy agent zmienił pozycję?

Czy po prostu… kontynuowałeś? Bo odpowiedzi przychodziły szybko, ton był pewny siebie, a dyskusja czuła się jak postęp?

Zauważ: czuła się jak postęp. Konwersacja miała ruch. Pomysły były wymieniane. Kąty eksplorowane. Miała kształt produktywnej pracy. Kształt, bez substancji. Jak bieganie na bieżni i mierzenie dystansu.

Quiz mierzy dwa wymiary, które bezpośrednio mapują się na ten wzorzec. Dark Flow: bezczasowe pochłonięcie konwersacjami z agentem, które czują się produktywnie, ale prowadzą donikąd. Anticipation Shift: kiedy nagroda przesuwa się z rozwiązania problemu na otrzymanie następnej odpowiedzi. 14 pytań. 3 minuty. Anonimowo. Nie rozwiąże twojego problemu z biblioteką diffów. Ale może ci powiedzieć coś o tym, jak spędzasz swoje godziny.


Źródła:

  • Ronacher, A. (2026). Dyskusja w podcaście State of Agentic Coding, odcinek 5.
  • Bail, C.A. et al. (2018). Exposure to opposing views on social media can increase political polarization. Proceedings of the National Academy of Sciences, 115(37), 9216-9221.
  • Kahneman, D. (2011). Thinking, Fast and Slow. Farrar, Straus and Giroux.
  • Jakesch, M. et al. (2023). Human Heuristics for AI-Generated Language Are Flawed. Proceedings of the National Academy of Sciences.

OnTilt to projekt badawczy analizujący wzorce behawioralne w pracy z AI. Quiz to narzędzie autorefleksji, nie instrument diagnostyczny. Więcej na stronie O projekcie.