Blog JSystems - uwalniamy wiedzę!

Szukaj

Claude Code

Claude Code wymyśla API i funkcje, które nie istnieją - jak temu zapobiec

W skrócie

  • Claude Code czasem wywołuje metodę, która nie istnieje, importuje nieistniejący pakiet albo wymyśla parametr - kod wygląda sensownie, ale się nie kompiluje.
  • Model uzupełnia luki najbardziej prawdopodobnym wzorcem; gdy nie ma dostępu do faktów (aktualnej dokumentacji, prawdziwego API), zgaduje - i czasem trafia obok.
  • Rozwiązanie to odciąć zgadywanie od faktów: dać modelowi realne źródła (dokumentacja przez MCP, odczyt kodu), kazać weryfikować przez uruchomienie i pisać prompty, które nie pozostawiają miejsca na wymysły.

Prosisz Claude Code o użycie jakiejś biblioteki, a on pewnym tonem wywołuje metodę, której w niej nie ma, albo dodaje parametr, który nie istnieje. Kod czyta się jak najbardziej poprawny - i dlatego to zdradliwe. Halucynacje API to znany efekt uboczny modeli językowych, ale w Claude Code masz konkretne narzędzia, żeby go niemal wyeliminować: chodzi o to, żeby model opierał się na faktach, a nie na tym, co "wygląda prawdopodobnie".

Jak to wygląda w praktyce

Najczęściej dotyczy to bibliotek, których model zna słabiej albo które zmieniły się po dacie jego wiedzy. Asystent wywołuje funkcję z sensownie brzmiącą nazwą, której w danej wersji pakietu nie ma. Importuje moduł, który nie istnieje. Podaje opcję konfiguracji zmyśloną na wzór innych, prawdziwych opcji. Bywa, że odwołuje się do funkcji z Waszego własnego kodu - takiej, która "powinna" istnieć według konwencji, ale nikt jej nie napisał. Wspólna cecha: kod jest wewnętrznie spójny i wygląda profesjonalnie, więc łatwo go przyjąć bez sprawdzenia, a błąd wychodzi dopiero przy kompilacji albo uruchomieniu.

Dlaczego Claude Code tak działa

Model językowy przewiduje najbardziej prawdopodobny ciąg dalszy tekstu na podstawie wzorców, które widział podczas treningu. To genialnie działa, gdy wzorzec pokrywa się z rzeczywistością - i zawodzi, gdy model nie ma dostępu do faktów. Jeśli nie wie, jak dokładnie wygląda API danej biblioteki (bo jest niszowa, świeżo zmieniona albo to Wasz wewnętrzny kod), uzupełni lukę tym, co najbardziej pasuje do wzorca: nazwą metody, jaka "powinna" istnieć. Dochodzi do tego bariera czasu - wiedza modelu ma datę graniczną, więc o nowszych wersjach bibliotek może po prostu nie wiedzieć i zgadywać na podstawie starszych. Kluczowa obserwacja: halucynacja bierze się z braku dostępu do prawdy w danym momencie. Dlatego lekarstwem nie jest "lepszy model", tylko podanie mu faktów - realnej dokumentacji, prawdziwego kodu, wyniku uruchomienia - żeby nie musiał niczego zgadywać.

Jak to rozwiązać krok po kroku

  1. Podłącz źródła dokumentacji przez serwery MCP. Claude Code potrafi korzystać z serwerów MCP dających dostęp do aktualnej dokumentacji bibliotek - dzięki temu zamiast zgadywać API, model odczytuje jego prawdziwy kształt. To najskuteczniejszy sposób na halucynacje wokół zewnętrznych pakietów.
  2. Każ modelowi najpierw przeczytać kod, potem pisać. Zamiast "dodaj wywołanie tej funkcji", poproś "sprawdź w pliku, jak nazywa się ta funkcja i jakie ma parametry, a potem jej użyj". Odczyt realnego kodu wyklucza zmyślanie sygnatur z Waszego projektu.
  3. Wymuś weryfikację przez uruchomienie. Poproś, żeby po napisaniu kodu uruchomił kompilację, linter albo testy i poprawił to, co nie przechodzi. Prawdziwy komunikat błędu natychmiast obnaża nieistniejącą metodę - a Claude Code potrafi sam odczytać ten błąd i naprawić kod.
  4. Podawaj wersje. W prompcie albo w CLAUDE.md napisz, jakiej wersji biblioteki używacie. Model, który wie, że to konkretna, nowsza wersja, rzadziej sięga po nieaktualne wzorce z pamięci.
  5. Formułuj prompty tak, by nie zostawiać miejsca na wymysły. Zamiast prosić ogólnie, wskaż konkret: nazwę metody, którą chcesz wywołać, albo fragment dokumentacji do zastosowania. Im mniej luk, tym mniej okazji do zgadywania.
  6. Jeśli nie masz pewności, poproś model wprost, żeby oznaczył, czego nie zweryfikował - "napisz, które wywołania sprawdziłeś w dokumentacji, a które zakładasz". To ujawnia miejsca, którym trzeba się przyjrzeć, zamiast przyjmować wszystko na wiarę.

Jak sprawdzić, że zadziałało

Najtwardszy dowód to uruchomienie. Jeśli kod się kompiluje, linter nie zgłasza nieistniejących symboli, a testy przechodzą, to nie ma w nim wywołań widmo - istniejące narzędzia zweryfikowały każdy symbol za Ciebie. Dlatego warto wpleść ten krok na stałe: kazać asystentowi kończyć zadanie uruchomieniem, a nie samym napisaniem kodu. Gdy podłączysz dokumentację przez MCP, sprawdzianem jest zmiana zachowania - model przestaje pewnym tonem podawać nieistniejące metody, bo sięga po ich prawdziwą listę. Przy Waszym własnym kodzie potwierdzeniem jest to, że asystent, poproszony najpierw o odczyt pliku, używa dokładnie tych nazw, które tam są. A jeśli poprosiłeś o oznaczenie niezweryfikowanych fragmentów, po prostu przejrzyj wskazane miejsca - to one, a nie cały kod, wymagają Twojego oka.

Wroc do listy: 100 najczestszych problemow z Claude Code

Szkolenie Claude Code - od zera do zespołu agentów AI, prowadzi Łukasz Matuszewski (JSystems)

Szkolenie Claude Code - od zera do zespołu agentów AI -->

Szkolenie Claude Code - od zera do zespołu agentów AI

Tryb planowania, tryby uprawnień, komendy, MCP, hooki i systemy multi-agent - wszystko na żywym kodzie podczas trzydniowego szkolenia. Prowadzi Łukasz Matuszewski. Szkolenie ma terminy gwarantowane - odbędzie się niezależnie od liczby zgłoszeń.

Sprawdź szkolenie Claude Code

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Dlaczego Claude Code wymysla nieistniejace metody?
Model przewiduje najbardziej prawdopodobny ciag dalszy na podstawie wzorcow z treningu, wiec gdy nie ma dostepu do faktow - na przyklad do aktualnego API niszowej lub swiezo zmienionej biblioteki - uzupelnia luke nazwa, ktora powinna istniec. Halucynacja bierze sie z braku dostepu do prawdy.
Jak sprawic, by Claude Code nie zmyslal API bibliotek?
Najskuteczniej podlaczyc serwery MCP dajace dostep do aktualnej dokumentacji bibliotek - wtedy zamiast zgadywac, model odczytuje prawdziwy ksztalt API. Warto tez podawac w prompcie lub w CLAUDE.md konkretna wersje biblioteki, by model rzadziej siegal po nieaktualne wzorce z pamieci.
Czy weryfikacja przez uruchomienie pomaga na halucynacje?
Tak - poproszenie asystenta, by po napisaniu kodu uruchomil kompilacje, linter albo testy i poprawil bledy, natychmiast obnaza nieistniejaca metode. Prawdziwy komunikat bledu wskazuje wywolanie widmo, a Claude Code potrafi sam odczytac ten blad i naprawic kod bez Twojego udzialu.
Jak uniknac zmyslania funkcji z wlasnego kodu?
Kaz modelowi najpierw przeczytac kod, a dopiero potem pisac - zamiast prosic o dodanie wywolania, popros, by sprawdzil w pliku nazwe funkcji i jej parametry, a potem jej uzyl. Odczyt realnego kodu wyklucza zmyslanie sygnatur, ktore wedlug konwencji powinny istniec, ale nikt ich nie napisal.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...